我想拍摄h264视频,对其进行解码,在 mjpeg 中对其进行重新编码,并通过 tcp 进行流式处理。
为此,我使用了一个raspivid视频资源,它提供了一个用Gstreamer传输的h264输出视频,它使用tcp进行解码,重新编码和传输:
raspivid -n -t 0 -b 7000000 -fps 25 -o - | \
gst-launch-1.0 fdsrc ! video/x-h264,framerate=25/1,stream-format=byte-stream ! decodebin ! videorate ! video/x-raw,framerate=10/1 ! \
videoconvert ! jpegenc ! tcpserversink host=192.168.24.5 port=5000 &
接收我使用:
gst-launch-1.0 tcpclientsrc host=192.168.24.5 port=5000 ! jpegdec ! autovideosink
在我的tcp 服务器上我的CPU工作在90%,我没有错误。我们可以认为没问题,但是......
在我的tcp 客户端上我有这个错误:
ERROR: from element /GstPipeline:pipeline0/GstTCPClientSrc:tcpclientsrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2865): gst_base_src_loop (): /GstPipeline:pipeline0/GstTCPClientSrc:tcpclientsrc0:
streaming task paused, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
你有什么想法为什么我的管道坏了吗?
答案 0 :(得分:0)
尝试在视频会议之前添加视频会话?
此外,您应该为tcp源指定上限,因为第二个管道需要至少知道帧速率。我会做类似的事情:
gst-launch-1.0 tcpclientsrc host=192.168.24.5 port=5000 ! image/jpeg, framerate=25/1 ! jpegparse ! jpegdec ! queue ! videoconvert ! autovideosink
如果仍然无效,来自接收管道的GST_DEBUG = 6日志应有助于查明问题。