从GstElement管道启动GstRTSPServer

时间:2017-11-13 16:35:03

标签: c gstreamer rtsp gstreamer-1.0

我在C中正在做一个Gstreamer 1.0应用程序。 管道是在运行时根据用户配置和系统“状态”构建的。 因此我使用多个GstElements,后来添加并链接到“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函数只接受const gchar *管道。

因此,我的问题是,如果你们中的任何人都知道

的功能
  • GstElement *pipeline转换为const gchar*表示(有点反向gst_parse
  • 或从GstElement *pipeline启动GstRTSPMediaFactory(参见下面的编辑#1)

非常感谢任何帮助!谢谢。

编辑#1:

来自gst-rtsp-server documentation

  

GstRTSPMediaFactory的默认实现允许您轻松创建    使用gst-launch语法的GStreamer管道。有可能创建一个    GstRTSPMediaFactory子类,使用不同的方法进行构造    管道

因此,从GstElement启动GstRTSPMediaFactory在技术上是可行的。此方法的其他问题:是否有人知道这样的GstRTSPMediaFactory子类实现?

1 个答案:

答案 0 :(得分:0)

是的,gst-rtsp-server存储库的子文件夹示例中有an example。总结一下:制作GstRTSPMediaFactory的子类并覆盖create_element()虚拟方法。

顺便说一句,这也意味着您之前提供的2个选项不正确;

  • 将GstElement 管道转换为const gchar 表示形式(反向gst_parse)

这是不可能的,因为程序化API具有更高的表现力,并且比声明性启动API允许您做更多的事情(甚至是一个简单的示例:注册回调)。

  • 或从GstElement *管道启动GstRTSPMediaFactory(请参见下面的编辑#1)

您正在考虑另一种方法:当GStreamer RTSP服务器收到开始播放的请求时,它将根据您的GstRTSPMediaFactory实现,使用GstPipeline启动get_element() 。与此相反,每个管道都在其中启动其自己的RTSP服务器。