Tak jak jsme slíbil, po projevení zájmu překládám výsledky svých pokusů se scripty pro službu Lepsitv. Pokračuji v duchu toho, co tady zveřejnil pro Lepsitv @mobilemanic a také @JiRo, z jehož logiky řešení vycházím. Vše je psáno v sh scriptu, použitelné je tedy jen v Tvheadend. Pokud by někdo chtěl totéž pro IPTV Simple Client, je třeba to přepsat do php a zajistit si prostředí pro jeho běh.
O tom, co a jak jsem kolem Lepsitv prováděl, existuje několik postů. Doporučuji si je přečíst jako porvní, hodně je v nich vysvětleno. TEnto post už obsahuje pouze faltická data kolem použitých scriptů.
Jinak, já službu Lepsitv nepoužívám, zaplatil jsme si ji pouze na 1 měsíc, abych mohl scripty odladit a odzkoušet. Proto také tímto postem končím s dalším rozvojem.
Playlist vytvářím zásadně ručně, i když by ho bylo možné ho ze seznamu kanálů jednoduše vytvořit (to nechám někomu dalším), Použít pro to se dá obsah souborů channels.ref nebo channels.json (viz dále).
Playlist
Příklad playlistu je zde. Obsahuje pouze pár kanálů, které jsem zkoušel. Doplnit se dá samozřjmě na základě obsahu souboru channels.json.
Kód:
#EXTM3U
#EXTINF:-1,HBO
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh wx__hbo_hevc
#EXTINF:-1,HBO 2
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh wx__hbo2_hevc
#EXTINF:-1,HBO 3
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh wx__hbo3_hevc
#EXTINF:-1,JOJ Cinema
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh hx__joj_cinema_hevc
#EXTINF:-1,Filmbox
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh wx__filmbox_h264
#EXTINF:-1,Filmbox Plus
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh wx__filmbox_plus_h264
#EXTINF:-1,Filmbox Premium
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh wx__filmbox_premium_hevc
#EXTINF:-1,Nova Sport 1
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh vx__nova_sport_1_hevc
#EXTINF:-1,Nova Sport 2
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh vx__nova_sport_2_hevc
#EXTINF:-1,Hobby TV
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh px__hobbytv_h264
#EXTINF:-1,STV 1
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh bx__stv1_hevc
#EXTINF:-1,STV 2
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh fx__stv2_hevc
#EXTINF:-1,Markíza International
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh vx__markiza_int_hevc
#EXTINF:-1,JOJ Family
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh hx__joj_family_hevc
#EXTINF:-1,TV Lux
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh qx__lux_h264
#EXTINF:-1,UP NETWORK
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh qx__upnetwork_h264
#EXTINF:-1,Adventure TV
pipe:///storage/.kodi/media/playlist/lepsi/streamer.sh wx__adventuretv_hevc
Jak je v řešení od @JiRo obvyklé, v playlistu si pomocí metody pipe:// aplikace Tvheadend volá streamer.sh, který v tomto případě má jeden parametr, a tím je identifikace kanálu, a ten přes stdout vrací do Tvheadend přímo data obsahu příslušného streamu.
Vyzkoušel jsme dva způsoby, jak to celé řešit, popsáno je to v https://www.xbmc-kodi.cz/prispevek-ott-i...2#pid59122. Pro každý způsob tedy existuje vlastní streamer. Můžete si tak vyzkoušet oba způsoby řešení z jednoho plalyistu. Stačí si oba streamery pojmenovat odlišně, např. streamer1.sh a streamer2.sh a vždy ten, který budete chtít používat pak přejmenovat na streamer.sh.
Varianta 1
Obsah streamer1.sh je tedy následující:
Kód:
#!/bin/bash
data='/storage/.kodi/media/playlist/lepsi/'
user='USERNAME'
pass='PASSWORD'
qual=h265
salt=$(wget -q -O - --no-check-certificate https://www.xn--lep-tma39c.tv/api/prihlaseniP.php | sed -e "s/\(.*\)\":\"\(.*\)\"\(.*\)/\2/")
hash=$(printf '%s%s%s' "${user}" "${pass}" "${salt}" | md5sum | cut -d ' ' -f 1)
auth=$(wget -q -O - --no-check-certificate "https://www.xn--lep-tma39c.tv/api/prihlaseniP.php?prist_jmeno=${user}&hash=${hash}&prist_heslo=${pass}&sul=${salt}" | sed -e "s/\(.*\)\"auth\":\"\(.*\)\",\"auth2\":\"\(.*\)/\2/")
uval=$(wget -q -O - --no-check-certificate https://www.xn--lep-tma39c.tv/api/overeniP.php?auth=${auth})
program=$(wget -q -O - --no-check-certificate https://www.xn--lep-tma39c.tv/api/program0.php?auth=${auth}\&k=${qual}\&streams=1 | sed -e "s/\(.*\)\"auto\":\"\(.*\)s=$1\&\([^\"]*\)\"\(.*\)/\2s=$1\&\3/" | tr '\\\\' '/' | sed -e "s/\/\//\//g")
stream=$(printf '%s%s%s' "${program}" "&u=" "${uval}")
#echo ${stream} >> ${data}streamer.log
#wget -qO - ${stream} >> ${data}streamer.log
ffmpeg -re -fflags +genpts -loglevel fatal -i ${stream} -c copy -f mpegts -mpegts_service_type digital_tv -metadata service_provider=lepsitv -metadata service_name=$1 pipe:1
Protože jsou scripty spouštěny z Tvheadend, je ve všech scriptech vždy proměnné data, ve které je adresa datového adresáře, do kterého se ukládají všechny produkované soubory a jsou tam uloženy i všechny scripty.
V kódu jsou "zakomentovány dva řádky":
#echo ${stream} >> ${data}streamer.log
#wget -qO - ${stream} >> ${data}streamer.log
#wget -qO - ${stream} >> ${data}streamer.log
které mohou provádět logování získané adresy streamu naladěného kanálu a jeho obsahu (jde o HLS). Je to užitečné při ladění a případných problémech.
Varianta 2
Prvním scriptem je Login.sh. Jeho výstupem je hodnota proměnné auth ukládaná do souboru login.id. Kromě toho script ukládá do dvou souborů:
- channels.ref - url adresu, dotazu, který vrátí seznam obsahu všech dostupných kanálů služby včetně jejich identifikace, která se pak používá v playlist
- channels.json - seznam obsahu všech dostupných kanálů
Kód:
#!/bin/sh
data='/storage/.kodi/media/playlist/lepsi/'
user='USERNAME'
pass='PASSWORD'
qual=h265
salt=$(wget -q -O - --no-check-certificate https://www.xn--lep-tma39c.tv/api/prihlaseniP.php | sed -e "s/\(.*\)\":\"\(.*\)\"\(.*\)/\2/")
hash=$(printf '%s%s%s' "${user}" "${pass}" "${salt}" | md5sum | cut -d ' ' -f 1)
auth=$(wget -q -O - --no-check-certificate "https://www.xn--lep-tma39c.tv/api/prihlaseniP.php?prist_jmeno=${user}&hash=${hash}&prist_heslo=${pass}&sul=${salt}" | sed -e "s/\(.*\)\"auth\":\"\(.*\)\",\"auth2\":\"\(.*\)/\2/")
echo ${auth} > ${data}login.id
echo ${auth}
Nemám exaktně zjištěnou dobu platnosti auth, ale vycházím z toho, že bude pravděpodobně neomezená. Pokud to bude jinak, je samozřejmě třeba zajistit periodické spuštění tohoto scriptu.
Dalším scriptem, je session.sh, Jeho výstupem je hodnota proměnné uval ukládaná do souboru session.id, zároveň se do souboru ukládá i auth.
Kód:
#!/bin/bash
data='/storage/.kodi/media/playlist/lepsi/'
auth=$(cat ${data}login.id | head -n 1)
qual=h265
wget -q -O /storage/.kodi/media/playlist/lepsi/channels.json --no-check-certificate https://www.xn--lep-tma39c.tv/api/program0.php?auth=${auth}\&k=${qual}\&streams=1
echo https://www.xn--lep-tma39c.tv/api/program0.php?auth=${auth}\&k=${qual}\&streams=1 > /storage/.kodi/media/playlist/lepsi/channels.ref
uval=$(wget -q -O - --no-check-certificate https://www.xn--lep-tma39c.tv/api/overeniP.php?auth=${auth})
echo ${auth} ${uval} > ${data}session.id
echo ${auth} ${uval}
Doba platnosti uval je méně jak 12 hodin, maximální hodnotu jsem nezjistil. Znamená to tedy, že je třeba si zajistit periodické spouštění tohoto scriptu.
Posledním scriptem pro tuto variantu je pak konečně streamer2.sh:
Kód:
#!/bin/bash
data='/storage/.kodi/media/playlist/lepsi/'
login=$(cat ${data}session.id | head -n 1)
auth=$(echo ${login} | cut -d' ' -f1)
uval=$(echo ${login} | cut -d' ' -f2)
qual=h265
program=$(wget -q -O - --no-check-certificate https://www.xn--lep-tma39c.tv/api/program0.php?auth=${auth}\&k=${qual}\&streams=1 | sed -e "s/\(.*\)\"auto\":\"\(.*\)s=$1\&\([^\"]*\)\"\(.*\)/\2s=$1\&\3/" | tr '\\\\' '/' | sed -e "s/\/\//\//g")
stream=$(printf '%s%s%s' "${program}" "&u=" "${uval}")
#echo ${stream} >> ${data}streamer.log
#wget -qO - ${stream} >> ${data}streamer.log
ffmpeg -re -fflags +genpts -loglevel fatal -i ${stream} -c copy -f mpegts -mpegts_service_type digital_tv -metadata service_provider=lepsitv -metadata service_name=$1 pipe:1