Skip to content

Commit

Permalink
Added: View/Vijf/Zes SSAI stream support
Browse files Browse the repository at this point in the history
Support free (but ad-supported) streams from GoPlay, if no regular m3u8
stream manifest is available.

If SSAI data is also not found, the error is handled and an incomplete
item is returned instead.

Fixes #1691
  • Loading branch information
haffmans committed Mar 19, 2023
1 parent ababbe2 commit b41af9f
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 6 deletions.
9 changes: 3 additions & 6 deletions changelog.txt
@@ -1,6 +1,6 @@
[B]Retrospect v5.5.14 - Changelog - 2023-03-03[/B]
[B]Retrospect v5.5.15 - Changelog - 20xx-xx-xx[/B]

This updates fixes an issue with NPO and adds Extra's and Fragments (Clips) for NPO (Thanks to @gvtulder). It also adds the Tweede Kamer Debat TV and fixes an issue with Radio 538 playback.
t.b.d.

[B]Framework related[/B]
_None_
Expand All @@ -9,7 +9,4 @@ _None_
_None_

[B]Channel related[/B]
* Fixed: NPO video playback broken (Fixes #1679).
* Added: Tweede Kamer Debat Direct (Fixes #1394).
* Added: List NPO Start Extra's and Fragmenten (Fixes #1649).
* Fixed: Some Radio 538 Video streams did not play (Fixes #1685)
* Fixed: Videos from Vier/Vijf/Zes (GoPlay.be) fail to play (Fixes #1691).
34 changes: 34 additions & 0 deletions channels/channel.be/vier/chn_vier.py
Expand Up @@ -12,6 +12,7 @@
from resources.lib.urihandler import UriHandler
from resources.lib.parserdata import ParserData
from resources.lib.streams.m3u8 import M3u8
from resources.lib.streams.mpd import Mpd
from resources.lib.helpers.datehelper import DateHelper
from resources.lib.addonsettings import AddonSettings
from resources.lib.xbmcwrapper import XbmcWrapper
Expand Down Expand Up @@ -602,6 +603,19 @@ def __update_video(self, item, data):
json_data = JsonHelper(data)
m3u8_url = json_data.get_value("manifestUrls", "hls")

# If there's no m3u8 URL, try to use a SSAI stream instead
if m3u8_url is None and json_data.get_value("ssai") is not None:
return self.__get_ssai_streams(item, json_data)

elif m3u8_url is None and json_data.get_value('message') is not None:
error_message = json_data.get_value('message')
if error_message == "Locked":
# set it for the error statistics
item.isGeoLocked = True
Logger.info("No stream manifest found: {}".format(error_message))
item.complete = False
return item

# Geo Locked?
if "/geo/" in m3u8_url.lower():
# set it for the error statistics
Expand All @@ -610,4 +624,24 @@ def __update_video(self, item, data):
item.complete = M3u8.update_part_with_m3u8_streams(
item, m3u8_url, channel=self, encrypted=False)

def __get_ssai_streams(self, item, json_data):
Logger.info("No stream data found, trying SSAI data")
content_source_id = json_data.get_value("ssai", "contentSourceID")
video_id = json_data.get_value("ssai", "videoID")

streams_url = 'https://dai.google.com/ondemand/dash/content/{}/vid/{}/streams'.format(
content_source_id, video_id)
streams_input_data = {
"api-key": "null"
}
streams_headers = {
"content-type": "application/json"
}
data = UriHandler.open(streams_url, data=streams_input_data, additional_headers=streams_headers)
json_data = JsonHelper(data)
mpd_url = json_data.get_value("stream_manifest")

stream = item.add_stream(mpd_url, 0)
Mpd.set_input_stream_addon_input(stream)
item.complete = True
return item

0 comments on commit b41af9f

Please sign in to comment.