10.5.2019, 18:52
Používam android. Skúšal som Windows 10. Tam aspoň už viem čo hľadať. Skôr ten android je podstatný keďže ide o box pri tv
Hodnocení tématu:
Playlist OrangeTV Addon
|
(09.5.2019, 23:02)johnyzh94 Napsal(a): Dakujem za jednoduchsi skript. Zvuk to nevyriesilo, ale podarilo sa mi ho upravit tak, aby to slapalo, t.j. slovenske audio. Treba doplnit do skriptu -map 0:10 -map 0:11
Detail streamu:
Kód:Duration: N/A, start: 1672.026833, bitrate: N/A
Program 0
Metadata:
variant_bitrate : 701000
Stream #0:0: Audio: aac (HE-AACv2), 48000 Hz, stereo, fltp, 63 kb/s
Metadata:
variant_bitrate : 701000
comment : Multiple languages
Stream #0:1: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt470bg), 854x480 [SAR 1280:1281 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
variant_bitrate : 701000
Stream #0:2(sk): Audio: aac (HE-AACv2) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp (default)
Metadata:
variant_bitrate : 701000
comment : Slovak
Program 1
Metadata:
variant_bitrate : 2001000
Stream #0:3: Audio: aac (HE-AACv2), 48000 Hz, stereo, fltp, 63 kb/s
Metadata:
variant_bitrate : 2001000
comment : Multiple languages
Stream #0:4: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt470bg), 1024x576 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
variant_bitrate : 2001000
Stream #0:5(sk): Audio: aac (HE-AACv2) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp (default)
Metadata:
variant_bitrate : 2001000
comment : Slovak
Program 2
Metadata:
variant_bitrate : 3001000
Stream #0:6: Audio: aac (HE-AACv2), 48000 Hz, stereo, fltp, 63 kb/s
Metadata:
variant_bitrate : 3001000
comment : Multiple languages
Stream #0:7: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
variant_bitrate : 3001000
Stream #0:8(sk): Audio: aac (HE-AACv2) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp (default)
Metadata:
variant_bitrate : 3001000
comment : Slovak
Program 3
Metadata:
variant_bitrate : 6001000
Stream #0:9: Audio: aac (HE-AACv2), 48000 Hz, stereo, fltp, 63 kb/s
Metadata:
variant_bitrate : 6001000
comment : Multiple languages
Stream #0:10: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
variant_bitrate : 6001000
Stream #0:11(sk): Audio: aac (HE-AACv2) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp (default)
Metadata:
variant_bitrate : 6001000
comment : Slovak
(12.5.2019, 10:38)otava5 Napsal(a):(09.5.2019, 23:02)johnyzh94 Napsal(a): Dakujem za jednoduchsi skript. Zvuk to nevyriesilo, ale podarilo sa mi ho upravit tak, aby to slapalo, t.j. slovenske audio. Treba doplnit do skriptu -map 0:10 -map 0:11
Detail streamu:
Kód:Duration: N/A, start: 1672.026833, bitrate: N/A
Program 0
Metadata:
variant_bitrate : 701000
Stream #0:0: Audio: aac (HE-AACv2), 48000 Hz, stereo, fltp, 63 kb/s
Metadata:
variant_bitrate : 701000
comment : Multiple languages
Stream #0:1: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt470bg), 854x480 [SAR 1280:1281 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
variant_bitrate : 701000
Stream #0:2(sk): Audio: aac (HE-AACv2) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp (default)
Metadata:
variant_bitrate : 701000
comment : Slovak
Program 1
Metadata:
variant_bitrate : 2001000
Stream #0:3: Audio: aac (HE-AACv2), 48000 Hz, stereo, fltp, 63 kb/s
Metadata:
variant_bitrate : 2001000
comment : Multiple languages
Stream #0:4: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt470bg), 1024x576 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
variant_bitrate : 2001000
Stream #0:5(sk): Audio: aac (HE-AACv2) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp (default)
Metadata:
variant_bitrate : 2001000
comment : Slovak
Program 2
Metadata:
variant_bitrate : 3001000
Stream #0:6: Audio: aac (HE-AACv2), 48000 Hz, stereo, fltp, 63 kb/s
Metadata:
variant_bitrate : 3001000
comment : Multiple languages
Stream #0:7: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
variant_bitrate : 3001000
Stream #0:8(sk): Audio: aac (HE-AACv2) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp (default)
Metadata:
variant_bitrate : 3001000
comment : Slovak
Program 3
Metadata:
variant_bitrate : 6001000
Stream #0:9: Audio: aac (HE-AACv2), 48000 Hz, stereo, fltp, 63 kb/s
Metadata:
variant_bitrate : 6001000
comment : Multiple languages
Stream #0:10: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
variant_bitrate : 6001000
Stream #0:11(sk): Audio: aac (HE-AACv2) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp (default)
Metadata:
variant_bitrate : 6001000
comment : Slovak
Jak získám detailní výpis streamu? Děkuji....
@Client: nene -pc za -stb nepomohlo.... třeba ani -stb / -stb-hd-ott / apod. nemají....
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Wrapper pro O2TV Go
"""
import requests
__author__ = "Štěpán Ort"
__license__ = "MIT"
__version__ = "1.1.8"
__email__ = "stepanort@gmail.com"
_COMMON_HEADERS = {"X-NanguTv-App-Version": "Android#1.2.9",
"X-NanguTv-Device-Name": "Nexus 7",
"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 5.1.1; Nexus 7 Build/LMY47V)",
"Accept-Encoding": "gzip",
"Connection": "Keep-Alive"}
def _to_string(text):
if type(text).__name__ == 'unicode':
output = text.encode('utf-8')
else:
output = str(text)
return output
# Kanál
class LiveChannel:
# JiRo - doplněn parametr kvality
def __init__(self, o2tv, channel_key, name, logo_url, weight, quality):
self._o2tv = o2tv
self.channel_key = channel_key
self.name = name
self.weight = weight
self.logo_url = logo_url
self.quality = quality # doplněn parametr kvality
def url(self):
if not self._o2tv.access_token:
self._o2tv.refresh_access_token()
access_token = self._o2tv.access_token
if not self._o2tv.subscription_code:
self._o2tv.refresh_configuration()
subscription_code = self._o2tv.subscription_code
playlist = None
while access_token:
params = {"serviceType": "LIVE_TV",
"subscriptionCode": subscription_code,
"channelKey": self.channel_key,
"deviceType": "PC",
"videoCodec": "H264",
"streamingProtocol": "HLS"} # JiRo - doplněn parametr kvality
headers = _COMMON_HEADERS
cookies = {"access_token": access_token,
"deviceId": self._o2tv.device_id}
req = requests.get('http://app01.gtm.orange.sk/sws/server/streaming/uris.json',
params=params, headers=headers, cookies=cookies)
json_data = req.json()
access_token = None
if 'statusMessage' in json_data:
status = json_data['statusMessage']
if status == 'bad-credentials':
access_token = self._o2tv.refresh_access_token()
elif status == 'channel.not-found':
raise ChannelIsNotBroadcastingError()
else:
raise Exception(status)
else:
# Pavuucek: Pokus o vynucení HD kvality
playlist = ""
# pro kvalitu STB nebo PC se pokusíme vybrat HD adresu.
# když není k dispozici, tak první v seznamu
for uris in json_data["uris"]:
if self.quality == "STB" or self.quality == "PC":
if uris["resolution"] == "HD" and playlist == "":
playlist = uris["uri"]
else:
# pro ostatní vracíme SD adresu
if uris["resolution"] == "SD" and playlist == "":
playlist = uris["uri"]
# playlist nebyl přiřazený, takže první adresa v seznamu
if playlist == "":
playlist = json_data["uris"][0]["uri"]
return playlist
class ChannelIsNotBroadcastingError(BaseException):
pass
class AuthenticationError(BaseException):
pass
class TooManyDevicesError(BaseException):
pass
# JiRo - doplněna kontrola zaplacené služby
class NoPurchasedServiceError(BaseException):
pass
class O2TVGO:
def __init__(self, device_id, username, password, quality, log_function=None): # JiRo - doplněn parametr kvality
self.username = username
self.password = password
self._live_channels = {}
self.access_token = None
self.subscription_code = None
self.locality = None
self.offer = None
self.device_id = device_id
self.quality = quality # JiRo - doplněn parametr kvality
self.log_function = log_function
def _log(self, message):
if self.log_function:
self.log_function(message)
def get_access_token_password(self):
self._log('Getting Token via password...')
if not self.username or not self.password:
raise AuthenticationError()
headers = _COMMON_HEADERS
headers["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"
data = {'grant_type': 'password',
'client_id': 'orangesk-webportal',
'client_secret': 'e76f5f4d9295eaaa765c24844e11d559',
'isp_id': '5',
'username': self.username,
'password': self.password,
'platform_id': 'b0af5c7d6e17f24259a20cf60e069c22',
'custom': 'orange-webportal-new',
'response_type': 'token'
}
req = requests.post('https://oauth01.gtm.orange.sk/oauth/token',
data=data, headers=headers, verify=False)
j = req.json()
if 'error' in j:
error = j['error']
if error == 'authentication-failed':
self._log('Authentication Error')
return None
else:
raise Exception(error)
self.access_token = j["access_token"]
self.expires_in = j["expires_in"]
self._log('Token OK')
return self.access_token
def refresh_access_token(self):
if not self.access_token:
self.get_access_token_password()
if not self.access_token:
self._log('Authentication Error (failed to get token)')
raise AuthenticationError()
return self.access_token
def refresh_configuration(self):
if not self.access_token:
self.refresh_access_token()
access_token = self.access_token
headers = _COMMON_HEADERS
cookies = {"access_token": access_token, "deviceId": self.device_id}
req = requests.get(
'https://app01.gtm.orange.sk/sws//subscription/settings/subscription-configuration.json', headers=headers,
cookies=cookies)
j = req.json()
if 'errorMessage' in j:
error_message = j['errorMessage']
status_message = j['statusMessage']
# JiRo - změna z 'unauthorized-device' na 'devices-limit-exceeded'
if status_message == 'devices-limit-exceeded':
raise TooManyDevicesError()
else:
raise Exception(error_message)
self.subscription_code = _to_string(j["subscription"])
self.offer = j["billingParams"]["offers"]
self.tariff = j["billingParams"]["tariff"]
self.locality = j["locality"]
def live_channels(self):
if not self.access_token:
self.refresh_access_token()
access_token = self.access_token
if not self.offer:
self.refresh_configuration()
offer = self.offer
if not self.tariff:
self.refresh_configuration()
tariff = self.tariff
if not self.locality:
self.refresh_configuration()
locality = self.locality
quality = self.quality # JiRo - doplněn parametr kvality
if len(self._live_channels) == 0:
headers = _COMMON_HEADERS
cookies = {"access_token": access_token,
"deviceId": self.device_id}
params = {"locality": self.locality,
"tariff": self.tariff ,
"isp": "5",
"imageSize": "LARGE",
"language": "slo",
"deviceType": "PC",
"liveTvStreamingProtocol": "HLS",
"offer": self.offer} # doplněn parametr kvality
req = requests.get('http://app01.gtm.orange.sk/sws/server/tv/channels.json',
params=params, headers=headers, cookies=cookies)
j = req.json()
purchased_channels = j['purchasedChannels']
if len(purchased_channels) == 0: # JiRo - doplněna kontrola zaplacené služby
raise NoPurchasedServiceError() # JiRo - doplněna kontrola zaplacené služby
items = j['channels']
for channel_id, item in items.iteritems():
if channel_id in purchased_channels:
live = item['liveTvPlayable']
if live:
channel_key = _to_string(item['channelKey'])
logo = _to_string(item['logo'])
if not logo.startswith('http://'):
logo = 'http://app01.gtm.orange.sk/' + logo
name = _to_string(item['channelName'])
weight = item['weight']
self._live_channels[channel_key] = LiveChannel(
self, channel_key, name, logo, weight, quality) # doplněn parametr kvality
done = False
offset = 0
return self._live_channels
...
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")
echo $json > ${data}response.json
...