mediathekview / mediathekviewweb

Eine Weboberfläche als Alternative zum Java-Client
https://mediathekviewweb.de/
GNU General Public License v3.0
887 stars 67 forks source link

Auflösung WDR-Videos fehlerhaft #184

Open pidoubleyou opened 3 years ago

pidoubleyou commented 3 years ago

Im Forum wurde gemeldet, dass für eine Sendung von Doctor Who die HD-Url eine viel zu kleine Auflösung besitzt.

Stichprobenhaft habe ich noch bei einem weiteren WDR-Film gefunden.

In den master.m3u8-Dateien der beiden Filme sind die Videos nicht nach den Qualitäten sortiert.

bagbag commented 3 years ago

Da muss ich wohl nochmal an den Code. Weißt du zufällig aus dem Stegreif, woran ich die Qualität erkennen kann? Ist bei einer höheren Qualität die Zahl einfach höher?

andreygursky commented 3 years ago

Leider nicht immer. Und in solchen Fällen kommt es zu Problemen. Eine straightforward Lösung wäre die URLs mit ffprobe (aus ffmpeg) durchzuprobieren. Da bekommt man die Auflösung.

Wie ich bereits hier https://github.com/ytdl-org/youtube-dl/issues/17744#issuecomment-652637746 erwähnt habe, ermittle ich in meinen Bash-Scripts die passende URL für bestimmte Qualität aus JSON-Daten wie folgt. Man braucht nur die "contentId" der Sendung (und eine Zahl zur Qualität-Auswahl, hier z.B. 3 für "HD"):

JSON=`wget -q -O - "https://www.ardmediathek.de/play/media/${contentId}"`
URL=`echo "$JSON" | jq -r '._mediaArray[0]._mediaStreamArray[] | select(._quality == 3) | ._stream'`

ggf. "https:" am Anfang der $URL einfügen.

Liste der magischen Zahlen für die Qualität:

Für die Qualität <= 2 sind manchmal mehrere URLs verfügbar ("Subqualität").

Nehmen wir als Beispiel den von @pidoubleyou genannten Beitrag "Krankenhäuser in der Krise: Offenbart Corona Fehler im System?"

https://www.ardmediathek.de/ard/video/westpol-eins-zu-eins/krankenhaeuser-in-der-krise-offenbart-corona-fehler-im-system/wdr-fernsehen/Y3JpZDovL3dkci5kZS9CZWl0cmFnLTY5Y2RkN2U1LWFlMDgtNDEyNi04NzMyLTRlMzBmODFlMWNiMg/

$ contentId=83313272
$ JSON=`wget -q -O - "https://www.ardmediathek.de/play/media/${contentId}"`
$ URL=`echo "$JSON" | jq -r '._mediaArray[0]._mediaStreamArray[] | select(._quality == 3) | ._stream'`
$ echo $URL
//wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk0/230/2301043/2301043_30290253.mp4

Zur Kontrolle:

$ ffprobe "https:$URL"
[... cut ...]
  Duration: 00:28:58.01, start: 0.000000, bitrate: 3679 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 3581 kb/s, 50 fps, 50 tbr, 50k tbn, 100 tbc (default)
[... cut ...]

1280x720 - HD - stimmt.

P.S. jq - Command-line JSON processor.