Closed apprenticius closed 1 year ago
Danke für den Report. Ich hab es auch schon festgestellt. Ich werde dem Grund bei Gelegenheit nachgehen.
I extracted the URL of RTLch and tried to play it with mpv / youtube-dl and got this:
$ mpv "http://zba6-0-dashenc-live.zahs.tv/HD_rtl_schweiz/m_drm_widevine.mpd?z32=MF2WI2LPL5RW6ZDFMNZT2YLBMMTGG43JMQ6TCNZSHBATEMRWIQ3DCNZUIQ2TCLJTGFCUGNSGIM4EIOCCIZCDCNRTEZWWC6DSMF2GKPJVGAYDAJTNNFXHEYLUMU6TEMJQEZYHEZLGMVZHEZLEL5WGC3THOVQWOZJ5MRSSM43JM46TCNS7GI3DOZDDGIZDGNZYMI3DMNBUHE4TQNDGMMYDGMBWMRRWIOBZMM3SM5LTMVZF62LEHV2GK3DFMJXXSOR2G44TEMZYHATHMPJQ"
[ytdl_hook] ERROR: [generic] m_drm_widevine: This video is DRM protected
[ytdl_hook] youtube-dl failed: unexpected error occurred
Failed to recognize file format.
Seems teleboy is starting to add DRM to its streams. :frowning_face:
Interesting, I can actually still access fragments of the RTLch stream by replacing elements in the URL of the manifest file:
zh2-17-dashenc-live.zahs.tv -> zh2-3-dash-live.zahs.tv
m_drm_widevine.mpd -> m.mpd
This fails:
$ mpv "http://zh2-17-dashenc-live.zahs.tv/HD_rtl_schweiz/m_drm_widevine.mpd?z32=XXXXXXXXXXXXXXX"
[ytdl_hook] ERROR: [generic] m_drm_widevine: This video is DRM protected
[ytdl_hook] youtube-dl failed: unexpected error occurred
Failed to recognize file format.
Exiting... (Errors when loading file)
Now, with replacements applied:
mpv "http://zh2-3-dash-live.zahs.tv/HD_rtl_schweiz/m.mpd?z32=XXXXXXXXXXXXXXXXX"
Resuming playback. This behavior can be disabled with --no-resume-playback.
(+) Video --vid=1 (*) (h264 1280x720)
(+) Audio --aid=1 --alang=eng (*) (aac 2ch 48000Hz)
Using hardware decoding (vaapi).
AO: [jack] 44100Hz stereo 2ch floatp
VO: [gpu] 1280x720 vaapi[nv12]
AV: 463545:43:40 / 463545:43:40 (100%) A-V: 0.000 Cache: 0.0s
Seems like some servers support only DRM streams while others non-DRM streams
Ich habe den Grund gefunden und für meine Zwecke behoben. Ich habe gerade keine Zeit, aber kann es dir später mitteilen.
Beste Grüsse, Apprenticius.
18.11.2022 09:50:39 Roman Haefeli @.***>:
Danke für den Report. Ich hab es auch schon festgestellt. Ich werde dem Grund bei Gelegenheit nachgehen.
— Reply to this email directly, view it on GitHub[https://github.com/reduzent/watchteleboy/issues/34#issuecomment-1319711060], or unsubscribe[https://github.com/notifications/unsubscribe-auth/AHOVVZBDO2HOGWT6656PESLWI47NVANCNFSM6AAAAAARCO4KO4]. You are receiving this because you authored the thread.[Tracking image][https://github.com/notifications/beacon/AHOVVZHKQY6OHOTOEBJBWVTWI47NVA5CNFSM6AAAAAARCO4KO6WGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTSOVEYVI.gif]
du musst die Funktion get_stream_url der Klasse "classes.py" im Ordner "wt" ändern. Sie sollte zusätzlich bei DRM die "license_url" zurückgeben. Betroffen sind somit die letzten 4 Zeilen der Funktion. Der Punkt ist, dass diese Sender DRM verschlüsselt sind und dem Player die "license_url" und das DRM-Schema WIDEVINE mitgegeben werden muss. Da ich nicht den Player verwende in deinem Projekt, kann ich dir nicht genau sagen, wie du diese "license_url" deinem Player übergeben musst.
def get_stream_url(self, channel=None, station_id=None):
"""
get MPEG-DASH manifest URL for given channel or station id
"""
if not self.channel_ids:
self.__retrieve_channel_ids()
if station_id is None:
for chan_name in self.channel_ids.keys():
if chan_name.lower() == channel.lower():
channel = chan_name
break
else:
print(f'No such channel: {channel}')
return None
station_id = self.channel_ids[channel]
api_url = f'https://tv.api.teleboy.ch/users/{self.user_id}/stream/live/{station_id}'
r_api = self.api.get(api_url)
try:
assert r_api.status_code == 200
except AssertionError:
print('failed to retrieve channel data')
raise WatchTeleboyError
channel_data = json.loads(r_api.content.decode())
if 'drm' in channel_data['data']['stream']:
return (channel, channel_data['data']['stream']['url'], channel_data['data']['stream']['drm'])
else:
return (channel, channel_data['data']['stream']['url'], None)
Beste Grüsse, Apprenticius.
Vielen herzlichen Dank für den Hinweis. Ich schau mir an, ob ich das so hinkriege. Um bis zu drei Stunden zeitversetzt schauen zu können, habe ich einen relativen kruden Stream-Handler selber gebaut, der die einzelnen Video- und Audio-Segmente runterlädt. Mal schauen, ob ich das damit und der DRM-Lizenz hinkriege.
Als sehr krude, aber offenbar funktionierende Variante, detektiert das Skript jetzt, ob es sich um eine DRM-geschütze Manifest-URL handelt und schreibt dann einfach die URL um. Offenbar sind alle Streams (habe nicht alle getestet) immer noch ohne DRM verfügbar.
Siehe 31c5ce4e70ab2082819feb56db8f24884e885d94
Hallo Roman Ich habe dein Python Projekt etwas angepasst, so dass ich über die Fernbedienung des Fernsehers via CEC den Sender wechseln kann. Unschön dabei ist, dass der MPV Player jedes mal schliesst und eine neue Instanz öffnet. Dabei erscheint somit jedesmal das OS des Raspberry Pi. Ansonstenist es die perfekte TV-Box. Ist es irgendwie möglich die Pipe (fifo) zu aktualisieren, ohne MPV zu schliessen?
Besten Dank für deine Antwort, Elmar.
20.11.2022 22:02:37 Roman Haefeli @.***>:
Closed #34[https://github.com/reduzent/watchteleboy/issues/34] as completed.
— Reply to this email directly, view it on GitHub[https://github.com/reduzent/watchteleboy/issues/34#event-7852193599], or unsubscribe[https://github.com/notifications/unsubscribe-auth/AHOVVZBHCCCKQOWZ2NLJA2DWJKGWPANCNFSM6AAAAAARCO4KO4]. You are receiving this because you authored the thread. [Verfolgungsbild][https://github.com/notifications/beacon/AHOVVZBOFRBAV2VEZA54IVDWJKGWPA5CNFSM6AAAAAARCO4KO6WGG33NNVSW45C7OR4XAZNWJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XKUY3PNVWWK3TUL5UWJTYAAAAADVAG647Q.gif]
Die Streamer der Sender Gruppe von RTL (RTL, RTL2, SUPER RTL, VOX) kann nicht abgespielt werden. Gibt es einen Grund?
Vielen Dank für die tolle Arbeit, Apprenticius.