Mit ffmpeg webrtc-ähnliche Latenz bekommen?

11

Ich habe dies zwischen Chrome und meinem Telefon verwendet:

http://www.webrtc.org/demo

Und die Latenz ist wirklich gut - weniger als 1 Sekunde.

Ich habe versucht, dies auf meinem Computer ohne Erfolg zu replizieren.

ffmpeg -f video4linux2 -i /dev/video0  -s 320x200 -r 50 -deadline realtime -vcodec libvpx -f webm -fflags nobuffer udp://10.0.0.55:9002

Und dann ffplay auf der anderen Seite.

Es hat immer noch ein paar Sekunden Verzögerung.

Irgendwann möchte ich von meinem Computer auf das Android-Handy streamen, aber die Latenz muss gut sein.

Bearbeiten - das funktioniert deutlich besser. Wenn ich mich ein bisschen davon rasieren könnte, wäre ich glücklich:

ffmpeg -vcodec rawvideo -f video4linux2 -i /dev/video0  -s 320x200 -r 25 -vcodec libvpx -f rtp -deadline realtime rtp://10.0.0.55:9002
David N. Welton
quelle
1
Der Link ist tot. Grundsätzlich möchten Sie Videos konvertieren und auf Ihr Telefon streamen? Über WLAN oder extern?
Jiggunjer
Ich möchte von einer an ein Gerät angeschlossenen Kamera streamen und sie auf einem Android-Tablet (Nexus 10) anzeigen lassen, das über USB angeschlossen ist.
David N. Welton
1
Ich weiß nicht viel über diese Codecs, aber haben Sie überprüft, ob sie nach Möglichkeit hardwarebeschleunigt sind? Das ist meine Vermutung, warum Sie mehr als 1 Sekunde Latenz sehen.
Snoopen
vpx wird schwierig sein, sich der Echtzeit zu nähern. Ich weiß, dass x264 eine Melodie mit "geringer Latenz" oder so ähnlich hat. FWIW
Rogerdpack

Antworten:

1

Das Problem ist hauptsächlich auf die Tatsache zurückzuführen, dass Sie Software-Transcodierung anstelle von Hardware-Transcodierung verwenden .

Als Faustregel gilt, dass bei der Konvertierung die Hardwarebeschleunigung die Latenzzeit von weniger als einer Sekunde (normalerweise Millisekunden) beträgt. Wenn dies in Software erfolgt, liegt die Latenz bei mehr als einer Sekunde.

FFmpeg unterstützt die Hardwarebeschleunigung, aber es ist normalerweise schwierig, sie für Sie arbeiten zu lassen.

https://trac.ffmpeg.org/wiki/HWAccelIntro

Auf der anderen Seite unterstützt Google Chrome die Hardwarecodierung / -decodierung von VP8 und H264 (sofern verfügbar), sowohl auf Ihrem Computer als auch auf Ihrem Android-Telefon:

http://code.google.com/p/chromium/issues/detail?id=428223

Ho1
quelle
1
Es geht jedoch nicht nur um Hardwarebeschleunigung ... Die Codec-Konfiguration spielt eine viel größere Rolle bei der Latenz. Der Codec muss optimiert werden, um die Latenz auf Kosten von Qualität und Bandbreite gering zu halten. Dies kann unabhängig davon erfolgen, ob Sie hardwarebeschleunigte Codecs verwenden oder nicht.
Brad
Dieser Link besagt ausdrücklich, dass Chrome KEINE Hardware-Codierung auf dem Desktop unterstützt, NUR auf Android.
Davr
Tut mir leid, aber Brad hat Recht, die Antwort ist völlig falsch: Solange Sie dieselben Codec-Einstellungen vornehmen, gibt es keinen Unterschied, ob Sie Hardware- oder Software-Codierung durchführen (solange Sie über genügend CPU-Leistung verfügen, um Echtzeitcodierung mit Ihrem Computer durchzuführen Codec-Einstellungen). Richtig ist, dass es nicht nur um Video-Codec-Einstellungen geht, sondern hauptsächlich um die Art des Transports und das Pufferverhalten des Decoders. WebRTC funktioniert, weil es auf niedrige Latenz eingestellt ist. Ein typischer Webm-Decoder ist nicht für niedrige Latenz vorgesehen
Harry