KSV Adobe HDS Downloader
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Mithilfe des in PHP geschriebenen Skriptes AdobeHDS.php von K-S-Vs GitHub-Seite 🇬🇧 können Multimedia-Streams im Format HDS (Adobe HTTP Dynamic Streaming) entweder aufgenommen oder – via Pipe-Operator – an einen Mediaplayer weitergeleitet werden. Damit kann also das CPU-belastende Flash-Webbrowser-Plugin umgangen werden.
Dabei werden zunächst die einzelnen Fragment-Dateien heruntergeladen, in eine flv-Containerdatei kopiert (also ohne sie zu re-encodieren) und dabei nahtlos zusammengefügt. Anschließend werden die heruntergeladenen Fragmente gelöscht.
Von dem Skript werden sowohl On-Demand-Streams als auch Live-Streams verarbeitet.
Eine Alternative für AdobeHDS wäre z.B. das Programm Archiv/Livestreamer.
Im Weitern wird das Skript als "KSV Adobe HDS Downloader" bezeichnet.
Installation¶
Voraussetzungen¶
PHP sowie das cURL-Modul dazu muss auf dem System installiert sein
php5-cli
php5-curl
Befehl zum Installieren der Pakete:
sudo apt-get install php5-cli php5-curl
Oder mit apturl installieren, Link: apt://php5-cli,php5-curl
Ab Ubuntu 16.04 heißen die benötigten Pakete php-cli und php-curl.
Skriptinstallation¶
KSV Adobe HDS Downloader ist nicht in den offiziellen Paketquellen enthalten. Zur Installation wird im Homeverzeichnis eine leere Datei namens AdobeHDS.php (z.B. in einem Ordner AdobeHDS-Skript) erstellt und sich dorthinein von K-S-V's GitHub-Seite 🇬🇧 das Skript AdobeHDS.php 🇬🇧 kopiert.
Hinweis!
Fremdsoftware kann das System gefährden.
Aktualisierung¶
Zum Aktualisieren des Skriptes eignet sich der Befehl [2]
php AdobeHDS.php --update
Benutzung¶
Die Benutzung des Skriptes erfolgt über die Kommandozeile. Die Befehle werden Verzeichnis des Skriptes AdobeHDS.php ausgeführt. Die allgemeine Syntax im Terminal [2] lautet:
php AdobeHDS.php [OPTION(EN)] "MANIFEST-URL" (--outdir PFAD/ZUM/ZIELORDNER --outfile ZIELDATEI)
Anstelle des Platzhalters "MANIFEST-URL"
gibt man die Internet-Adresse (URL) an, von der gelesen werden soll und optional den Dateinamen bzw. Pfad des Orts, in den der KSV Adobe HDS Downloader speichern soll. Es werden nur Adressen unterstützt, die die Zeichenkette manifest.f4m beinhalten. Gibt man statt des Pfads (z.B. ~/Videos/) nur einen Dateinamen oder nichts an, dann wird das Video standardmäßig im Skript-Verzeichnis gespeichert.
Optionen¶
Nachfolgend eine Übersicht der wichtigsten Optionen. Für eine vollständige Übersicht siehe php AdobeHDS.php --help
[2]. Weitere Hilfe findet man in der offiziellen Anleitung zum Skript AdobeHDS.php 🇬🇧.
Optionen | ||
Option | Bedeutung | |
--help | Hilfe anzeigen | |
--debug | die Debug-Ausgabe anzeigen | |
--delete | die heruntergeladenen Fragmente nach dem Zusammengefügen der Containerdatei löschen (lediglich zum Download von On-Demand-Streams wirksam) | |
--play | den heruntergeladenen Stream via Pipe-Operator zu einem Mediaplayer streamen | |
--update | das Skript auf die aktuelle Git-Version aktualisieren | |
--duration SEKUNDEN | das Herunterladen bzw. Streamen nach der anzugebenen Anzahl an Sekunden beenden | |
--manifest "MANIFEST-URL" | über die MANIFEST-URL die Datei zum Herunterladen der Fragmente angeben | |
--outdir PFAD/ZUM/ZIELORDNER | den Pfad zum Zielordner der Zieldatei angeben, optional | |
--outfile ZIELDATEI | den Namen der Zieldatei angeben, optional | |
--quality QUALITÄTSGRAD | den Qualitätsgrad angeben: (low|medium|high ) oder die exakte Bitrate, optional |
Achtung!
Der KSV Adobe HDS Downloader überschreibt ohne Rückfrage bereits bestehende gleichnamige Dateien. Im Zweifel also eine solche vor erneuten Downloads entweder umbenennen, in ein anderes Verzeichnis verschieben oder aber die --outdir
- bzw. --outfile
-Option verwenden, v.a. bei Live-Streams.
Beispiele¶
Das Programm wählt standardmäßig automatisch die höchstmögliche Qualitätsstufe. Man stoppt den KSV Adobe HDS Downloader entweder, indem man das jeweilige Player-Fenster schließt oder im Terminal-Fenster mit der Tastenkombination Strg + C .
Herunterladen¶
On-Demand-Streams¶
Ein Download kann z.B. mithilfe dieser aus der ZDFmediathek 🇩🇪 stammenden, mittels Netzwerkanalyse ermittelten manifest.f4m
-URL eingeleitet werden: [2]
Netzwerkanalyse_(Informatik)
php AdobeHDS.php --manifest "http://zdf_hdflash_none-f.akamaihd.net/z/meta-files/zdf/smil/f4m/300/16/08/160801_h19.smil/manifest.f4m" --delete
Ausgabe etwa:
KSV Adobe HDS Downloader Processing manifest info.... Quality Selection: Available: 3267 2264 1460 607 436 188 Selected : 3267 Fragments Total: 198, First: 1, Start: 1, Parallel: 8 Downloading 198/198 fragments Found 198 fragments Finished
Es befindet sich jetzt die Datei namens 1520d5f6d9679f9941ff2485d81f5824_3256000_c4d0e7ada8b13bad_Seg1-Frag.flv im Skript-Verzeichnis. Die heruntergeladenen einzelnen Fragment-Dateien sind mithilfe des --delete
-Schalters gelöscht worden.
Den --delete
-Schalter kann man auch anders platzieren und erreicht dasselbe Ergebnis:
php AdobeHDS.php --delete --manifest "http://zdf_hdflash_none-f.akamaihd.net/z/meta-files/zdf/smil/f4m/300/16/08/160801_h19.smil/manifest.f4m"
Live-Streams¶
Als Live-Stream kann z.B. dieser von 3sat 🇩🇪 mittels via Netzwerkanalyse ermittelten manifest.f4m
-URL heruntergeladen werden: [2]
php AdobeHDS.php --manifest "http://zdf0910-lh.akamaihd.net/z/dach10_v1@392872/manifest.f4m?g=YHQVDNPFDXNU&hdcore=3.8.0&plugin=aasp-3.8.0.52.27"
Ausgabe:
KSV Adobe HDS Downloader Processing manifest info.... Quality Selection: Available: 1456 1056 710 436 242 189 124 Selected : 1456 Fragments Total: 5914692, First: 5881319, Start: 5914691, Parallel: 8 ^Cdating bootstrap info, Retries: 2
Man stoppt den KSV Adobe HDS Downloader mit der Tastenkombination Strg + C .
Es befindet sich jetzt die Datei namens 80a8936523e9f452b76fb9512548eedb_1456_651d2d2e2d19cc11-p_Seg1-Frag.flv im Ziel-Verzeichnis. Der Download kann durch Verwenden der --outdir
- bzw. --outfile
-Optionen in ein anderes Verzeichnis gelenkt und/oder mit einen eigenen Dateinamen gespeichert werden:
php AdobeHDS.php --manifest "http://zdf0910-lh.akamaihd.net/z/dach10_v1@392872/manifest.f4m?g=YHQVDNPFDXNU&hdcore=3.8.0&plugin=aasp-3.8.0.52.27" --outdir /home/bert/Downloads --outfile Streaming-Datei.flv
Ausgabe in diesem Fall:
KSV Adobe HDS Downloader Processing manifest info.... Quality Selection: Available: 1456 1056 710 436 242 189 124 Selected : 1456 Fragments Total: 5915252, First: 5881319, Start: 5915251, Parallel: 8 ^Cdating bootstrap info, Retries: 1
Nach Abschluss befindet sich eine Datei Streaming-Datei.flv im Verzeichnis /home/bert/Downloads.
Streamen¶
On-Demand-Streams¶
Als On-Demand-Stream kann z.B. dieser von 3sat 🇩🇪 mittels via Netzwerkanalyse ermittelten manifest.f4m
-URL zum mpv gestreamt werden: [2]
php AdobeHDS.php --manifest "http://zdf_hdflash_none-f.akamaihd.net/z/meta-files/3sat/smil/f4m/300/16/09/160914_salz_nano.smil/manifest.f4m?g=ZESMVNGCQAJA&hdcore=3.8.0&plugin=aasp-3.8.0.52.27" --play | mpv --cache=2048 -
Dabei wird die Datei 2048 kBytes (2 MBytes) groß lokal gepuffert.
Beispielausgabe:
Playing: - [file] Reading from stdin... [ffmpeg/demuxer] flv: video stream discovered after head already parsed [ffmpeg/demuxer] flv: audio stream discovered after head already parsed (+) Video --vid=1 (h264) (+) Audio --aid=1 (aac) AO: [pulse] 44100Hz stereo 2ch float VO: [opengl] 1280x720 yuv420p AV: 00:00:26 / 00:02:02 (21%) A-V: -0.002 Dropped: 2 Cache: 10s+33MB Exiting... (Quit)
Live-Streams¶
Als Live-Stream kann z.B. dieser von 3sat 🇩🇪 mittels via Netzwerkanalyse ermittelten manifest.f4m
-URL zum VLC gestreamt werden: [2]
php AdobeHDS.php --manifest "http://zdf0910-lh.akamaihd.net/z/dach10_v1@392872/manifest.f4m?g=YHQVDNPFDXNU&hdcore=3.8.0&plugin=aasp-3.8.0.52.27" --play | vlc --file-caching=10000 -
Dabei wird die Datei für 10 Sekunden (10.000 Millisekunden) lokal gepuffert.
Ausgabe:
VLC media player 2.1.6 Rincewind (revision 2.1.6-0-gea01d28) [0x1e37118] main libvlc: VLC wird mit dem Standard-Interface ausgeführt. Benutzen Sie 'cvlc', um VLC ohne Interface zu verwenden. [flv @ 0x7f22d4c1e200] max_analyze_duration reached [flv @ 0x7f22d4c1e200] Estimating duration from bitrate, this may be inaccurate Fontconfig warning: FcPattern object size does not accept value "0" Fontconfig warning: FcPattern object size does not accept value "0" Fontconfig warning: FcPattern object size does not accept value "0" Fontconfig warning: FcPattern object size does not accept value "0" [0x7f22b4001248] main vout display error: Failed to resize display [0x7f22b4001248] main vout display error: Failed to resize display
Die angezeigten Fehlermeldungen des VLC kann man ignorieren.
Aufnahme des Stream mit dem MPlayer:
php AdobeHDS.php --manifest "http://zdf0910-lh.akamaihd.net/z/dach10_v1@392872/manifest.f4m?g=YHQVDNPFDXNU&hdcore=3.8.0&plugin=aasp-3.8.0.52.27" --play | mplayer -cache 2048 -
Dabei wird die Datei 2048 kBytes (2 MBytes) groß lokal gepuffert.
Ausgabe:
MPlayer2 2.0-701-gd4c5b7f-2ubuntu2 (C) 2000-2012 MPlayer Team Cannot open file '/home/oom/.mplayer/input.conf': No such file or directory Failed to open /home/oom/.mplayer/input.conf. Cannot open file '/etc/mplayer/input.conf': No such file or directory Failed to open /etc/mplayer/input.conf. Playing -. Reading from stdin... Cache size set to 2048 KiB Cache fill: 0.00% (0 bytes) Detected file format: FLV (Flash Video) (libavformat) [flv @ 0x7fc96d5d5600]max_analyze_duration reached [flv @ 0x7fc96d5d5600]Estimating duration from bitrate, this may be inaccurate [lavf] stream 0: video (h264), -vid 0 [lavf] stream 1: audio (aac), -aid 0 Load subtitles in . Cache not responding! Selected video codec: H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 [libavcodec] Selected audio codec: AAC (Advanced Audio Coding) [libavcodec] AUDIO: 48000 Hz, 2 ch, floatle, 0.0 kbit/0.00% (ratio: 0->384000) AO: [pulse] 48000Hz 2ch floatle (4 bytes per sample) Starting playback... VIDEO: 852x480 25.000 fps 0.0 kbps ( 0.0 kB/s) VO: [vdpau] 852x480 => 852x480 Planar YV12 [vdpau] Got display refresh rate 75.025 Hz. [vdpau] If that value looks wrong give the -vo vdpau:fps=X suboption manually. A: 5.8 V: 5.8 A-V: 0.000 ct: 0.000 0/ 0 2% 4% 1.0% 0 0 50% Exiting... (Quit)
Beispiel für mpv:
php AdobeHDS.php --manifest "http://zdf0910-lh.akamaihd.net/z/dach10_v1@392872/manifest.f4m?g=YHQVDNPFDXNU&hdcore=3.8.0&plugin=aasp-3.8.0.52.27" --play | mpv --cache=2048 -
Dabei wird die Datei ebenfalls 2048 kBytes (2 MBytes) groß lokal gepuffert.
Ausgabe:
Playing: - [file] Reading from stdin... [ffmpeg/demuxer] flv: video stream discovered after head already parsed [ffmpeg/demuxer] flv: audio stream discovered after head already parsed [ffmpeg/audio] aac: element type mismatch 1 != 0 (+) Video --vid=1 (h264) (+) Audio --aid=1 (aac) [ffmpeg/audio] aac: element type mismatch 1 != 0 AO: [pulse] 48000Hz stereo 2ch float [ffmpeg/audio] aac: element type mismatch 1 != 0 [ffmpeg/audio] aac: element type mismatch 1 != 0 VO: [opengl] 852x480 => 853x480 yuv420p AV: 00:00:26 A-V: 0.000 Cache: 8s+31KB Exiting... (Quit)
Um eine Anzeige der verfügbaren Qualitätsstufe zu erhalten, verwendet man die --debug
-Option:
Als Live-Stream kann z.B. dieser von ARTE Live 🇩🇪 mittels via Netzwerkanalyse ermittelten manifest.f4m
-URL zum mpv gestreamt werden: [2]
oom@oom-ms-7204:~/Programme/AdobeHDS-Skript$ php AdobeHDS.php --manifest "http://artelive-lh.akamaihd.net/z/artelive_de@393591/manifest.f4m?hdcore" --debug --play --duration 1 | mpv --cache=2048 -
Dabei wird die Datei ebenfalls 2048 kBytes (2 MBytes) groß lokal gepuffert sowie durch die --duration
-Option nach ca einer Sekunde automatisch beendet.
Im Folgenden kommt die gekürzte Ausgabe von KSV Adobe HDS Downloader und mpv gemischt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | Manifest Entries: Bitrate URL 2960 1_5d3c9e592ebde685-p_ 1628 2_5d3c9e592ebde685-p_ 928 3_5d3c9e592ebde685-p_ 578 4_5d3c9e592ebde685-p_ 296 5_5d3c9e592ebde685-p_ Updating bootstrap info, Available fragments: 0 Playing: - Segment Tables: Table 1: Number Fragments 1 9951 Fragment Tables: Table 1: Number Timestamp Duration Discontinuity 3068873 18413232000 6000 3069014 18414078000 5231 3069015 18414083231 0 3 3069020 18414114000 6000 3078823 18472932000 6000 Update complete, Available fragments: 3078823 Base Fragment Url: http://artelive-lh.akamaihd.net/z/artelive_de@393591/1_5d3c9e592ebde685-p_ Downloading Fragments: Adding fragment 3078822 to download queue [file] Reading from stdin... Fragment 3d19fff00de90bc39ee514277d777087_1_5d3c9e592ebde685-p__Seg1-Frag3078822 successfully downloaded Writing fragment 3078822 to flv file Fragment 3078822: Type CurrentTS PreviousTS Size Position Writing AVC sequence header VIDEO 0 -1 56 Writing AAC sequence header AUDIO 0 -1 4 VIDEO 0 0 79512 AUDIO 20 0 504 VIDEO 40 0 8192 AUDIO 41 20 537 AUDIO 63 41 470 VIDEO 80 40 13722 AUDIO 84 63 512 AUDIO 105 84 489 VIDEO 120 80 14824 AUDIO 127 105 352 AUDIO 148 127 361 VIDEO 160 120 11940 AUDIO 169 148 370 AUDIO 191 169 382 VIDEO 200 160 11539 AUDIO 212 191 386 AUDIO 233 212 388 VIDEO 240 200 14558 AUDIO 255 233 430 AUDIO 276 255 476 VIDEO 280 240 15564 AUDIO 297 276 495 AUDIO 319 297 496 VIDEO 320 280 11237 AUDIO 340 319 418 VIDEO 360 320 12838 AUDIO 361 340 355 AUDIO 383 361 401 VIDEO 400 360 14099 AUDIO 404 383 363 AUDIO 425 404 371 VIDEO 440 400 11233 AUDIO 447 425 379 ... ... ... ... AUDIO 5588 5567 428 VIDEO 5600 5560 14515 AUDIO 5609 5588 410 AUDIO 5631 5609 396 VIDEO 5640 5600 13810 AUDIO 5652 5631 398 AUDIO 5673 5652 404 VIDEO 5680 5640 13012 AUDIO 5695 5673 404 AUDIO 5716 5695 405 VIDEO 5720 5680 12555 AUDIO 5737 5716 418 AUDIO 5759 5737 418 VIDEO 5760 5720 10691 AUDIO 5780 5759 422 VIDEO 5800 5760 2667 AUDIO 5801 5780 422 AUDIO 5823 5801 421 VIDEO 5840 5800 3921 AUDIO 5844 5823 422 AUDIO 5865 5844 422 VIDEO 5880 5840 4694 AUDIO 5887 5865 421 AUDIO 5908 5887 471 VIDEO 5920 5880 5868 AUDIO 5929 5908 406 AUDIO 5951 5929 415 VIDEO 5960 5920 7952 AUDIO 5972 5951 415 AUDIO 5993 5972 437 All fragments downloaded successfully [ffmpeg/demuxer] flv: video stream discovered after head already parsed [ffmpeg/demuxer] flv: audio stream discovered after head already parsed (+) Video --vid=1 (h264) (+) Audio --aid=1 (aac) AO: [pulse] 48000Hz stereo 2ch float VO: [opengl] 1280x720 yuv420p AV: 00:00:05 (99%) A-V: 0.000 Cache: 0s+0KB Exiting... (End of file) |
Was man hier sieht: In Zeile 30 die "Base Fragment Url", für die in Zeile 4 die Bitrate steht.
Die im vorigen Beispiel ermittelten möglichen Qualitätsstufe möchte man jetzt vllt. gezielt auswählen. Dies funktioniert, indem man mit der --quality
-Option arbeitet: [2]
php AdobeHDS.php --manifest "http://artelive-lh.akamaihd.net/z/artelive_de@393591/manifest.f4m?hdcore" --debug --play --duration 1 --quality 578 | mpv --cache=2048 -
Im Folgenden kommt wieder die gekürzte Ausgabe von KSV Adobe HDS Downloader und mpv gemischt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | Playing: - [file] Reading from stdin... Manifest Entries: Bitrate URL 2960 1_1ff3745b7f18c904-p_ 1628 2_1ff3745b7f18c904-p_ 928 3_1ff3745b7f18c904-p_ 578 4_1ff3745b7f18c904-p_ 296 5_1ff3745b7f18c904-p_ Updating bootstrap info, Available fragments: 0 Segment Tables: Table 1: Number Fragments 1 10338 Fragment Tables: Table 1: Number Timestamp Duration Discontinuity 3068879 18413268000 6000 3069014 18414078000 5149 3069015 18414083149 0 3 3069020 18414114000 6000 3079216 18475290000 6000 Update complete, Available fragments: 3079216 Base Fragment Url: http://artelive-lh.akamaihd.net/z/artelive_de@393591/4_1ff3745b7f18c904-p_ Downloading Fragments: Adding fragment 3079215 to download queue Fragment 3d19fff00de90bc39ee514277d777087_4_1ff3745b7f18c904-p__Seg1-Frag3079215 successfully downloaded Writing fragment 3079215 to flv file Fragment 3079215: Type CurrentTS PreviousTS Size Position Writing AVC sequence header VIDEO 0 -1 56 Writing AAC sequence header AUDIO 0 -1 4 VIDEO 0 0 4376 AUDIO 15 0 327 AUDIO 36 15 399 VIDEO 40 0 1906 AUDIO 57 36 385 AUDIO 79 57 413 VIDEO 80 40 2122 AUDIO 100 79 405 VIDEO 120 80 2036 AUDIO 121 100 318 AUDIO 143 121 324 VIDEO 160 120 2148 AUDIO 164 143 298 ... ... ... ... AUDIO 5796 5775 363 VIDEO 5800 5760 1189 AUDIO 5817 5796 304 AUDIO 5839 5817 317 VIDEO 5840 5800 501 AUDIO 5860 5839 367 VIDEO 5880 5840 719 AUDIO 5881 5860 368 AUDIO 5903 5881 428 VIDEO 5920 5880 699 AUDIO 5924 5903 294 AUDIO 5945 5924 311 VIDEO 5960 5920 774 AUDIO 5967 5945 311 AUDIO 5988 5967 318 All fragments downloaded successfully [ffmpeg/demuxer] flv: video stream discovered after head already parsed [ffmpeg/demuxer] flv: audio stream discovered after head already parsed (+) Video --vid=1 (h264) (+) Audio --aid=1 (aac) AO: [pulse] 48000Hz stereo 2ch float VO: [opengl] 426x240 yuv420p AV: 00:00:05 (99%) A-V: 0.000 Cache: 0s+0KB Exiting... (End of file) |
Was man hier sieht: In Zeile 31 die "Base Fragment Url", für die in Zeile 9 die Bitrate steht. Der KSV Adobe HDS Downloader wählt die gewünschte Qualitätsstufe 578 kBytes pro Sekunde.
Links¶
Intern¶
Streaming Grundlegendes zum Thema; Audio- und Videostreams mit Browser-Plugins oder eigenständigen Programmen abspielen
Streams speichern Übersichtsartikel
Internetradio Übersichtsartikel
Internet-TV Übersichtsartikel
Extern¶
Projektseite 🇬🇧
Anleitung 🇬🇧 im VideoHelp-Forum 🇬🇧 – Quelle für diesen Artikel
How to download HTTP Dynamic Streaming video using Livestreamer and UnPlug 🇬🇧 – Eine altermative Anleitung