您的位置:首页 > 其它

gst-rtsp-server 转发rtsp流

2014-06-24 17:22 1256 查看
//以下为rtsp的服务器A
1 #include <gst/gst.h>

#include <gst/rtsp-server/rtsp-server.h>
#include <gst/rtsp-server/rtsp-session-pool.h>

static gboolean
timeout (GstRTSPServer * server)
{
GstRTSPSessionPool *pool;

pool = gst_rtsp_server_get_session_pool (server);

gst_rtsp_session_pool_cleanup (pool);
g_object_unref (pool);

return TRUE;
}

int
main (int argc, char *argv[])
{
GMainLoop *loop;
GstRTSPServer *server;
GstRTSPMountPoints *mounts;
GstRTSPMediaFactory *factory;
GstRTSPMediaFactory *factory1;
GstRTSPSessionPool *session;

gst_init (&argc, &argv);

loop = g_main_loop_new (NULL, FALSE);

session = gst_rtsp_session_pool_new();
gst_rtsp_session_pool_set_max_sessions  (session, 255);
/* 创建服务器实例 */
server = gst_rtsp_server_new ();

/* 获取服务器的rtsp流的管理器*/
mounts = gst_rtsp_server_get_mount_points (server);

/* 创建两个rtsp的流管理器,设置流的源*/
factory = gst_rtsp_media_factory_new ();
factory1 = gst_rtsp_media_factory_new ();
gst_rtsp_media_factory_set_launch (factory,
"( videotestsrc is-live=1 ! x264enc ! rtph264pay name=pay0 pt=96 )");

gst_rtsp_media_factory_set_launch (factory1,
"( "
"filesrc location=/home/kkia/Downloads/My.mp4 ! qtdemux name=d "
"d. ! queue ! rtph264pay pt=96 name=pay0 "
"d. ! queue ! rtpmp4apay pt=97 name=pay1 " ")");

gst_rtsp_media_factory_set_shared (factory, TRUE);
gst_rtsp_media_factory_set_shared (factory1, TRUE);

/*绑定流的地址,并加入流管理器中*/
gst_rtsp_mount_points_add_factory (mounts, "/test", factory);
gst_rtsp_mount_points_add_factory (mounts, "/test1", factory1);

g_object_unref (mounts);

gst_rtsp_server_attach (server, NULL);

g_timeout_add_seconds (2, (GSourceFunc) timeout, server);

g_print ("stream ready at rtsp://127.0.0.1:8554/test\n");
g_print ("stream ready at rtsp://127.0.0.1:8554/test1\n");
g_main_loop_run (loop);

return 0;
}


以上为rtsp的服务器A。

下面将创建rtsp转发服务器B,转发服务器A的rtsp流。

#include <gst/gst.h>

#include <gst/rtsp-server/rtsp-server.h>

int
main (int argc, char *argv[])
{
GMainLoop *loop;
GstRTSPServer *server;
GstRTSPMountPoints *mounts;
GstRTSPMediaFactory *factory;

gst_init (&argc, &argv);

if (argc < 2) {
g_print ("usage: %s <launch line> \n"
"example: %s \"( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )\"\n",
argv[0], argv[0]);
return -1;
}

loop = g_main_loop_new (NULL, FALSE);

/* create a server instance */
server = gst_rtsp_server_new ();
gst_rtsp_server_set_service (server, "8555");//配置服务器端口
mounts = gst_rtsp_server_get_mount_points (server);

factory = gst_rtsp_media_factory_new ();
gst_rtsp_media_factory_set_launch (factory, "( rtspsrc  location=rtsp://192.168.11.36:8554/test1 ! queue ! rtph264depay ! queue ! rtph264pay name=pay0 pt=96 )"
);//此处服务器的源来自主服务器的rtsp,ip地址改成相应的地址。
gst_rtsp_media_factory_set_shared (factory, TRUE);

gst_rtsp_mount_points_add_factory (mounts, "/test2", factory);

g_object_unref (mounts);

gst_rtsp_server_attach (server, NULL);

/* start serving */
g_print ("stream ready at rtsp://127.0.0.1:8554/test\n");
g_main_loop_run (loop);

return 0;
}


代码可以在gstreamer中 gst-rtsp-server 源代码examples目录下获取到,只是稍加了修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: