15.5.2019, 11:21
15.5.2019, 12:29
15.5.2019, 12:59
16.5.2019, 1:05
Určitě kouknu, kde máš ten skript který používáš? Případně můžeš zkusit dočasně vzít ten O2 Playlist od Pavůčka
16.5.2019, 6:13
Já teď používám odvozené řešení, snažím se ty OTT sjednotit podle jakéhosi vlastního jednoduchého "konceptu" s využitím pouze sh scriptů, V případě O2TV to pro script spouštěný z Tvheadend, funguje s HLS funguje, ale s DASH, MPEG-DASH a jeho variacemi je to stejné jako jsme uvedl výše. Opět mi tedy jde o to, zda stačí vyměnit hodnotu v parametru requestu "streamingProtocol=..." (a hlavně na co) nebo je třeba upravit ještě něco dalšího. Script vypadá takto, autentizační parametry se načítají ze souboru, identifikace kanálu se přebírá z parametrů spuštěného scriptu:
Kód:
#!/bin/sh
# Verze 0.2
# Streamer, který vytváří stream pro Tvheadend předávaný metodou pipe:// na stdout scriptu, resp. volaného ffmpeg.
# Závislosti: ffmpeg, wget, jq
# Předpoklady: existuje soubor acces.id s aktuálními parametry přihlášeného a registrovaného zařízení
# Začátek části zadání uživatelských parametrů
# Pozn: Veškeré parametry bez mezer a českých znaků!
# Identifikace poskytovatele služby , které se přenese do Kodi jako "Poskytovatel" - zobrazí se v Kodi v OSD PVR
provider=o2tv.cz
# Typ zařízení. Je určující pro nabídku streamů služby {STB, PC, TABLET, MOBILE}
device_type=STB
# Rozlišení, závisí na typu zařízení {HD, SD} Např. pro STB je HD 1920x1080, 50 FPS a SD 1024x576, 25 FPS.
resolution=HD
# Absolutní cesta k adresáři služby ve tvaru /.../
data=/storage/.kodi/media/playlist/o2tvsh/
# Absolutní cesta k adresáři s ffmpeg /.../ nebo prázdné (prog=)
prog=/storage/.kodi/addons/tools.ffmpeg-tools/bin/
# Konec části zadání uživatelských parametrů
channel=$1
service=$2
streaming_protocol=HLS
access_id=$(cat ${data}access.id | head -n 1 )
device_id=$(echo ${access_id} | cut -d' ' -f2)
access_token=$(echo ${access_id} | cut -d' ' -f3)
subscription=$(echo ${access_id} | cut -d' ' -f4)
json=$(wget -qO - --header "X-NanguTv-Access-Token:${access_token}" --header "X-NanguTv-Device-Id:${device_id}" "https://app.o2tv.cz/sws/server/streaming/uris.json?serviceType=LIVE_TV&deviceType=${device_type}&streamingProtocol=${streaming_protocol}&resolution=${resolution}&subscriptionCode=${subscription}&channelKey=${channel}&encryptionType=NONE")
sed_string=s/_sd_/_hd_/g
[ "${resolution}" = "SD" ] && sed_string=s/_hd_/_sd_/g
stream=$(echo ${json} | sed "${sed_string}" | jq -r '.uris' | jq '.[0].uri' | tr -d '"' )
${prog}ffmpeg -fflags +genpts -i ${stream} -vcodec copy -acodec copy -f mpegts -mpegts_service_type digital_tv -metadata service_provider=${provider} -metadata service_name=${service} pipe:1
Kód:
#EXTM3U
#EXTINF:-1,ČT1 HD
pipe:///storage/.kodi/media/playlist/o2tvsh/streamer.sh %C4%8CT1%20HD ct1hd
Díky za snahu pomoci.
16.5.2019, 12:34
Kód:
#! /bin/sh
# Verze 0.3
# Přihlášení a registrace zařízení služby OTT O2TV(verze pro "noO2" zákazníky)
# Pozn. Používejte pouze tehdy, pokud jste si jisti, že tento způsob přihlášení můžete použít.
# Závislosti: wget, jq
# Předpoklady: účet O2TV, zaplacená služba OTT O2TV
# Začátek části zadání uživatelských parametrů
# Pozn: Veškeré parametry bez mezer a českých znaků!
# Přihlašovací jméno do služby
username=xxx
# Přihlašovací heslo do služby
password=yyy
# Název zařízení, pod kterým bude ve službě registrováno
device_name=test
# Id zařízení, pod kterým bude ve službě registrováno
# Doporučuji unikátní hexadecimalní řetězec - například MAC adresa bez oddělovačů (použijte příkaz "ip link")
# Pokud jste již službu přijímali přes některý script nebo addon autorů ort, JiRo, pavuucek, můžete použít jejich id
device_id=0000
# Absolutní cesta k adresáři služby ve tvaru /.../
data=/storage/.kodi/userdata/orangetv.sh/
# Konec části zadání uživatelských parametrů
HEADER='--header "X-NanguTv-App-Version:Android#6.4.1" --header "User-Agent:Dalvik/2.1.0" --header "Accept-Encoding:gzip" --header "Connection:Keep-Alive" --header "Content-Type:application/x-www-form-urlencoded;charset=UTF-8"'
post="grant_type=password&client_id=orangesk-mobile&client_secret=e4ec1e957306e306c1fd2c706a69606b&isp_id=5&username=${username}&password=${password}&platform_id=b0af5c7d6e17f24259a20cf60e069c22&custom=orangesk-mobile&response_type=token"
json=$(wget -qO - ${HEADER} --header "X-NanguTv-Device-Name:${device_name}" --post-data "${post}" "https://oauth01.gtm.orange.sk/oauth/token")
if [ $? != 0 ] ; then printf "ERROR: Bad authorization\n" ; exit 1 ; fi
access_token=$(echo ${json} | jq -r '.access_token')
refresh_token=$(echo ${json} | jq -r '.refresh_token')
expires_in=$(echo ${json} | jq -r '.expires_in')
echo access_token : ${access_token}
echo refresh_token : ${refresh_token}
echo expires_in : ${expires_in}
json=$(wget -qO - ${HEADER} --header "X-NanguTv-Access-Token:${access_token}" --header "X-NanguTv-Device-Name:${device_name}" --header "X-NanguTv-Device-Id:${device_id}" "https://app01.gtm.orange.sk/sws//subscription/settings/subscription-configuration.json")
if [ $? != 0 ] ; then printf "ERROR: Bad registration\n" ; exit 1 ; fi
subscription=$(echo ${json} | jq '.subscription' | tr -d '"')
locality=$(echo ${json} | jq '.locality')
billingParams=$(echo ${json} | jq '.billingParams')
offer=$(echo ${billingParams} | jq '.offers')
tariff=$(echo ${billingParams} | jq '.tariff')
echo subscription : ${subscription}
echo locality : ${locality}
echo billingParams : ${billingParams}
echo offer : ${offer}
echo tariff : ${tariff}
printf "%s %s %s %s" ${device_name} ${device_id} ${access_token} ${subscription} > ${data}access.id
if [ $? != 0 ] ; then printf "ERROR: Bad write to ${data}access.id\n" ; exit 1 ; fi
printf "Service's Ids saved to %s\n" "${data}access.id"
printf "OK\n"
exit 0
Kód:
CoreELEC:~ # /storage/.kodi/userdata/orangetv.sh/login2.sh
access_token : NDUzOWE3YWYtZmMxNy00ZDdiLWE0MzQtMmQwNmQ4MDdkooY5
refresh_token : MDQxYjU2YTMtNDI1NS00YTc5LWEwNDctNjZhZTgoozJjM2Y0
expires_in : 3153599999
wget: server returned error: HTTP/1.1 400 Bad Request
ERROR: Bad registration
16.5.2019, 13:12
Tak jenom narychlo jsem zkusil vzít API volání z mobilní aplikace O2 TV, které volá stejnou url jako máš ty ve skriptu.
URL query jsem zkusil s MOBILE a STB variantou. A Streamtype z HLS na DASH. V obou případech (mobile a STB ) to fungovalo. Dostal jsem 1080i stream. Kvalita je identická mezi HLS a DASH, jsou to úplně stejné streamy, jenom jsou jinak rozkouskované. Dávám screenshoty requestu. Až budu mít chvilku, tak to zkusím čistě z tvého skriptu.
16.5.2019, 14:27
16.5.2019, 21:31
16.5.2019, 21:39
Orange podla mna takyto zoznam neponuka... playlist.sh bude treba upravit trocha viac, t.j. implementovat tam request s tokenom na: http://app01.gtm.orange.sk/sws/server/tv/channels.json
Aj by som to spravil, ako som sluboval, ale momentalne nemam cas. Hadam sa cez vikend k tomu dostanem. (ak to do tej doby niekto nespravi )
Aj by som to spravil, ako som sluboval, ale momentalne nemam cas. Hadam sa cez vikend k tomu dostanem. (ak to do tej doby niekto nespravi )
17.5.2019, 11:04
26.5.2019, 19:15
Včera jsem v rámci práce na začlenění cz i sk OTT služby Sledovani narazil na jeden hodně zajímavý problém. Upravil jsem generátory playlistů do standardní podoby (viz https://www.xbmc-kodi.cz/prispevek-pripojeni-cz-sk-poskytovatelu-ott-iptv-k-tvheadendu?pid=67378#pid67378) a vyzkoušel si začlenění obou služeb do Tvheadend takříkajíc na zelené louce (staré sítě obou Sledovani jsem smazal a vytvořil vše nově od začátku). Vše proběhlo bez problémů, jako obvykle jsem si upravil některé detaily, přečísloval některé kanály (HBO) aby zapadly do mého konceptu číslování na které je zvyklá rodina a spustil v Tvheadend grabování EPG. Po restartu všech Kodi bylo vše v naprostém pořádku. Když jsem dnes ráno pustil jedno z Kodi, všechny HBO kanály mi z obvyklého místa v seznamu kanálů zmizely. Našel jsem je až pod původním číslem kanálu, které získají po vytvoření ze služby Sledovanitv.cz a přitom si všiml, že žádný kanál z obou Sledovani nemá přiřazeno EPG. Vše se tedy tvářilo tak, jakoby došlo k novému vytvoření služeb Sledovani v Tvheadend. Zkrátím to... Zjistil jsem, že pokaždé, když Tvheadend kontroluje obsah playlistu obou sítí Sledovani (default perioda je 60 min, nastavuje se v parametru sítě), vyhodnotí to jako změnu obsahu a spustí kompletní scan a následné automatické mapování služeb a nové vytvoření kanálů. A to i přesto, že k žádné změně obsahu playlistu nedošlo! Strávil jsem kontrolou nastavení, testováním a hledáním problému asi 1/2 hodiny, než jsem na příčinu problematického chování přišel. Protože je dost kuriózní, myslím, že bych s tím měl ostatní seznámit.
Tvheadend při kontrole změny obsahu playlistu kontroluje pouze změny v řádcích s adresou streamu, tak jsem se zaměřil na ně. A ukázalo se, že tady byl kámen úrazu. Můj generátor na konec každého řádku playlistu přidával mezeru. Při zběžné kontrole jsem si toho pochopitelně nevšiml, teprve detailní zobrazení všech dalších znaků v editoru to odhalilo. Po smazání mezery se vše vrátilo do starých kolejí a vše funguje tak, jak má.
Patrně jde o bug, možná ale, že je to někde v popisu uvedeno, že tam ta mezera nesmí být, to fakt nevím. Řetězec s adresou streamu se patrně ukládá bez koncových mezer, ale test na změnu probíhá proti celému (tedy včetně koncových mezer) 2. řádku playlistu.
Takže abyste se nedostali do stejných potíží jako já, tak si zapamatujte, že ve "druhých řádcích" playlistu pro Tvheadend nesmí být koncové mezery.
13.6.2019, 10:34
(12.5.2019, 21:38)Client Napsal(a): [ -> ]Situace kolem připojení OTT služeb k Tvheadendu se příliš nelepší.Mám v plánu dále postupně uvést řešení pro:
Sledovanitv.cz
Sledovanietv.sk
Kuki
Digi + Poda (4NET platforma)
LepšíTV
Nelehký úkol, držím palce!! Je škoda, že poskytovatelé moc nevycházejí vstříc open-source / TVH a nutí vlastní infrastrukturu v podstatě zbytečně, místo aby kousek námahy věnovali zabezpečení účtu/počtu streamu v TVH taky pro nás s krabičkama.
Vyzkouším sledovanitv od @mobilemanic, kterému také patří velký dík, že se do toho pustil. Pro mě je velmi atraktivní 4NET/Poda, ale počítám, že to je běh na dlouhou trať.
13.6.2019, 11:19
Jsem permanentně v časovém presu, dlužím toho, co jsem komunitě nasliboval, hodně. Takže to Sledovani* vložím to toho tématu ještě dnes večer.
Mimochodem. Sledovaní je z OTT služeb asi to nejlepší, co se dá v Tvheadend použít (kromě FPS, které je myslím max. 25). Je neuvěřitelně stabilní, rychlost přepínání je za všech okolností <0,5 vteřiny a abych nezapomněl, má free nabídku kanálů! Takže je možné si to kdykoliv vyzkoušet a teprve pak se rozhodnout o koupi služby. Ani možnost využít službu sk v cz a naopak není k zahození.
4NET/Poda běží bez problémů. Popsaná už je, ne v tomto obecném konceptu, ale už se mu hodně blíží. Takže neuděláš chybu, když to vyzkoušíš podle tohoto návodu Playlist 4NET (DigiTV, Poda, ...) [2018-04-11].
13.6.2019, 11:54
To je paráda, to jsem fakt nevěděl, že se to tak pohlo!
Zatím právě jen opatrnš chodím okolo původní sledovanitv.cz a zkousim to na svem TVH. Az si to trochu osaham mrknu na aktualni novinky a tvoje verze (zkousim tu z prvniho prispevku). A pokud se zadari, tak budu pokracovat PODou, to by byla parada, to sledovanitv taky vypada dobre.
V debianu strech jsem musel doinstalovat ffmpeg, registrace v pohode, ale zatim mi jde v Kodi 18.2 (Win-test) jen zvuk...
EDIT: Tak vodopád zničeho nic vodopádí :) Jak budu mít více času, vrátím se k tomu a zkusím rozchodit poslední verzi (a ještě bych vypnul to prilis bohate logovani fram spawn) a pak i tu PODu.
Zatím právě jen opatrnš chodím okolo původní sledovanitv.cz a zkousim to na svem TVH. Az si to trochu osaham mrknu na aktualni novinky a tvoje verze (zkousim tu z prvniho prispevku). A pokud se zadari, tak budu pokracovat PODou, to by byla parada, to sledovanitv taky vypada dobre.
V debianu strech jsem musel doinstalovat ffmpeg, registrace v pohode, ale zatim mi jde v Kodi 18.2 (Win-test) jen zvuk...
Kód:
2019-06-13 09:40:52.463 mpegts: Vodopád in Sledovanitv.cz - tuning on IPTV #1
2019-06-13 09:40:52.907 spawn: ffmpeg version 3.2.14-1~deb9u1 Copyright (c) 2000-2019 the FFmpeg developers
2019-06-13 09:40:52.907 spawn: built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
2019-06-13 09:40:52.907 spawn: configuration: --prefix=/usr --extra-version='1~deb9u1' --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libo
2019-06-13 09:40:52.907 spawn: libavutil 55. 34.101 / 55. 34.101
2019-06-13 09:40:52.907 spawn: libavcodec 57. 64.101 / 57. 64.101
2019-06-13 09:40:52.907 spawn: libavformat 57. 56.101 / 57. 56.101
2019-06-13 09:40:52.907 spawn: libavdevice 57. 1.100 / 57. 1.100
2019-06-13 09:40:52.907 spawn: libavfilter 6. 65.100 / 6. 65.100
2019-06-13 09:40:52.907 spawn: libavresample 3. 1. 0 / 3. 1. 0
2019-06-13 09:40:52.907 spawn: libswscale 4. 2.100 / 4. 2.100
2019-06-13 09:40:52.907 spawn: libswresample 2. 3.100 / 2. 3.100
2019-06-13 09:40:52.907 spawn: libpostproc 54. 1.100 / 54. 1.100
2019-06-13 09:40:52.927 spawn: [hls,applehttp @ 0x1c0d5d0] Opening 'http://188.246.117.25/moderntv/stream/loop_waterfall/40-hls/1560418814-03618363.ts?_cdn_session=&_cdn_timestamp=&_cdn_token=' for reading
2019-06-13 09:40:53.140 spawn: Input #0, hls,applehttp, from 'http://188.246.117.25/moderntv/stream/loop_waterfall/40-hls/live-media.m3u8?_cdn_session=&_cdn_timestamp=&_cdn_token=':
2019-06-13 09:40:53.140 spawn: Duration: N/A, start: 23610.958933, bitrate: N/A
2019-06-13 09:40:53.140 spawn: Program 0
2019-06-13 09:40:53.140 spawn: Metadata:
2019-06-13 09:40:53.140 spawn: variant_bitrate : 0
2019-06-13 09:40:53.140 spawn: Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
2019-06-13 09:40:53.140 spawn: Metadata:
2019-06-13 09:40:53.140 spawn: variant_bitrate : 0
2019-06-13 09:40:53.140 spawn: Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp
2019-06-13 09:40:53.140 spawn: Metadata:
2019-06-13 09:40:53.140 spawn: variant_bitrate : 0
2019-06-13 09:40:53.141 spawn: Output #0, mpegts, to 'pipe:1':
2019-06-13 09:40:53.141 spawn: Metadata:
2019-06-13 09:40:53.141 spawn: encoder : Lavf57.56.101
2019-06-13 09:40:53.141 spawn: Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 25 tbr, 90k tbn, 90k tbc
2019-06-13 09:40:53.141 spawn: Metadata:
2019-06-13 09:40:53.141 spawn: variant_bitrate : 0
2019-06-13 09:40:53.141 spawn: Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo
2019-06-13 09:40:53.141 spawn: Metadata:
2019-06-13 09:40:53.141 spawn: variant_bitrate : 0
2019-06-13 09:40:53.141 spawn: Stream mapping:
2019-06-13 09:40:53.141 spawn: Stream #0:0 -> #0:0 (copy)
2019-06-13 09:40:53.141 spawn: Stream #0:1 -> #0:1 (copy)
2019-06-13 09:40:53.141 spawn: Press [q] to stop, [?] for help
2019-06-13 09:40:53.651 spawn: frame= 14 fps=0.0 q=-1.0 size= 326kB time=00:00:00.51 bitrate=5216.8kbits/s speed= 1x
2019-06-13 09:40:54.160 spawn: frame= 27 fps= 27 q=-1.0 size= 528kB time=00:00:01.03 bitrate=4188.4kbits/s speed=1.01x
2019-06-13 09:40:54.669 spawn: frame= 40 fps= 26 q=-1.0 size= 698kB time=00:00:01.55 bitrate=3685.3kbits/s speed=1.02x
2019-06-13 09:40:55.177 spawn: frame= 51 fps= 25 q=-1.0 size= 849kB time=00:00:02.02 bitrate=3433.0kbits/s speed=0.995x
2019-06-13 09:40:55.687 spawn: frame= 64 fps= 25 q=-1.0 size= 1010kB time=00:00:02.53 bitrate=3259.0kbits/s speed=0.997x
2019-06-13 09:40:56.187 spawn: frame= 75 fps= 25 q=-1.0 size= 1164kB time=00:00:03.05 bitrate=3126.7kbits/s speed= 1x
2019-06-13 09:40:56.688 spawn: frame= 88 fps= 25 q=-1.0 size= 1345kB time=00:00:03.56 bitrate=3091.9kbits/s
EDIT: Tak vodopád zničeho nic vodopádí :) Jak budu mít více času, vrátím se k tomu a zkusím rozchodit poslední verzi (a ještě bych vypnul to prilis bohate logovani fram spawn) a pak i tu PODu.
13.6.2019, 12:23
U té PODy bacha, oni nepovolují více streamů z jednoho zařízení. Ale v tom popisu je to zmíněné, tak jen abys nebyl překvapený.
13.6.2019, 12:30
Díky za info.. Asi by bylo dobré to někde zmínit, nebo jsem četl moc rychle. Já to mám zatím pro jednoduchost / zkoušení mimo playlist, jen jsem si naťukl manuálně MUX. Takže by měly odpadnout jakékoli problémy s -mezi playlistem-. Pokud to je jen po inicializačním skenu, tak to ničemu nevadí.. Nedaří se mě najít něco víc k tvojí verzi, zatím to chápu tak, že jsi to jen nesepsal, a "dostupná" je zatím O2 :)
U té PODY si toho jsem vědom, je to hned napsané v příspěvku a v podstatě mi to nevadí, ani mě to moc neomezí (malá domácnost, TV programy se skoro nepoužívají. Mám od nich k připojení nějakou základní sadu programů zadarmo (SD, 50 jich je či co), tak škoda nevyužít, když to lze (doma se používá v podstatě jen Kodi). Navíc tuším, že v základu nabízí 4 možné registrace (=4 TV) a tolik jich doma ani nemám :)
U té PODY si toho jsem vědom, je to hned napsané v příspěvku a v podstatě mi to nevadí, ani mě to moc neomezí (malá domácnost, TV programy se skoro nepoužívají. Mám od nich k připojení nějakou základní sadu programů zadarmo (SD, 50 jich je či co), tak škoda nevyužít, když to lze (doma se používá v podstatě jen Kodi). Navíc tuším, že v základu nabízí 4 možné registrace (=4 TV) a tolik jich doma ani nemám :)
13.6.2019, 12:43
13.6.2019, 14:08
Děkuju
Zatím uloženo do TOREAD, momentálně se potím s Podou, která na první dobrou nechce jet (zkouším opět proof-of-concept bez playlistů, abych snížil počet "points of failure") a naopak to vypadá, že Scan dá do pohybu akce, které končí zaplněním ulimit Než se tím prokoušu, možná už bude tvoje "summary" pro sledovani* veřejné. Sám si budu muset udělat pořádek v těch všech OTT IPTV threadech, ale jsou skvělé! Snad nám to dlouho vydrží a nebude to někdo nějak zneužívat.
Zatím uloženo do TOREAD, momentálně se potím s Podou, která na první dobrou nechce jet (zkouším opět proof-of-concept bez playlistů, abych snížil počet "points of failure") a naopak to vypadá, že Scan dá do pohybu akce, které končí zaplněním ulimit Než se tím prokoušu, možná už bude tvoje "summary" pro sledovani* veřejné. Sám si budu muset udělat pořádek v těch všech OTT IPTV threadech, ale jsou skvělé! Snad nám to dlouho vydrží a nebude to někdo nějak zneužívat.
17.9.2019, 12:01
(15.5.2019, 12:59)Client Napsal(a): [ -> ]Zkoušel jsem do requestu zadat požadavek na DASH, ale ať zkouším jakoukoliv variantu (DASH, ..., MPEG-DASH, ...) tak se nedaří. Mohl bys poradit?