ffmpeg - Live-Stream in ein Browser-Video-Tag (nur localhost)

Ich baue eine Anwendung, das ist im Grunde ein Video-Chat, bei dem sich ein Benutzer über WebRTC mit dem Browser eines anderen Benutzers (Betreibers) verbindet und in der Lage sein sollte, mit einer dritten Person zu sprechen. Der WebRTC-Teil ist bereits fertig und funktioniert ordnungsgemäß. Der andere Teil – der problematische – ist, dass die dritte Person von einem Videogerät aufgenommen wird und ein Stream mit ffmpeg an mich weitergeleitet wird. Also muss ich das irgendwie in einen Browser streamen (und dann mit WebRTC streamen - diesen Teil habe ich abgedeckt).

Da der Stream für mich mit ffmpeg gehandhabt wird, wäre es am besten, ffmpeg zu verwenden, um in einen Browser zu streamen, aber das ist der Teil, wo es schwierig wird. Soweit ich weiß, ist das einzige Protokoll, das ich verwenden kann, HTTP (da Browser udp oder so ziemlich alles nicht unterstützen und die Verwendung von Flash Player keine Option ist), aber es ist nicht klar, wie.

Eine Möglichkeit war, ffserver zu verwenden, aber es wurde Anfang dieses Jahres veraltet, und ich würde es lieber vermeiden, veraltete Software zu verwenden. Eine andere Möglichkeit ist die Verwendung eines anderen Media-Streaming-Servers, aber ich würde lieber vermeiden, irgendetwas zu installieren.

Nach dem, was ich gelesen habe, sollte ffmpeg das unterstützen, was ich brauche, aber ich bin mir nicht sicher, wie ich es konfigurieren soll. Im Moment habe ich das:

ffmpeg -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -thread_queue_size 512 -ac 1 -f alsa -i pulse -f webm -listen 1 -seekable 0 -multiple_requests 1 http://localhost:8090

...und ein HTML-Video-Tag, um dies anzuzeigen.

<video src="http://localhost:8090"></video>

... was fast mit funktioniert ffmpeg version 2.8.15-0ubuntu0.16.04.1. Ich bekomme den Browser dazu, mein Video abzuspielen, aber erst nachdem die Aufnahme beendet wurde. Es scheint, dass der Browser meine ffmpeg-Ausgabe als Datei sieht und versucht, sie herunterzuladen, bevor sie mit der Wiedergabe beginnt.

Derselbe Befehl, ausgeführt mit ffmpeg version 4.1gibt mir Fehler:

[vp8_v4l2m2m @ 0x3dede80] driver 'uvcvideo' on card 'ASUS USB2.0 WebCam'
[vp8_v4l2m2m @ 0x3dede80] Could not find a valid device
[vp8_v4l2m2m @ 0x3dede80] can't configure encoder
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

Wie streame ich live von ffmpeg zu einem Browser mit http? Wenn ich eine Art Segment-Muxer benötige, wie verwende ich ihn dann?

Anmerkungen:

  • Ich verwende meine Webcam als Eingabe, da dies nahe an dem zu liegen scheint, was ich bei der Produktion erwarten kann.
  • Dies ist eine Linux (Ubuntu) Umgebung
  • Dieses ganze Setup wird auf unserer Client-Hardware installiert und danach habe ich keinen Zugriff mehr darauf. Daher möchte ich vermeiden, etwas anderes als ffmpeg zu verwenden (das sie bereits verwenden), da ich nicht sicher bin, ob sie dies langfristig bewältigen können.

Antworten (1)

Ich denke, dass das Problem das Video-Tag ist. Das Video-Tag unterstützt Live-Streaming nicht direkt, siehe diese Frage zu SO . Speziell:

A. Diese Antwort für eine technische Beschreibung dessen, was Sie implementieren möchten

B. Diese Antwort für ein Codebeispiel