Archive for the ‘VLC’ Category

Wie kann man m3u8 Dateien in Powershell herunterladen

30 August 2018

Leider ist m3u8 kein eindeutig definiertes Format. Aber es wird oft für Streaming von MP4 und ähnlichen verwendet.

Hier ein einfaches Beispiel wie man die Teile aus einer .m3u8-Datei mittels Powershell herunterladen kann:

$m3u8 = "http://irgendwoher.net/Video.m3u8"
$m3u8Local = ".\video.m3u8"
Invoke-WebRequest -UseBasicParsing –Uri $m3u8 –OutFile $m3u8Local

Die m3u8-Datei besteht dann aus irgendwelchen Textzeilen:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:6.006,
afis4sqr_00103518-16×9-720p-720p-3000k_00001.ts
#EXTINF:6.006,
afis4sqr_00103518-16×9-720p-720p-3000k_00002.ts
#EXTINF:6.006,
afis4sqr_00103518-16×9-720p-720p-3000k_00003.ts
#EXT-X-ENDLIST

Die TS-Dateien sind Sequenzen aus der MP4-Datei. Man erhält alle TS-Eintragungen z. B. so:

$ts = Get-Content $m3u8Local | where {$_ -notmatch "#.*"}

Damit werden alle Kommentarzeilen, die mit # beginnen entfernt.

Nun muss man aus $m3u8 Url den Stammpfad ermitteln.

$url = $m3u8.Substring(0,$m3u8.LastIndexOf(‚/‘))

Nun kann man mit dem Stammpfad von $m3u8 und den TS-Dateinamen die einzelnen Teile herunterladen:

$ts | % {Invoke-Webrequest -UseBasicParsing -Uri "$url/$_" -OutFile $_ -Verbose}

Um am Ende aus den einzelnen .TS-Dateien eine komplette .MP4-Datei zu bekommen kann man z. B. FFMPEG benutzen: https://www.ffmpeg.org/download.html. So bekommt man mit diesem Aufruf eine MP4-Datei:

.\ffmpeg.exe –i $m3u8Local -c copy -bsf:a aac_adtstoasc video.mp4

Man hätte aber auch hergehen können und gleich alles ffmpeg überlassen Zwinkerndes Smiley:

ffmpeg –i $m3u8 -c copy -bsf:a aac_adtstoasc .\video.mp4

Aber über den Umweg Powershell war es doch viel schöner. Vor allem hat die Powershell-Lösung auch den Vorteil, dass man die Headerzeilen und den Agenten verändern kann, falls nötig. Ach? Das geht mit ffmpeg auch? Na egal…

Werbeanzeigen

VLC Player Logging über Eingabeaufforderung um Probleme beim Streaming zu lösen

6 Juli 2012

Ist leider ein etwas komplizierteres Thema. Es gibt zuhauf Dinge im VLC Player die toll sind aber wenn sie nicht funktionieren, für dauernde Frustration sorgen. Es gibt soviel im Internet über mögliche Probleme und wie etwas funktioniert aber wenn es hart auf hart kommt fehlen die Erklärungen. Siehe auch: https://newyear2006.wordpress.com/2010/12/30/vlc-playerkann-alles-aber-keiner-versteht-ihn/

Zu allererst, ist es wichtig zu wissen, dass der VLC Player auf verschiedenen Plattformen läuft. Dies muss man immer im Hinterkopf behalten, wenn man sich an Sachen wie Kommandozeilenparameter heranmacht.

Dabei spielt es teilweise eine Rolle ob man dann Parameter mittels ‚ oder " angibt.

Um Probleme generell zu lösen, gibt es über das Menü Extras->Meldungen die Möglichkeit den Verboselevel einzustellen. Ist dieser aktiviert, werden ab diesem Zeitpunkt verschiedene Informationen und vor allem Fehler aufgezeichnet. Damit Fehler auch aufgezeichnet werden sollte der Verboselevel zumindest auf 1-Warnungen gestellt werden.

Wer nun aber nicht jedes Mal in der GUI herumturnen möchte, sondern direkt per Eingabeaufforderung zum Ziel kommen will, der verwendet folgende Parameter:

–verbose=1 –file-logging –logfile=<Datei>

Dabei setzt man anstatt <Datei> einen Dateinamen.

Wichtig ist, ab Windows Vista einen Dateinamen in einem Pfad anzugeben, für den man auch Schreibrechte hat. Was bei “C:\Program Files\VideoLAN\VLC” oder “C:\Program Files (x86)\VideoLAN\VLC” nicht standardmäßig der Fall ist!

Ein Aufruf könnte also so aussehen:

vlc.exe MeinFilm.avi :sout=#transcode{vcodec=h264,vb=800,scale=1,acodec=mpga,ab=128,channels=2,
samplerate=44100}:std{access=udp{ttl=1},dst=192.168.10.72:1234} :sout-keep  –verbose=1 –file-logging –logfile=C:\temp\vlc.log

Ein gern gesehener Fehler, ist z. B. beim Versuch etwas über ein Netz zu streamen, dieser:

error: no mux specified or found by extension

Dieser kann anscheinend auch die zu Anfang aufgeführte Tatsache mit den oberen Anführungsstrichen haben, siehe: http://wiki.videolan.org/Documentation:Streaming_HowTo/Streaming_
for_the_iPhone
.

Die aber wahrscheinlichere Ursache dürfte am verwendeten Codec bzw. Mux liegen. Dazu ist bei Streamingproblemen hilfreich auf dieser Seite nachzuschauen, was geht und was nicht: http://www.videolan.org/streaming-features.html. Es werden schön die unterschiedlichen Kombinationen dargestellt.

Dort steht dann auch, dass z. B. das Streaming über UDP nur über einen TS muxer funktioniert. Man muss bei Verwendung von UDP immer darauf achten, dass ein (TS) in der GUI steht oder eben mux=ts angeben. Im Zweifelsfall muss ein Video also zuerst transcodiert werden, damit es dieses Format unterstützt, hiermit klappts:

vlc.exe MeinFilm.avi :sout=#transcode{vcodec=h264,vb=800,scale=1,acodec=mpga,ab=128,channels=2,
samplerate=44100}:std{access=udp{ttl=1},mux=ts,dst=192.168.10.72:1234} :sout-keep –verbose=1 –file-logging –logfile=C:\temp\vlc.log

VLC Player–kann alles, aber keiner versteht ihn

30 Dezember 2010

VLC Player www.videolan.org ist ein mächtiges Programm. Doch leider sind Millionen von Beschreibungen im Internet und durch diverse Umstellungen von Websites gibt es ein schönes Durcheinander was welche Bedeutung hat. Kryptische Kommandozeilenparameter tun ihr übriges.

Dieser Blogeintrag soll etwas helfen ein paar Dinge auseinander zu halten.

Zuerst die Geschichte mit den Kommandozeilenparametern. Warum wird einmal : und einmal — angegeben?

Tja — steht vor allgemeinen Parametern, wohingegen : vor spezifischen Parametern steht. Somit kann man mittels :fullscreen sagen, dass die vorher angegebene Datei im Vollbildmodus dargestellt werden soll. Der Parameter nach dem : bezieht sich also immer auf die Angabe links vom Doppelpunkt.