GStreamer RTSP-服务器GST_RTSP_MEDIA_FACTORY_SET_Launch()示例 [英] Gstreamer RTSP-Server gst_rtsp_media_factory_set_launch() Example
本文介绍了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屋!
查看全文