Gstreamer视频LiveStreaming在使用分辨率704 * 576和25 FPS时挂起

时间:2016-05-10 08:15:01

标签: gstreamer

如果有人帮我解决Livestreaming悬挂问题,那将会很有帮助。我的管道设计是这样的:

gst-launch v4l2src device=/dev/video2 ! 'video/x-raw-yuv,width=704,height=576, framerate=25/1' ! tee name=liveTee ! queue ! mfw_isink liveTee. ! queue ! videorate ! vpuenc ! avimux ! filesink location=/home/RecordingFile.avi

它适用于单个相机Live Streaming,但如果我们在不同线程上添加更多两个相机直播和录制,则liveStreaming将开始挂起。

请给我解决方案来解决这个问题。

1 个答案:

答案 0 :(得分:0)

另一个tee - 编码器问题.. tee有问题,它不会重新分配延迟事件或导致队列挂起的东西..你可以使用bigger queue sizes关于x264enc,但原理是相同的 - 设置队列到无限的缓冲区(或一些大的值 - 但这只是很好的调整)

尝试尝试使用这些值并在不工作的情况下回写 - 也许vpuenc存在不同的问题。

gst-launch v4l2src device=/dev/video2 ! 'video/x-raw-yuv,width=704,height=576, framerate=25/1' ! tee name=liveTee ! queue name=mfw_queue max-size-time=0 max-size-bytes=0 max-size-buffers=0 ! mfw_isink liveTee. ! queue name=vpuenc_queue ! videorate ! vpuenc ! avimux ! filesink location=/home/RecordingFile.avi

我在vpuenc的另一侧设置了更大的队列,因为发生的问题是vpuenc缓冲了大量数据,这导致在tee的另一个分支上对称缓冲数据导致队列阻塞。

如果您可以检查这是否确实是问题的原因,请尝试使用以下方法进行调试:

GST_DEBUG=queue_dataflow:5,3 your ! pipe ! etc

并查看哪个队列被阻止以及何时...不要忘记提供队列名称,以便您可以跟踪哪个被阻止..

您也可以尝试使用漏洞属性作为队列

! queue leaky=2 ! ...

或者leaky = 1会做的伎俩(尝试在tee的mfw_isink分支上的队列中)