我正在用C做一个Gstreamer 1.0应用程序。根据用户配置和运行时的系统“状态”来构建管道。因此,我使用了多个GstElement,这些元素后来又添加并链接到“ GstElement管道”。这是一个更好理解的最小示例:
GstElement *pipeline = gst_pipeline_new("mypipeline");
...
GstElement *src = gst_element_factory_make("videotestsrc", NULL);
...
gst_bin_add_many(GST_BIN(pipeline), src, enc, pay, NULL);
gst_element_link_many(src, enc, pay, NULL);
...
然后应由GstRTSPMediaFactory启动此管道。我在这里面临的问题是gst_rtsp_media_factory_set_launch
函数仅接受gst_rtsp_media_factory_set_launch
管道。
因此,我的问题是,如果你们中的任何一个都知道其中一个的功能
const gchar *
转换为GstElement *pipeline
表示形式(相反的const gchar*
)gst_parse
启动GstRTSPMediaFactory(请参阅下面的编辑#1)非常感谢您的帮助!谢谢。
编辑#1:
从gst_parse
:
GstRTSPMediaFactory的默认实现使您可以轻松创建使用gst-launch语法的GStreamer管道。可以创建一个GstRTSPMediaFactory子类,使用不同的方法进行构造管道。
因此从技术上可以从GstElement启动GstRTSPMediaFactory。此方法的另一个问题:有人知道这样的GstRTSPMediaFactory子类实现吗?
是,GstElement *pipeline
存储库在其子文件夹示例中具有gst-rtsp-server documentation。总结一下:制作gst-rtsp-server
的子类并覆盖an example虚拟方法。
顺便说一句,这也意味着您之前提供的2个选项不正确;
- 将GstElement 将管道转换为const gchar表示形式(有点反向gst_parse)
这是不可能的,因为程序化API具有更强的表现力,并且比声明性启动API允许您做更多的事情(甚至是一个简单的示例:注册回调)。
- 或从GstElement *管道启动GstRTSPMediaFactory(请参阅下面的编辑#1)
[您正在反过来思考:当GStreamer RTSP服务器收到开始播放的请求时,它将使用GstRTSPMediaFactory
根据您的create_element()
实现启动GstRTSPMediaFactory
。与此相反,每个管道都在其中启动其自己的RTSP服务器。