Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

M3U8 Datein direkt auswerten #194

Closed
Nicklas2751 opened this issue Jan 2, 2017 · 11 comments
Closed

M3U8 Datein direkt auswerten #194

Nicklas2751 opened this issue Jan 2, 2017 · 11 comments
Assignees
Labels

Comments

@Nicklas2751
Copy link
Member

Prüfen ob M3U8 Datein direkt ausgewertet + entsprechende Videos gespeichert werden können. Wenn ja, die entsprechende Funktionalität einbauen.

https://en.wikipedia.org/wiki/M3U

@Nicklas2751 Nicklas2751 self-assigned this Jan 2, 2017
@claell
Copy link

claell commented Jan 3, 2017

Sehr gute Idee, das würde ja so wie ich das verstehe bedeuten, dass man einen ganz normalen Link zur Video Datei erhält, oder?

@xaverW
Copy link
Contributor

xaverW commented Jan 3, 2017

habe mir das mal angesehen, im Prinzip lassen sich die einzelnen Teile laden und zusammensetzen, der VLC kanns abspielen zeigt aber keine Länge an, da fehlen wahrscheinlich noch Metadaten, ..

hab mir ein Script zum Testen gemacht:

wget http://adaptiv.wdr.de/i/medp/ww/fsk0/124/1241742/,1241742_14476887,1241742_14476886,1241742_14477036,1241742_14476888,1241742_14476889,.mp4.csmil/index_0_av.m3u8 -O wdr.m3u8

grep -E 'http://adaptiv.wdr.*ts' wdr.m3u8 | sed 's/?null=0/ /g' > ulrs

wget -i ulrs
cat segment* > film.mp4

@styroll
Copy link

styroll commented Jan 4, 2017

im Prinzip lassen sich die einzelnen Teile laden und zusammensetzen

Ja, aber die TS-Segmente verwenden ein Audio-Bitstreamformat, welches nicht konform mit dem MP4-Container ist (TS-Container wäre zwar möglich, aber eine schlechte Idee). Deshalb nimmt ja FFmpeg gleich auch die Umwandlung vor.

VLC kann abspielen

Ja und die Multimedia-Frameworks von Windows und macOS nicht…

@alex1702
Copy link
Member

alex1702 commented Jan 5, 2017

Ah hmm

@andistern
Copy link

wie wärs mit
awk -F / '{print "file " $NF}' ulrs >files ; ffmpeg -f concat -i files -c copy film.mp4
statt
cat segment* > film.mp4
siehe z.B. Stackoverflow - Concatenate two mp4 files using ffmpeg
Das funktioniert auch bestens unter El Capitan mit

ffmpeg -version
ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-chromaprint --enable-ffplay --enable-frei0r --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libebur128 --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopus --enable-librtmp --enable-librubberband --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtesseract --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg --enable-libzmq --enable-opencl --enable-openssl --enable-lzma --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/2.1.2/include/openjpeg-2.1 --enable-nonfree --enable-vda
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100

Unendlich dankbar wäre ich dennoch für einen Hinweis der erlaubten Keywords im Textinputfile (hier files), dann gings nämlich ohne lokales Herunterladen der ts Dateien, also z.B. (wenn das keyword "stream" wäre):
awk '{print "stream " $0}' ulrs >files ; ffmpeg -f concat -i files -c copy film.mp4

@derreisende77
Copy link
Contributor

MPEG TS sind MPEG2 Transport Streams und keine H.264 MP4 streams. Hast Du mal versucht die erzeugte Datei mit QuickTime Player anzusehen? Sollte so nicht gehen.

@andistern
Copy link

andistern commented Jan 28, 2017

bin immer davon ausgegangen, dass ffmpeg aufgrund der Dateinamenserweiterung konvertiert. Hat zumindest immer funktioniert, das Ergebnis hat sich auch stets wiedergeben lassen, tadellos mit VLC, mit Quicktime gabs Audioprobleme, anfangs nur ca 2 Sekunden Tonverzögerung, dann auch Aussetzer...

nichtsdestotrotz ergibt der Versuch mit direktem Herunterladen für jedes segment einen Protocol not on whitelist 'file,crypto'! Fehler...

@styroll
Copy link

styroll commented Jan 28, 2017

bin immer davon ausgegangen, dass ffmpeg aufgrund der Dateinamenserweiterung konvertiert.

Das ist auch so, aber eine Konvertierung kann hier wohl kein Ziel sein, denn die Videospur in einem MPEG-2-Transportstream bzw. bei HLS ist (heutzutage) H.264-encodiert, die Audiospur ist AAC-encodiert, also im Quasi-Standard-Format. Es ist weiterhin sinnvoll, die Video- und Audiospur der heruntergeladenen Segmente in einen MP4-Container zu packen (ohne zu recodieren).

@andistern
Copy link

