Dash-Live-Streaming

nachdem ich viel gegoogelt und tonnenweise Foren gelesen habe, kann ich immer noch keinen Live-Stream mit meiner Kamera auf ein anderes Gerät machen. Mein System besteht aus einem Server (einem Windows-Laptop), der die Szene aufnimmt und das erfasste Video streamt, bis jetzt habe ich offensichtlich erfolglos versucht, ffmpeg, MP4Box und DashCast zu verwenden, und aus einem Client (ein Gerät), das sein sollte in der Lage, den Videofluss zu lesen, indem eine einfache HTML5-Seite verwendet wird, die mit dash.js ausgestattet ist.

Um zu verstehen, wie dash funktioniert, habe ich ganz am Anfang versucht, ein "statisches" Video zu streamen, und dank dieses Tutorials funktioniert alles perfekt . Die Probleme treten auf, wenn ich versucht habe, Live-Videos zu streamen, und ich habe dieses Tutorial befolgt , weil ffmpeg beim Versuch, eine .mpd-Datei zu erstellen, fehlgeschlagen ist, aber es kann in zwei Unterprobleme unterteilt werden:

  1. Wenn ich versuche, Audio und Video zusammen zu handhaben, sagt das System, dass der Audiokanal keinen Stream enthält. Nachfolgend liste ich den eingefügten Befehl auf:

    ffmpeg -f dshow -i video="USB2.0 VGA UVC WebCam":audio="Microfono /
    (Realtek   High Definition Audio)" -map 0:0 -pix_fmt yuv420p /
    -c:v libvpx -b:v 3000k -keyint_min 30 -g 30 -speed 6 /
    -tile-columns 4 -frame-parallel 1 -threads 8 -static-thresh 0 /
    -max-intra-rate 300 -deadline realtime -lag-in-frames 0 /
    -error-resilient 1 -f webm_chunk -header live.hdr /
    -chunk_start_index 1 live_%d.chk -map 0:1 -c:a libvorbis -b:a 128k /
    -ar 44100 -f webm_chunk -audio_chunk_duration 2000 -header /
    live_audio.hdr -chunk_start_index 1 live_audio_%d.chk
    

    Die obigen Zeilen rufen Audio- und Videohardware auf und speichern die Multimedia-Streams in Blöcken.

    ffmpeg -f webm_dash_manifest -live 1 -i live.hdr -f webm_dash_manifest /
    -live 1 live_audio.hdr -c copy -map 0 -map 1 -f webm_dash_manifest /
    -live 1 -adaptation_sets "id=0,streams=0 id=1,streams=1" /
    -chunk_start_index 1 -chunk_duration_ms 2000 /
    -time_shift_buffer_depth 7200 -minimum_update_period 7200 manifest.mpd
    

    Dieser letzte Befehl konnte den Audiostream in der .mpd-Datei nicht anhängen und in der Konsole erschien als Fehler „Ausgabedatei Nr. 0 enthält keinen Stream“.

  2. Also versuche ich es nur mit Video mit im Wesentlichen den gleichen Optionen, aber als ich versuchte, das Manifest zu erstellen, trat ein Fehler dieses Typs auf: „Header für Ausgabedatei #0 konnte nicht geschrieben werden (falsche Codec-Parameter?): Ungültige Daten bei der Verarbeitung der Eingabe gefunden“. , also bin ich neugierig zu wissen, welche Art von Parametern falsch sind.

An diesem Punkt ändere ich meine Strategie komplett, also erstelle ich eine fragmentierte Version des Live-Streams und ich habe versucht, MP4Box zu verwenden, um eine .mpd-Datei zu erstellen, aber es scheint, dass MP4Box nur mit endlichem Video funktioniert, oder zumindest kann ich das nicht Benutze es live.

Und schließlich habe ich Dashcast verwendet und konnte einen Frame von meiner Client-Seite sehen, aber es funktioniert einfach nicht. Der letzte Befehl, den ich eingefügt habe, ist der folgende:

DashCast -vf dshow -vfr 15 -v video="USB2.0 VGA UVC WebCam" /
-live -seg-dur 500 -frag-dur 100 -time-shift 10

Eigentlich habe ich ein wenig mit den Parametern usw. herumgespielt, aber das Ergebnis ist immer noch dasselbe, ich kann einfach mein Gesicht im Browser nicht sehen. In diesem Fall lautet der Fehler "Echtzeitpuffer zu 101 % voll! Frame gelöscht!" oder "Echtzeitpuffer zu 80 % voll! Frame gelöscht!".

Meine Frage ist also, was mit meinen FFmpeg-Befehlen falsch ist.

Wie kann ich MP4Box für Live-Zwecke verwenden (mit Beispielen, weil ich im ganzen Netz kein einziges Beispiel finde)?

Und schließlich, warum ist DashCast so langsam?

Offensichtlich werden alle Vorschläge zu alternativen Methoden zur Durchführung eines Livestreams mit einem anderen Tool akzeptiert.

Entschuldigung, ich habe nicht gesehen, dass Sie das zuvor verlinkt haben. Ihre Ffmpeg-Zeile sieht viel komplexer aus als die in dem dort angegebenen Beispiel, warum ist das so?
Und nur aus Neugier, haben Sie recherchiert, ob VLC das kann, was Sie brauchen?
Hallo @HansMeiser, danke für die Kommentare, trotzdem sieht mein String komplexer aus, weil ich die Variable ${VP9_DASH_PARAMS} in der Klartextversion verwendet habe -speed 6 -tile-columns 4 -frame-parallel 1 -threads 8 -static-thresh 0 - max-intra-rate 300 -deadline realtime -lag-in-frames 0 -error-resilient 1 , das sind die Parameter für den Live-Stream. Eigentlich sind die Parameter für VP9-Encoder, aber ich habe VP8 verwendet, weil VP9 mir einige Probleme bereitet. Abschließend nein, ich habe nicht über VLC recherchiert, jetzt werfe ich einen Blick auf VLC-Sachen
Ich habe ein ähnliches Problem wie Sie und es scheint, dass Windows ffmpeg defekt ist. Die gleichen Befehle, die mir unter Windows Fehler geben, funktionieren unter Linux.

Antworten (1)

Ich bin in einer ähnlichen Position wie Sie und ich vermute, dass ein Teil des Problems darin besteht, dass meine CPU den Stream nicht schnell genug transcodieren kann, insbesondere wenn ein Player auf demselben Computer ausgeführt wird.

Überprüfen Sie Ihre CPU-Auslastung, wenn sie maximal ist, ist dies wahrscheinlich der Grund für die Frame-Drops.

Anscheinend kann mp4box verwendet werden, um Live-DASH zu streamen (es hat eine Option -dash-live), aber ich habe es auch noch nicht geschafft, dies zum Laufen zu bringen. Dieser Link ist ziemlich alt, scheint aber ein funktionierendes Beispiel zu haben:

http://www.slideshare.net/cconcolato/live-streaming-of-video-and-subtitles-with-mpegdash