【发布时间】:2017-05-26 23:53:13
【问题描述】:
尝试使用以下元素通过 Tee 实现 GStreamer 管道。
gst_bin_add_many(GST_BIN (pipeline), <rpicamsrc>, <capsfilter>, <h264parse>, tee, <queue>, <rtph264pay>, <fakesink>, <queue>, <avdec_h264>, <videoconvert>, <capsfilter>, <customplugin>, <fakesink>, nullptr);
为了更好地理解提供了元素名称。目的是创建 Tee 管道如下:
rpicamsrc ! capsfilter ! h264parse ! tee name=t t. ! queue ! rtph264pay ! fakesink t. ! queue ! avdec_h264 ! videoconvert ! capsfilter ! customplugin ! fakesink
但它总是失败并且不报告任何错误。但没有捕获视频帧。经过一些测试发现即使是这个简单的管道也失败了:
gst_element_link_many ( <rpicamsrc>, <capsfilter>, <h264parse>, <rtph264pay>, <fakesink>, nullptr))
有趣的是,如果我从上面的 gst_bin_add_many 代码行中删除第二个 fakesink ,它就可以工作。不知道这有什么问题。尝试使用其他接收器,如 autovideosink,但没有运气。当它失败时,它不会在 gst 总线中接收到 GST 消息类型 GST_MESSAGE_ASYNC_DONE,但对于成功的情况它会接收到。获取失败和成功案例的 GST_STREAM_STATUS_TYPE_CREATE、GST_STREAM_STATUS_TYPE_ENTER 和 GST_MESSAGE_STREAM_START。我做错了什么,有什么想法吗?
【问题讨论】:
-
尝试在终端上使用 gst-launch 运行您的管道,设置 GST_DEBUG=4 以获取日志。