无法链接Gstreamer元素
我是GStreamer的新手,我遵循了,并试图使它与本地mp4文件一起工作。 我的问题是无法链接“uridecodebin”和“autovideosink”,以下是我的相关代码:无法链接Gstreamer元素,gstreamer,Gstreamer,我是GStreamer的新手,我遵循了,并试图使它与本地mp4文件一起工作。 我的问题是无法链接“uridecodebin”和“autovideosink”,以下是我的相关代码: GstElement *pipeline, *source, *sink; GstBus *bus; GstMessage *msg; GstStateChangeReturn ret; /* Initialize GStreamer */ gst_init (&argc, &
GstElement *pipeline, *source, *sink;
GstBus *bus;
GstMessage *msg;
GstStateChangeReturn ret;
/* Initialize GStreamer */
gst_init (&argc, &argv);
/* Create the elements */
source = gst_element_factory_make ("uridecodebin", "source");
sink = gst_element_factory_make ("autovideosink", "sink");
/* Create the empty pipeline */
pipeline = gst_pipeline_new ("pipeline");
if (!pipeline || !source || !sink) {
g_printerr ("Not all elements could be created.\n");
return -1;
}
/* Build the pipeline */
gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
if (gst_element_link (source, sink) != TRUE) {
g_printerr ("Elements could not be linked.\n");
gst_object_unref (pipeline);
return -1;
}
它总是使用gst\u元素\u链接(源、接收器)
返回false,但如果我只使用gst-launch-1.0 uridecodebin uri,它工作得很好=file://MyPathToVideo/test.mp4 ! autovideosink
命令,我做错了什么
非常感谢。尝试使用
gst\u parse\u launch()
并为其提供管道。这样比较短。我相信它考虑到了你的一些特殊情况
您的方法不起作用的主要问题是,uridecodebin
没有暴露任何焊盘,因为当时它对您的MP4文件一无所知。因此,它可以包含音频、视频、两者,或者其他任何内容。正确的方法是实现延迟链接
因此,您没有直接链接它,而是在uridecodebin
上实现pad added
信号:
然后在元素断开连接的情况下启动管道
当uridecodebin
扫描您的媒体文件并暴露可链接的焊盘时,会触发此pad added
信号。如果是您的视频板,您可以将其连接到自动视频接收器
gst\u parse\u launch()
如果我没有弄错的话,它会自动为您提供这一功能(至少这是gst-lauch-1.0
正在做的事情-不确定该特定功能是否也移动到该API)
还有,你越狱了。教程2使用的不是
uridecodebin
,而是更多的基本元素。教程3将介绍动态管道。尝试使用gst\u parse\u launch()
并为其提供管道。这样比较短。我相信它考虑到了你的一些特殊情况
您的方法不起作用的主要问题是,uridecodebin
没有暴露任何焊盘,因为当时它对您的MP4文件一无所知。因此,它可以包含音频、视频、两者,或者其他任何内容。正确的方法是实现延迟链接
因此,您没有直接链接它,而是在uridecodebin
上实现pad added
信号:
然后在元素断开连接的情况下启动管道
当uridecodebin
扫描您的媒体文件并暴露可链接的焊盘时,会触发此pad added
信号。如果是您的视频板,您可以将其连接到自动视频接收器
gst\u parse\u launch()
如果我没有弄错的话,它会自动为您提供这一功能(至少这是gst-lauch-1.0
正在做的事情-不确定该特定功能是否也移动到该API)
还有,你越狱了。教程2使用的不是
uridecodebin
,而是更多的基本元素。教程3将介绍动态管道。谢谢!我真的太匆忙了。我的简单示例现在可以使用了!顺便说一句,我目前正在做一个已有的项目,它使用了gst\u parse\u launch
和filesrc location=/home/root/test.mp4!德克宾!qvconv!视频/x-raw,格式=(字符串)NV12,帧速率=1/1!队列appsink name=cameraFrameSink
作为状态,是否可以动态更改文件位置而不是创建新管道?当然可以,问题是,由于介质可能完全不同,下游会发生什么。也许你想看看multifilesrc
。谢谢!我真的太匆忙了。我的简单示例现在可以使用了!顺便说一句,我目前正在做一个已有的项目,它使用了gst\u parse\u launch
和filesrc location=/home/root/test.mp4!德克宾!qvconv!视频/x-raw,格式=(字符串)NV12,帧速率=1/1!队列appsink name=cameraFrameSink
作为状态,是否可以动态更改文件位置而不是创建新管道?当然可以,问题是,由于介质可能完全不同,下游会发生什么。也许您想看看multifilesrc
。