16.6.2018, 21:59
Zdravím, v první řadě bych chtěl poděkovat JiRovi za vynikající skriptík. S tím pro mě konečně O2TV dostala pořádný smysl :-)
Nicméně jsem zjistil že se při použití playlistu typu 3 (tvheadend@) chová ffmpeg trochu podivně. Každý kanál má playlist, který vypadá přibližně takhle:
Obsahuje odkazy 3-4 další playlisty, které odkazují na streamy v různém rozlišení. Ve výchozím nastavení při použití streamer.sh si ffmpeg vybere video stopu s nejvyšší kvalitou a to samý se pokusí udělat i s audio stopou. Jenže všechny audio stopy mají stejnou kvalitu. Takže si vybere video z 365u0.m3u8 a audio z 360u0.m3u8. Zbytečně se tedy stahujou oba streamy, což je nejen zbytečná zátež na připojení, ale způsobuje to i výpadky streamu.
Zkoumal jsem tedy co s tím, až z toho vylezl mírně upravený streamer.sh
Zjistil jsem, že streamy jsou řazeny podle rozlišení od nejmenšího po největší, takže stačilo jen spočítat odkazy a podle toho pomocí parametru -map přinutit ffmpeg použít ten co je nejníž tak jak je. Vítaným vedlejším efektem je navíc, že fungují všechny audio stopy.
(a než se zeptáte: inteligentnější řešení mě fakt nenapadlo :) )
Nicméně jsem zjistil že se při použití playlistu typu 3 (tvheadend@) chová ffmpeg trochu podivně. Každý kanál má playlist, který vypadá přibližně takhle:
Kód:
#EXTM3U
#EXT-X-VERSION:2
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000
http://adresa/360u0.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1400000
http://adresa/366u0.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2450000
http://adresa/365u0.m3u8
Zkoumal jsem tedy co s tím, až z toho vylezl mírně upravený streamer.sh
Kód:
#! /bin/bash
source=$*
stream=$(grep -A 1 "${source}$" o2tv.generic.m3u8 | head -n 2 | tail -n 1)
streamcount=$(wget -qO- ${stream} | grep -Eo "(http|https)://[\da-z./?A-Z0-9\D=_-]*" | wc -l)
streamcount=$((streamcount-1))
ffmpeg -re -fflags +genpts -loglevel fatal -i ${stream} -probesize 32 -c copy -map p:${streamcount}? -f mpegts -mpegts_service_type digital_tv pipe:1
(a než se zeptáte: inteligentnější řešení mě fakt nenapadlo :) )
Server: i5-950, 16GB RAM, 1x120GB SSD, 1x 320GB + 4x 2TB HDD, Ubuntu 18.04, SW: TvHeadend, Plex Media Server (a jiné).
Klienti: Wetek Play 2 + Samsung 107cm TV, ASRock ION 330 + LG 82cm TV, záložní RPI3, SW: LibreELEC 8.2.5 / Kodi 17.6, PlexKodiConnect
Klienti: Wetek Play 2 + Samsung 107cm TV, ASRock ION 330 + LG 82cm TV, záložní RPI3, SW: LibreELEC 8.2.5 / Kodi 17.6, PlexKodiConnect