我工作的一个视频聊天应用程序时遇到与UDP流VS TCP麻烦。
当我使用下面的管道,视频流可以接受。 (应用程序本身是在Python,但管道基本上如下)
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
然而,由于这个程序是进行跨/通过NAT,我需要UDP流。当我切换tcpserversrc到“udpsrc端口= 5000”和tcpclientsink到“udpsink主机= nnn.nnn.nnn.nnnn端口= 5000”,性能骤降到其中接收计算机获得一个单一帧每5秒的点或者。 (即使当两个流都在同一台机器上执行这发生)
发送管道生成以下(一次):
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.
...和接收管道生成(每20秒左右):
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.
我读过的文档和帮助文档,以及各种参数拨弄到udpsink,都没有很好的效果。任何人都可以直接我说我完全没有得到(无疑是显而易见的)的事情吗?提前致谢 :)
我有同样的问题。尝试设置
sync=false
在tcpclientsink和xvimagesink
我有一个类似的问题。我管理通过改变两件事情(1)由于伏羲在解码侧提到sync = false
和(2)将盖以匹配编码流水线来解决它。对于如你的情况是这样gst-launch-0.10 tcpserversrc host=127.0.0.1 port=5000 ! decodebin ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! xvimagesink sync=false
应该工作(这对我的作品)。我会建议您同时(服务器/客户端),帧频管道也是如此。我开始解码第一管道(服务器),然后将编码流水线(客户端)否则OFCOURSE失败。
更新:加入适当的译码元件之间的队列救了我的尾无数次。例如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
。同样videorate帮助我在某些情况下。
我使用这个命令和它的工作就像一个魅力。
服务器端:
gst-launch v4l2src device=/dev/video1 ! ffenc_mpeg4 ! rtpmp4vpay send-config=true ! udpsink host=127.0.0.1 port=5000
客户端:
gst-launch udpsrc uri=udp://127.0.0.1:5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001b001000001b58913000001000000012000c48d88007d0a041e1463000001b24c61766335322e3132332e30, payload=(int)96, ssrc=(uint)298758266, clock-base=(uint)3097828288, seqnum-base=(uint)63478" ! rtpmp4vdepay ! ffdec_mpeg4 ! autovideosink