【问题标题】:Launch GstRTSPServer from GstElement pipeline从 GstElement 管道启动 GstRTSPServer
【发布时间】:2017-11-13 16:35:03
【问题描述】:

我正在用 C 语言编写 Gstreamer 1.0 应用程序。 管道是基于运行时的用户配置和系统“状态”构建的。 因此,我使用了多个 GstElement,这些 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 函数只接受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 子类实现吗?

【问题讨论】:

  • 没有任何东西可以将管道转换为 gst-launch 字符串,或者您查看 [1] 以实现您的选项 2 以将管道传递给工厂,[1] gstreamer-devel.966125.n4.nabble.com/…
  • 我也想这样做。你找到方法了吗?

标签: c gstreamer rtsp gstreamer-1.0


【解决方案1】:

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

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

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

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

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

您的想法正好相反:当 GStreamer RTSP 服务器收到开始播放的请求时,它将使用 GstRTSPMediaFactory 根据您的 get_element() 实现启动 GstPipeline。不是相反,每个管道都会启动自己的 RTSP 服务器。

【讨论】:

    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    相关资源
    最近更新 更多