我使用此命令在一台计算机上流式传输:
gst-launch-1.0 -e v4l2src do-timestamp=true ! video264,width=1296,height=730,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=192.168.1.116 port=5000
因此输出为YU12格式的h264。我在原始RGB中需要这种格式,因此在我使用的接收器站点上:
gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! decodebin ! videoconvert ! video/x-raw,format=\(string\)RGB ! videoconvert ! fpsdisplaysink sync=false text-overlay=true
这会导致图像颜色正确,如下所示:
然而,当我将此输出传输到其他程序时,我尝试将rgb帧转换为纹理并使用参数pix_fmt rgb24进行ffplay的自定义输出,颜色错误,图片以某种奇怪的方式移动。
奇怪的是,当我尝试bgr时,红色在第二个输出中是正确的,fdisplaysink没有改变。
我正在使用gst-launch-1.0 --version
gst-launch-1.0 version 1.4.5
GStreamer 1.4.5
感谢任何帮助。
答案 0 :(得分:1)
如下面的评论中所述:需要“ - q”选项来防止gst-launch将调试信息吐出到stdout管道。
好的,有趣的故事,看起来像你在ffplay中指定视频大小时使用HEIGHTxWIDTH,而在GStreamer中你使用WIDTHxHEIGHT。这个命令工作正常:
gst-launch-1.0 -q videotestsrc pattern = ball! video / x-raw,height = 320,width = 240,framerate = 30/1,format = RGB! fdsink | ffplay -f rawvideo -pixel_format rgb24 -video_size 240x320 -i -
如果颜色发生偏移,你可能会在某处将RGB与BGR混合在一起。
您可以获取所有ffplay像素格式的列表,如下所示:
ffplay -pix_fmts
视频转换支持的GStreamer像素格式在这里:
gst-inspect-1.0视频转换
答案 1 :(得分:0)
我不确定如何删除此问题,我发布的此解决方案不是如何删除它而不是如何避免它。
Stdout无法正常工作,但保存到文件例如。所以我尝试使用命名管道。经典mkfifo
。做这样的事
gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! decodebin ! videoconvert ! video/x-raw,height=730,width=1296,framerate=25/1,format=RGB ! videoconvert ! filesink sync=false location=pipe
并且要么打开管道,要么只是像
那样重定向它cat pipe | program -
使它像魅力一样工作。没有颜色错误,没有移动的图片。
我不确定linux中的命名管道和stdout管道有什么区别(我根本没有足够的时间研究它们),我只是读过一次,命名管道的开销较少。