• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Zdravím hosta! Přihlášení Registrace


Hodnocení tématu:
  • 1 Hlas(ů) - 5 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Připojení CZ/SK poskytovatelů OTT IPTV k TVHeadendu
#81
Ty mikrovýpadky jsem pozoroval u HLS streamu typu STB (1080i). Horší kvality typu PC nebo Tablet byly v pořádku. Jejich streamovací server to enkódoval s chybami, nebyl to korektní HLS stream, měl s tím problém i VLC, a když jsem si patlal malou webovou aplikaci na přehrávání O2 TV pro mé kamarády, tak s tím měl problém každý javascriptový HLS přehrávač. Pokud jsem upravil ten O2TVPlaylist script od Pavůčka a v HTTP requestu požádal místo HLS o DASH stream, tak ten byl enkódován korektně bez mikrovýpadků.

Můj odhad je, že ten stream pro settopboxy typu HLS neprovozovali, ten jejich server nám to posílá když si o to požádáme, ale sami používali buď DASH, nebo pro uživatele v jejich O2 síti multicast vysílání a HLS pouze pro prohlížeče v 720p co neumí DASH.

Ale díky moc za tip, vyzkouším to s tím HLS! Takhle mi na iOS šlo v prohlížeči jen max. 720p.
SZ nepoužívejte na dotazy, které se hodí pro všechny. Pouze pokud chcete abych něco někde doplnil, opravil.
 
Citovat
#82
@marhycz Díky za info a já zase zkusím request na DASH.
ASUS VivoMini + LE 9.0.2 (Kodi 18.2) + Tvheadend 4.2 * ASUS VivoMini + LE 9.0.2 (Kodi 18.2) * 3x PC + W10 (Kodi 18.2)
 
Citovat
#83
@Client: Jasňačka, soubor o2tvgo.py a nachází se to tam 2x.
SZ nepoužívejte na dotazy, které se hodí pro všechny. Pouze pokud chcete abych něco někde doplnil, opravil.
 
Citovat
#84
@marhycz Tady to je případ, kdy se ten request sestavuje dynamicky ve scriptu volaném z Tvheadend, takž změna bude daleko triviálnější. 1¨

@marhycz 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?
ASUS VivoMini + LE 9.0.2 (Kodi 18.2) + Tvheadend 4.2 * ASUS VivoMini + LE 9.0.2 (Kodi 18.2) * 3x PC + W10 (Kodi 18.2)
 
Citovat
#85
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
SZ nepoužívejte na dotazy, které se hodí pro všechny. Pouze pokud chcete abych něco někde doplnil, opravil.
 
Citovat
#86
@marhycz Ještě před tím, než práci na O2TV převzal @pavuucek jsem to zkoušel ještě na originale video addon od Štěpána Orta a pak na úpravě od @Jiro. Bylo mi jasné, že pokud se tam explicitně definuje typ protokolu s parametrem HLS, bude tam asi možné použít i něco jiného. Zkoušel jsem různé variace z MP4 nebo DASH, MPEG-DASH, ... Ano, jak píšeš výše, tak jsou dvě místa, kde se definuje použitý protokol, ale ani v jednom případě jsme nebyl úspěšný. Takže mi jde o to, zda stačí jen změnit tu specifikaci v requstech (místo HLS dát něco jiného) či zda se musí změnit ještě něco.

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
V playlistu, skrze který je ten script volaný z TVheadend, to pak vypadá například takto:
Kód:
#EXTM3U
#EXTINF:-1,ČT1 HD
pipe:///storage/.kodi/media/playlist/o2tvsh/streamer.sh %C4%8CT1%20HD ct1hd
Celé je to popsané v tomto tématu [Only registered and activated users can see links Click here to register].

Díky za snahu pomoci.
ASUS VivoMini + LE 9.0.2 (Kodi 18.2) + Tvheadend 4.2 * ASUS VivoMini + LE 9.0.2 (Kodi 18.2) * 3x PC + W10 (Kodi 18.2)
 
Citovat
#87
@Client: pokouším se sh na OrangeTV.... zeditoval jsem o na toto:
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
a vyjelo mi toto:
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
zdá se,že autorizace proběhla ale registrace ne.... 10
:::  2x Beelink Mini MXIII-II 2GB/16GB LibreELEC 8.2 v NAND ::: Beelink Mini MXIII-II - CE 9.0.1 v NAND (Private TVH Server)  :::
 
Citovat
#88
@Client: Jasně, plně ti rozumím. Mně právě plně stačilo ve skriptu od Pavůčka změnit v souboru o2tvgo.py řetězec z 'HLS' na 'DASH' a to na 2 místech v tom souboru, protože se tam definovaly nějaké 2 requesty. To bylo všechno a funguje to, každých 24 hodin se mi to pouští a generuje linky.  Proto díky za skript, zkusím se kouknout na to proč to tady nejde.

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.


Přiložené soubory Miniatury
           
SZ nepoužívejte na dotazy, které se hodí pro všechny. Pouze pokud chcete abych něco někde doplnil, opravil.
 
Citovat
#89
@otava5 Máš chybu v requestu: [Only registered and activated users can see links Click here to register]//subscription/settings/subscription-configuration.json  6
ASUS VivoMini + LE 9.0.2 (Kodi 18.2) + Tvheadend 4.2 * ASUS VivoMini + LE 9.0.2 (Kodi 18.2) * 3x PC + W10 (Kodi 18.2)
 
Citovat
#90
@Client: díky login se povedl... umíš vyčmuchat něco jako [Only registered and activated users can see links Click here to register] pro OrangeTV pro playlist.sh?1
:::  2x Beelink Mini MXIII-II 2GB/16GB LibreELEC 8.2 v NAND ::: Beelink Mini MXIII-II - CE 9.0.1 v NAND (Private TVH Server)  :::
 
Citovat
#91
Orange podla mna takyto zoznam neponuka... playlist.sh bude treba upravit trocha viac, t.j. implementovat tam request s tokenom na: [Only registered and activated users can see links Click here to register]

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 Big Grin)
 
Citovat
#92
@johnyzh94 Ať se snažím, jak se snažím, nedaří se mi z rozhraní dostat seznam kanálů zaplacené služby. Zajímavé je, že v python to funguje bez problémů. Ale jakmile udělám to samé přes wget, tak mi to vrátí chybu. Proto jsem použil to [Only registered and activated users can see links Click here to register], protože to funguje. Ale bohužel to vrací seznam všech kanálů.
ASUS VivoMini + LE 9.0.2 (Kodi 18.2) + Tvheadend 4.2 * ASUS VivoMini + LE 9.0.2 (Kodi 18.2) * 3x PC + W10 (Kodi 18.2)
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)