如果客户端在服务器后启动,则无法正确解码GStreamer v1.0 UDP组播流

时间:2018-07-13 13:32:57

标签: udp video-streaming gstreamer multicast

我正在尝试使用GStreamer进行UDP组播屏幕流传输。我的屏幕投射服务器应在Windows上运行,而我的客户端应在Linux上运行

如果我在服务器之前启动客户端,一切都很好。

问题是当我启动客户端并且服务器已经启动时。视频已收到,但失真极高。

This is the result.

服务器:

gst-launch-1.0 -e gdiscreencapsrc ! queue ! video/x-raw, framerate=25/1 ! videoconvert ! \
       x264enc noise-reduction=10000 tune=zerolatency bitrate=2500  speed-preset="fast" byte-stream=true threads=4 key-int-max=15 intra-refresh=true ! \
             h264parse ! rtph264pay config-interval=1 \
       ! udpsink host=224.1.1.1 port=5000 auto-multicast=true

客户:

gst-launch-1.0 -v udpsrc multicast-group=224.1.1.1 auto-multicast=true port=5000 ! application/x-rtp  ! rtph264depay ! h264parse ! queue ! decodebin ! videoconvert ! autovideosink caps='video/x-raw, format=RGB'

我已经尝试使用dx9screencapsrc,但是行为是相同的。 仅当我将gdiscreencapsrc替换为videotestsrc时,此问题才得到解决。

如果我使用ximagesrc在Linux上启动服务器,我仍然会遇到一些问题,但是视频会随着时间的推移而改善。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

在我的x264enc元素中添加cabac=false可以解决这个问题。

gst-launch-1.0 -v gdiscreencapsrc ! queue ! video/x-raw,framerate=60/1 ! decodebin ! videoscale ! videoconvert ! \
       x264enc cabac=false tune=zerolatency bitrate=4000  speed-preset="fast" ! \
             h264parse ! rtph264pay config-interval=-1 \
       ! udpsink host=224.1.1.1 port=5000 auto-multicast=true sync=false