如何将 gst-rtsp-server 与自己的管道一起使用?

vic*_*234 3 c c++ rtsp gstreamer

我正在编写 gstreamer 应用程序,需要通过 rtsp 传输输出音频/视频流。但在gst-rtsp-server示例中,我factory仅通过gst-launch语法建立了创作:

factory = gst_rtsp_media_factory_new ();  
gst_rtsp_media_factory_set_launch (factory,
  "( appsrc name=mysrc ! videoconvert ! x264enc ! rtph264pay name=pay0 pt=96 )");
Run Code Online (Sandbox Code Playgroud)

是否可以将gst-rtsp-server元素连接到我的管道?

abo*_*lov 7

您必须子类化rtsp-media-factory并覆盖default_create_element,这将返回您的pipelineasGstElement


小智 6

经过长时间的研究,我能够理解如何做到这一点。

此代码片段向您展示了如何重写虚拟函数GstRTSPMediaFactory,在这种情况下,我们对重写感兴趣create_element,而是将其指向我们自己的静态函数,负责在内部机制需要时返回您构建的管道GstRTSPMediaFactory

有关可以重写的其他虚拟函数,请参阅此内容。

    GstElement binPipeline;
    
    GstRTSPMediaFactory *custom_pipeline_factory(GstElement *bin)
    {
      GstRTSPMediaFactory *factory = gst_rtsp_media_factory_new();
      GstRTSPMediaFactoryClass *memberFunctions = GST_RTSP_MEDIA_FACTORY_GET_CLASS(factory);

      // pipeline created somewhere else
      binPipeline = bin;
      memberFunctions->create_element = create_bin_element;
      return factory;
    }
    
    GstElement *create_bin_element(GstRTSPMediaFactory *factory, const GstRTSPUrl *url)
    {
      return binPipeline;
    }
Run Code Online (Sandbox Code Playgroud)