Hi, Konvertierung ist auch kein Ziel, hab ja "nur" mp4 als Dateinamenserweiterung angegeben.
nichtsdestotrotz ergibt der Versuch mit direktem Herunterladen für jedes segment einen Protocol not on whitelist 'file,crypto'! Fehler...

allerdings, wenn die m3u8 Datei direkt über die url gelesen wird, setzt offenbar der Server auch die protocol whitelist:
Setting default whitelist 'http,https,tls,rtp,tcp,udp,crypto,httpproxy'

Und noch was:
ich kenn mich zwar nicht wirklich mit den codecs aus, nur sehe ich nach dem Aufruf von:
ffmpeg -i http://.../index_5_av.m3u8 test5.m3u8.mp4
nichts von einer Konvertierung, nur diese vier für mich rätselhaften Fehler ( die Fehlermeldungen schön in rot auf schwarzem Hintergrung hervorgehoben), nicht wissend, wofür SPS steht (gibts vielleicht irgendwo ein Glossar?).

Ich bedanke mich für die Aufmerksamkeit!

...
[NULL @ 0x7ff193025800] non-existing SPS 0 referenced in buffering period
[NULL @ 0x7ff193025800] SPS unavailable in decode_picture_timing
[h264 @ 0x7ff193027000] non-existing SPS 0 referenced in buffering period
[h264 @ 0x7ff193027000] SPS unavailable in decode_picture_timing
Input #0, hls,applehttp, from 'http://srfvodhd-vh.akamaihd.net/i/vod/tatort/2017/01/tatort_20170122_200514_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index_5_av.m3u8':
  Duration: 01:28:37.23, start: 0.100667, bitrate: 0 kb/s
  Program 0 
    Metadata:
      variant_bitrate : 0
    Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv), 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Metadata:
      variant_bitrate : 0
    Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp
    Metadata:
      variant_bitrate : 0
File 'test5.m3u8.mp4' already exists. Overwrite ? [y/N] y
[libx264 @ 0x7ff19280b600] using SAR=1/1
[libx264 @ 0x7ff19280b600] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x7ff19280b600] profile High, level 3.1
[libx264 @ 0x7ff19280b600] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'test5.m3u8.mp4':
  Metadata:
    encoder         : Lavf57.56.100
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 25 fps, 12800 tbn, 25 tbc
    Metadata:
      variant_bitrate : 0
      encoder         : Lavc57.64.101 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s
    Metadata:
      variant_bitrate : 0
      encoder         : Lavc57.64.101 aac
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))

@styroll
Copy link

styroll commented Jan 28, 2017

Hi, Konvertierung ist auch kein Ziel

Du hast von Konvertierung gesprochen (!?), und gemäss deinem Konsolen-Output scheinst du das auch zu machen bzw. zu starten.
Mir ist nicht klar, was du genau willst, denn schon jetzt werden von MV (via das Hilfsprogramm FFmpeg) die Segmente heruntergeladen und zusammengesetzt und standardkonform in einen MP4-Container gepackt.

Ziel des OP war es, ohne FFmpeg zu arbeiten.

SPS steht für Sequence Parameter Set und dient dazu den Decoder zu konfigurieren (z.B. in Bezug auf Auflösung und Frame Rate).

@andistern
Copy link

andistern commented Jan 28, 2017

O je, bin ich wieder mal falsch abgebogen, bitte um Entschuldigung! Kommunikation funktioniert nur mit hinreichend kongruenten Kontexten. Mein Kontext war:

  1. ich kann seit dem MV Upgrade auf 13.0.1 keine m3u8 von srf mehr downloaden
  2. Umwandlung von aktuellen Videos in welche, die mit iMovie auf einem alten (OSX 10.6 ) geschnitten werden können - klingt jetzt sehr sonderbar, die Geschichte/Erklärung würde den Rahmen sprengen

aus (2) kam

bin immer davon ausgegangen, dass ffmpeg aufgrund der Dateinamenserweiterung konvertiert.

da hab ich

M3U8 Datein direkt auswerten

nicht genau genug gelesen, mein Fehler, passiert mir immer wieder, da muss ich nach wie vor dran arbeiten.

(1) hab ich mal versucht, vom falschen Ende aus zu lösen, nämlich, nach dem "Erfolg" bei (2) weiter Richtung ffmpeg zu forschen. War eindeutig das falsche Ende, einfaches Nachlesen im Logfile zeigt nämlich:

java.io.IOException: Cannot run program "/Applications/Utilities/MediathekView_11_2015/bin/ffmpeg": error=2, No such file or directory

Aufräumen ist gut, Kontrolle ist besser ( Владимир Ильич Ульянов modifiziert 💦), auf die Lösung von (1) hätt ich einfacher kommen können. Das bringt mich zum Schluss:

Ein riesengroßes Danke für den Sequence Parameter Set und Deine Erklärung !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants