XBMC-Kodi.cz

Úplná verze: OTT/IPTV - jednodušeji to už nejde
Prohlížíte si holou variantu vašeho obsahu. Prohlédněte si plnou verzi s příslušným formátováním.
Stran: 1 2 3 4 5 6 7 8 9 10 11 12
To mi Kodi taky ukazuje 50 ale po chvili se to prepne na 25. V mx playeru to ale ukazuje, ze tam je proud s 50fps.
Definuj po chvíli. Mně to ukazuje 50 FPS trvale.
Nakonec mi PHP funguje takto upravený:
Kód:
 
<?php
#login
$username = "xx";
$password = "yy";

#params
$channel = rawurlencode($_GET["ch"]);
$type = $_GET["d"];
$res = $_GET["r"];

# token
$data = array('grant_type' => 'password', 'client_id' => 'tef-web-portal-etnetera','client_secret' => '2b16ac9984cd60dd0154f779ef200679','username' => ''.$username.'','password' => ''.$password.'', 'platform_id' => '231a7d6678d00c65f6f3b2aaa699a0d0', 'language' => 'cs');
$ch = curl_init('https://oauth.o2tv.cz/oauth/token');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: oauth.o2tv.cz', 'User-Agent: okhttp/3.12.2', 'Accept-Encoding: gzip', 'Connection: Keep-Alive', 'Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$j = json_decode($result,true);
$token = $j["access_token"];
curl_close($ch);

# configuration
$ch = curl_init('https://app.o2tv.cz/sws/subscription/settings/subscription-configuration.json');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-NanguTv-Device-Id: 172c533453e1b16e', 'X-NanguTv-Device-Name: Nexus 7', 'X-NanguTv-App-Version: Android#6.8.1', 'Host: oauth.o2tv.cz', 'User-Agent: okhttp/3.12.2', 'Accept-Encoding: gzip', 'Connection: Keep-Alive', 'Content-Type: application/x-www-form-urlencoded', 'X-NanguTv-Access-Token: '.$token.''));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$j = json_decode($result,true);
$subscription_code = $j["subscription"];

#streaming
$uris = 'https://app.o2tv.cz/sws/server/streaming/uris.json?serviceType=LIVE_TV&deviceType='.$type.'&streamingProtocol=HLS&subscriptionCode='.$subscription_code.'&channelKey='.$channel.'&resolution='.$res.'&encryptionType=NONE';
$ch = curl_init($uris);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-NanguTv-Device-Id: 172c533453e1b16e', 'X-NanguTv-Device-Name: Nexus 7', 'X-NanguTv-App-Version: Android#6.8.1', 'Host: oauth.o2tv.cz', 'User-Agent: okhttp/3.12.2', 'Accept-Encoding: gzip', 'Connection: Keep-Alive', 'Content-Type: application/x-www-form-urlencoded', 'X-NanguTv-Access-Token: '.$token.''));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$j = json_decode($result,true);
$url = $j['uris'][0]['uri'];
header('Location: '.$url.'');
?>
url/script.php?ch=ČT24%20HD&d=?&r=?
za d dosadit STB/PC za r dosadit HD/SD

ale proč vlc vybírá stream jak se mu zlíbí a ne ten poslední nejkvalitnější? 8
Zkus tady.
: to je ono 1 Díky
Jj zapomnel jsem tam dat ten $subscription_code. Ja jsem si ten skript rozdelil na dve casti. Prvni je token a configurarion kdy se mi do souboru ulozi token a subscription_code. Spoustim jen streaming, kdy se mi data nactou ze souboru. Ted jen zjistuju jak dlouho vydrzi ten token a podle toho si pak upravim obnoveni. Taky jsem si tam dal pole abych nemusel do parametru davat cely nazev.
Token:
Kód:
<?php
#login
$username = "email";
$password = "heslo";

# token
$data = array('grant_type' => 'password', 'client_id' => 'tef-web-portal-etnetera','client_secret' => '2b16ac9984cd60dd0154f779ef200679','username' => ''.$username.'','password' => ''.$password.'', 'platform_id' => '231a7d6678d00c65f6f3b2aaa699a0d0', 'language' => 'cs');
$ch = curl_init('https://oauth.o2tv.cz/oauth/token');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: oauth.o2tv.cz', 'User-Agent: okhttp/3.12.2', 'Accept-Encoding: gzip', 'Connection: Keep-Alive', 'Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$j = json_decode($result,true);
$token = $j["access_token"];
echo $token;
curl_close($ch);

# configuration
$ch = curl_init('https://app.o2tv.cz/sws/subscription/settings/subscription-configuration.json');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-NanguTv-Device-Id: 172c533453e1b16e', 'X-NanguTv-Device-Name: Nexus 7', 'X-NanguTv-App-Version: Android#6.8.1', 'Host: oauth.o2tv.cz', 'User-Agent: okhttp/3.12.2', 'Accept-Encoding: gzip', 'Connection: Keep-Alive', 'Content-Type: application/x-www-form-urlencoded', 'X-NanguTv-Access-Token: '.$token.''));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$j = json_decode($result,true);
$subscription_code = $j["subscription"];
echo '</br>'.$subscription_code;
curl_close($ch);

#save data
$file = fopen("./o2tv_data.txt", "w");
fwrite($file, $token."\n".$subscription_code);
fclose($file);
?>
Streaming:
Kód:
<?php
#params
$channel_input = explode(".m3u8", $_GET["ch"]);
$channel_input = $channel_input[0];
$array = array('1' => 'O2 Sport HD', '2' => 'O2 Fotbal HD', '3' => 'O2 Tenis HD');
$arr = $array[$channel_input];
$channel = rawurlencode($arr);
$type = "STB";
$resolution = "HD";

#read data
$lines = file("o2tv_data.txt", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$data = array_chunk($lines, 3);
$token = $data[0][0];
$subscription_code = $data[0][1];

#streaming
$uris = 'https://app.o2tv.cz/sws/server/streaming/uris.json?serviceType=LIVE_TV&deviceType='.$type.'&streamingProtocol=HLS&subscriptionCode='.$subscription_code.'&channelKey='.$channel.'&encryptionType=NONE';
$ch = curl_init($uris);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-NanguTv-Device-Id: 172c533453e1b16e', 'X-NanguTv-Device-Name: Nexus 7', 'X-NanguTv-App-Version: Android#6.8.1', 'Host: oauth.o2tv.cz', 'User-Agent: okhttp/3.12.2', 'Accept-Encoding: gzip', 'Connection: Keep-Alive', 'Content-Type: application/x-www-form-urlencoded', 'X-NanguTv-Access-Token: '.$token.''));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$j = json_decode($result,true);
$j = $j['uris'];
foreach($j as $v){
    $q = $v['resolution'];
    if ($q == $resolution) {
        $url = $v['uri'];
    }
}
header('Location: '.$url.'');
?>

Pak to mam takto: url/o2tv/o2tv.php?ch=1.m3u8
Pokud se pouzije htaccess tak jen url/o2tv/1.m3u8
funguje vám login.sh nebo zase něco mění?
Kód:
 
/home/hts/o2tv/login2.sh
access_token : NThkZmU3NzYtNzhiZi00YzYyLTgwY2MtYjlhNjg1YWY5ZD89
refresh_token : ZGExMTRjMjMtOGI3MS00MjRhLTk4NWEtYmEwNWI1OTYwMW15
expires_in : 3153599999
ERROR: Bad registration
Podle mne nemáte tu správnou autorizační sekvenci.

Mimochodem, proč se stále přihlašuješ? Já už jedu na jedno přihlášení několik měsíců...
: hraju si s php a tak zkouším login - problém byl v header....

: Šlo by udělat volbu HD/SD v streaming php?
Vzdyt uz jsem to sem daval. Skript je rozdelenej na 2 casti. Jedna je prihlaseni kde se vygeneruje a ulozi token. Pak volas jen druhou cast streaming, kde zadas get parametry. Token se nacte ze souboru. Jestli potrebujes aby se token generoval automaticky v urcitym intervalu, muzes vyuzit treba IFTTT a plugin webhooks.
: vím.... přísahám že to ráno nešlo a teď zas jde   9
Nangu TV v O2TV se občas chová stochasticky. Už jsem o tom psal výše, ať už je to to občasné ignorování kvality - ať zadáš v requestu SD nebo HD, vrátí ti vektor (uris), kde jsou SD i HD streamy a ještě namíchané zcela náhodně (ale to má ošetřené, v tom bys problém neměl mít) nebo při přihlašování. Tady záleží na typu účtu, tedy zda máš objednanou standardní službu O2TV - pak jsi autorizován přes obecnou autorizaci zákazníka O2 nebo zda používáš pouze službu Sport Pack, která se autorizuje a spravuje trochu jiným mechanismem. Pozor ale, pokud máš ten druhý typ služby, zapomeneš heslo a necháš si ho obnovit, tak se to provede tak, že se ti změní účet na ten obecný. Alespoň mně se to před pár lety stalo.

BTW Podle mých zkušeností není třeba acces_token obnovovat. V Nangu TV je tato možnost obecně k dispozici, ale O2TV ji má implementovanou tak, že expirace je nastavena daleko do budoucnosti.
Chci se zeptat, kdyz mi takhle bezi skript nekde na hostingu, jakou potom vidi ip adresu a id zarizeni?
Tak Id zařízení, to si definuješ sám při jeho registraci. IP adresu, kterou uvidí server OTT služby, bude samozřejmě IP adresa serveru (resp. gateway), na kterém poběží script. S výjimkou toho posledního requestu, kterým se spustí stream. U toho to bude IP stroje (resp. gateway), na kterém běží Kodi/Tvheadend.
No ja ze to mam takhle udelany u jinyho poskytovatele a v administraci vidim jen jedno id a jednu ip adresu ze serveru kde mi bezi skript. Registruje to jen prihlaseni. No a na ten skript mi najednou jede az 7 uzivatelu vice jak rok.
No jo, tohle asi O2TV moc neřeší, těm hlavně vadí, když se generují celé playlisty s adresami streamů. Ale je to přesně to, co teď vadí Sledovanitv.cz - více streamů na jedno zařízení. No, asi to časem zařiznou všichni, s tím se asi moc dělat nedá.
: Mně pomohlo, když jsem změnil libku na fetchování z wget na curl.
Ty restrikce většinou startují na základě UA, takže pokud změníš wget na curl, a nemáš explicitně změněné UA, tak to pomoci může, ale obecně je lepší změnit právě toho UA.
Zdravím,

netušíte, kde by mohla být chyba:
 
Kód:
 
[/share/Public/_o2tv] # ./login.sh
1st authentication method will be used!
WARNING: 1st authentication method not succeeded, 2nd authentication method will be used!
2nd authentication method succeded!
ERROR: Bad registration

[/share/Public/_o2tv] # ls
config.json*  config.json.sample*  encode1.sed*  encode2.sed*  login.sh*  playlist.sh*  streamer.sh*

Díky!
Patrně změna na straně O2TV, nejspíše to povede k nutnosti to přepracovat, případně se už asi s příjmem této služby v Tvheadend budeme muset rozloučit.
Stran: 1 2 3 4 5 6 7 8 9 10 11 12