gstreamer-udp-Streaming ist langsam
Arbeite ich an einer videochat-Anwendung und bin Probleme mit UDP-streaming-vs TCP.
Wenn ich den Rohrleitungen unterhalb der video-streams akzeptabel. (Die Anwendung selbst ist in python, aber die Leitungen sind im wesentlichen wie unten)
sender:
gst-launch-0.10 v4l2src ! video/x-raw-yuv,width=320,height=240 !
theoraenc ! oggmux ! tcpclientsink host=nnn.nnn.nnn.nnn port = 5000
receiver:
gst-launch-0.10 tcpserversrc host=nnn.nnn.nnn.nnn port=5000
! decodebin ! xvimagesink
Jedoch, da diese app ist die Durchführung über/durch NAT, I UDP-streaming.
Wenn ich schalten Sie die tcpserversrc zu einem "udpsrc port=5000" und der tcpclientsink zu einem "udpsink host = nnn.nnn.nnn.nnnn port=5000", die Leistung sinkt bis zu dem Punkt, wo der empfangende computer wird mit einem single-frame alle 5 Sekunden oder so. (Dies geschieht auch, wenn beide streams ausgeführt werden auf der gleichen Maschine)
Den senden-pipeline generiert die folgenden (einmal):
WARNING: from element /GstPipeline:pipeline0/GstUDPSink:udpsink0:
Internal data flow problem.
Additional debug info:
gstbasesink.c(3492): gst_base_sink_chain_unlocked (): /GstPipeline:pipeline0
/GstUDPSink:udpsink0:
Received buffer without a new-segment. Assuming timestamps start from 0.
...und das empfangen-pipeline generiert (alle 20 Sekunden oder so):
WARNING: from element /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0:
A lot of buffers are being dropped.
Additional debug info:
gstbasesink.c(2739): gst_base_sink_is_too_late (): /GstPipeline:pipeline0
/GstXvImageSink:xvimagesink0:
There may be a timestamping problem, or this computer is too slow.
Ich gelesen habe, docs und manpages, fummelte mit verschiedenen Parametern, um die udpsink, ohne gute Wirkung.
Kann jemand mich direkt zu dem (zweifellos offensichtliche) Sache, die ich bin ganz nicht immer auf???
Vielen Dank im Voraus 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem.
Versuchen Sie,
auf tcpclientsink und xvimagesink
sync=false
auch tun?sync=false
deaktivieren Sie die Uhr synchronisieren der Ausgabe sinken. Ich weiss auch nicht, was ich sage 🙂Ich hatte ein ähnliches problem. Ich es geschafft, zu lösen, indem Sie zwei Dinge (1) Wie Fuxi erwähnt
sync = false
und (2) Hinzufügen von Kappen auf der Decoder-Seite zu entsprechen, die encoding-pipeline. Wie z.B. in deinem Fall so etwas wiegst-launch-0.10 tcpserversrc host=127.0.0.1 port=5000 ! decodebin ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! xvimagesink sync=false
sollte funktionieren (bei mir funktionierts). Ich würde Ihnen empfehlen, die frame-rate in beiden (server/client) die Leitungen als gut. Ich starte das decoding-pipeline erste (server) und dann die encoding-pipeline (client -) ansonsten NATÜRLICH scheitert er.Update:
Hinzufügen Warteschlange zwischen den entsprechenden Dekodierung Elemente gespeichert haben, mein Schwanz mehrfach. z.B.
gst-launch-0.10 tcpserversrc host=127.0.0.1 port=5000 ! queue ! decodebin ! queue ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! xvimagesink sync=false
. Ähnlich videorate hat mir geholfen in manchen Situationen.ich bin mit diesem Befehl, und es funktioniert wie ein Charme.
server-Seite:
Client-Seite: