我在连接两个元素时遇到问题:avdec_h264和avenc_mpeg4。我认为这些元素无论如何都无法协商数据的功能。
我用gst-launch测试了我的管道:
gst-launch-1.0 rtspsrc location="rtsp://camera" ! rtph264depay ! h264parse ! avdec_h264 ! avenc_mpeg4 ! fakesink
它运作良好。
当我使用我的应用程序实现管道时:
pipeline_ = gst_pipeline_new("default");
if (!pipeline_)
{
return false;
}
receiver_ = gst_element_factory_make("rtspsrc", "receiver");
demuxer_ = gst_element_factory_make("rtph264depay", "demuxer");
parser_ = gst_element_factory_make("h264parse", "parser");
decoder_ = gst_element_factory_make("avdec_h264", "decoder");
encoder_ = gst_element_factory_make("avenc_mpeg4, "encoder");
output_ = gst_element_factory_make("fakesink", "output");
if (!receiver_ || !demuxer_ || !parser_ ||
!decoder_ || !encoder_ || !output_)
{
return false;
}
g_object_set(GST_OBJECT(receiver_), "location", "rtsp://camera", nullptr);
// On this signal source pad of the receiver is being connected to
// the sink pad of the demuxer.
g_signal_connect(receiver_, "pad-added", G_CALLBACK(on_pad_added), this);
gst_bin_add_many(GST_BIN(pipeline_), receiver_, demuxer_, parser_,
decoder_, encoder_, output, nullptr);
if (!gst_element_link_many(demuxer_, parser_, decoder_,
encoder_, output_, nullptr))
{
return false;
}
一切都成功链接。所有元素都将状态更改为PLAYING,但我什么也得不到:我没有在管道总线上获得GST_MESSAGE_STREAM_START。
如果我将avenc_mpeg4更改为videoconvert元素(不是编码器),一切都会正常工作。如果我放一个其他编码器,我仍然会有当前的问题。
可能我不知道如何使用编码器的一些特殊事项。但我找不到解决方案。
谢谢。
答案 0 :(得分:0)
几点:
答案 1 :(得分:0)
你在哪里将收货人与拆分人联系起来?这是我理解所需要的。