如果有人帮我解决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
将开始挂起。
请给我解决方案来解决这个问题。
答案 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分支上的队列中)