GStreamer RTSP-服务器GST_RTSP_MEDIA_FACTORY_SET_Launch()示例 [英] Gstreamer RTSP-Server gst_rtsp_media_factory_set_launch() Example

查看:17
本文介绍了GStreamer RTSP-服务器GST_RTSP_MEDIA_FACTORY_SET_Launch()示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过使用gst_rtsp_media_factory_set_launch()函数在中间接收来自RTSP-Server的中断来更改管道。我使用media_configure()回调函数来获取管道的GstElement。如果在中间接收到中断,则将其更改为GST_STATE_NULL,然后更改输入gst_rtsp_media_factory_set_launch()函数的命令。具体来说,当用户在播放V4L2视频0时按下Ctrl+C时,V4L2视频1将被播放。实现成功(即从视频0更改为视频1),但存在一个问题,即在Ctrl+C后屏幕冻结约3秒,并移动到下一个屏幕。使用UDP时情况并非如此,但使用RTSP时会出现此问题。请给我建议,谢谢!

    #include <gst/rtsp-server/rtsp-server.h>
            
    GstRTSPServer *server;
    GstRTSPMountPoints *mounts;
    GstRTSPMediaFactory *factory;
    GMainLoop   *loop;
    GstElement *pipeline;
        
    void INThandler(int sig_no)
    {
        gst_element_set_state(pipeline, GST_STATE_NULL);
        gst_rtsp_media_factory_set_launch (factory, "( v4l2src device=/dev/video1 ! compositor ! vpuenc_h264  ! rtph264pay pt=96 name=pay0 )");
        //gst_rtsp_media_factory_set_launch (factory, "( filesrc location=test2.mp4 ! qtdemux ! decodebin ! compositor !  queue2  ! vpuenc_h264 ! rtph264pay pt=96 name=pay0 )");
    }
       
    static void media_configure (GstRTSPMediaFactory * factory, GstRTSPMedia * media,
                gpointer user_data)
    {
        pipeline =  gst_rtsp_media_get_element (media);
    }
        
    int main(int argc,char * argv[])
    {
        signal(SIGINT, INThandler);
        
        gst_init(&argc, &argv);
        
        loop = g_main_loop_new(NULL, FALSE);
        server = gst_rtsp_server_new ();
        gst_rtsp_server_set_service(server, "5002");
        mounts = gst_rtsp_server_get_mount_points (server);
        factory = gst_rtsp_media_factory_new ();
        
        gst_rtsp_media_factory_set_launch (factory, "( v4l2src device=/dev/video0 ! queue2 ! vpuenc_h264 ! rtph264pay pt=96 name=pay0 )");
        //gst_rtsp_media_factory_set_launch (factory, "( filesrc location=test1.mp4 ! qtdemux ! decodebin ! compositor !  queue2  ! vpuenc_h264 ! rtph264pay pt=96 name=pay0 )");
        g_signal_connect (factory, "media-configure", (GCallback) media_configure, NULL);
        gst_rtsp_mount_points_add_factory (mounts, "/test", factory);
        g_object_unref (mounts);
        
        gst_rtsp_server_attach (server, NULL);
        g_main_loop_run(loop);
        
        return 0;
    }

推荐答案

我终于解决了这个问题!

https://www.codeleading.com/article/67115642873/

如果使用udpsrc,则可以在运行时更改管道。

这篇关于GStreamer RTSP-服务器GST_RTSP_MEDIA_FACTORY_SET_Launch()示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