gst-rtsp-server 转发rtsp流

 //以下为rtsp的服务器A 1 #include <gst/gst.h>
 2
 3 #include <gst/rtsp-server/rtsp-server.h>
 4 #include <gst/rtsp-server/rtsp-session-pool.h>
 5
 6 static gboolean
 7 timeout (GstRTSPServer * server)
 8 {
 9   GstRTSPSessionPool *pool;
10
11   pool = gst_rtsp_server_get_session_pool (server);
12
13   gst_rtsp_session_pool_cleanup (pool);
14   g_object_unref (pool);
15
16   return TRUE;
17 }
18
19 int
20 main (int argc, char *argv[])
21 {
22   GMainLoop *loop;
23   GstRTSPServer *server;
24   GstRTSPMountPoints *mounts;
25   GstRTSPMediaFactory *factory;
26   GstRTSPMediaFactory *factory1;
27   GstRTSPSessionPool *session;
28
29   gst_init (&argc, &argv);
30
31   loop = g_main_loop_new (NULL, FALSE);
32
33   session = gst_rtsp_session_pool_new();
34   gst_rtsp_session_pool_set_max_sessions  (session, 255);
35   /* 创建服务器实例 */
36   server = gst_rtsp_server_new ();
37
38   /* 获取服务器的rtsp流的管理器*/
39   mounts = gst_rtsp_server_get_mount_points (server);
40
41   /* 创建两个rtsp的流管理器,设置流的源*/
42   factory = gst_rtsp_media_factory_new ();
43   factory1 = gst_rtsp_media_factory_new ();
44   gst_rtsp_media_factory_set_launch (factory,
45       "( videotestsrc is-live=1 ! x264enc ! rtph264pay name=pay0 pt=96 )");
46
47   gst_rtsp_media_factory_set_launch (factory1,
48       "( "
49       "filesrc location=/home/kkia/Downloads/My.mp4 ! qtdemux name=d "
50       "d. ! queue ! rtph264pay pt=96 name=pay0 "
51       "d. ! queue ! rtpmp4apay pt=97 name=pay1 " ")");
52
53   gst_rtsp_media_factory_set_shared (factory, TRUE);
54   gst_rtsp_media_factory_set_shared (factory1, TRUE);
55
56   /*绑定流的地址,并加入流管理器中*/
57   gst_rtsp_mount_points_add_factory (mounts, "/test", factory);
58     gst_rtsp_mount_points_add_factory (mounts, "/test1", factory1);
59
60   g_object_unref (mounts);
61
62   gst_rtsp_server_attach (server, NULL);
63
64   g_timeout_add_seconds (2, (GSourceFunc) timeout, server);
65
66   g_print ("stream ready at rtsp://127.0.0.1:8554/test\n");
67   g_print ("stream ready at rtsp://127.0.0.1:8554/test1\n");
68   g_main_loop_run (loop);
69
70   return 0;
71 }

以上为rtsp的服务器A。

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

 1 #include <gst/gst.h>
 2
 3 #include <gst/rtsp-server/rtsp-server.h>
 4
 5 int
 6 main (int argc, char *argv[])
 7 {
 8   GMainLoop *loop;
 9   GstRTSPServer *server;
10   GstRTSPMountPoints *mounts;
11   GstRTSPMediaFactory *factory;
12
13   gst_init (&argc, &argv);
14
15   if (argc < 2) {
16     g_print ("usage: %s <launch line> \n"
17         "example: %s \"( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )\"\n",
18         argv[0], argv[0]);
19     return -1;
20   }
21
22   loop = g_main_loop_new (NULL, FALSE);
23
24   /* create a server instance */
25   server = gst_rtsp_server_new ();
26   gst_rtsp_server_set_service (server, "8555");//配置服务器端口
27   mounts = gst_rtsp_server_get_mount_points (server);
28
29
30   factory = gst_rtsp_media_factory_new ();
31   gst_rtsp_media_factory_set_launch (factory, "( rtspsrc  location=rtsp://192.168.11.36:8554/test1 ! queue ! rtph264depay ! queue ! rtph264pay name=pay0 pt=96 )"
32 );//此处服务器的源来自主服务器的rtsp,ip地址改成相应的地址。
33   gst_rtsp_media_factory_set_shared (factory, TRUE);
34
35   gst_rtsp_mount_points_add_factory (mounts, "/test2", factory);
36
37   g_object_unref (mounts);
38
39   gst_rtsp_server_attach (server, NULL);
40
41   /* start serving */
42   g_print ("stream ready at rtsp://127.0.0.1:8554/test\n");
43   g_main_loop_run (loop);
44
45   return 0;
46 }

代码可以在gstreamer中 gst-rtsp-server 源代码examples目录下获取到,只是稍加了修改。

gst-rtsp-server 转发rtsp流

时间: 2024-11-05 13:39:43

gst-rtsp-server 转发rtsp流的相关文章

(转)live555 RTSP Server RTP over TCP BUG

最近碰到一个非常棘手的问题,NVR通过ONVIF协议接入IPC进行录像,在录像时,会发现其中有个别IPC会出现录像断断续续的情况.这种情况很难复现,但是这种情况一旦出现,整个过程会一直持续很长时间,一般是直到重启RTSP Server. 通过苦逼型的大规模测试发现: 1.IPC与NVR之间是通过RTP over TCP的方式传输数据(这个测试结果很简单就可以知道): 2.开启1个客户端(通过RTP over TCP传输数据),打开rtsp流后,使用任务管理器强制结束.紧接着马上再开1个客户端,打

live555 RTSP Server RTP over TCP BUG

最近碰到一个非常棘手的问题,NVR通过ONVIF协议接入IPC进行录像,在录像时,会发现其中有个别IPC会出现录像断断续续的情况.这种情况很难复现,但是这种情况一旦出现,整个过程会一直持续很长时间,一般是直到重启RTSP Server. 通过苦逼型的大规模测试发现: 1.IPC与NVR之间是通过RTP over TCP的方式传输数据(这个测试结果很简单就可以知道): 2.开启1个客户端(通过RTP over TCP传输数据),打开rtsp流后,使用任务管理器强制结束.紧接着马上再开1个客户端,打

RTSP server 在mips 上莫名其妙退出(PC上则无此问题)

http://blog.csdn.net/lubing20044793/article/details/38523701 早在这篇blog曾经写过,在虚拟机下调试sn9c291时,USB 传输数据出了问题.当时想兴许是virtualbox在usb 上对usb 2.0的支持尚未成熟导致的 所以当时也没管了,就继续在rt5350上调试sn9c291.(以为最新版本的virtualbox可以解决usb 2.0的问题,于是安装最新版本的virtualbox  4.3.16导致 虚拟机启动不了,退回4.3

windows下流媒体nginx-rmtp-module服务器搭建及java程序调用fmpeg将rtsp转rtmp直播流

第一步:首先介绍一下所用相关技术 注:项目中使用的jwplayer插件,不支持rtsp协议,所以使用以下技术来进行转艺 FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.在这里我只用到了它的视屏格式转换功能,将rtsp协议的视频流转成rtmp Rtsp协议(实时流传输协议):  公司用的是海康的监控地址为(rtsp://admin:[email protected]/h264/ch1/main/av_stream) 3. Rtmp协议(实时消息传输协议 ):

转:ffmpeg学习(二) 通过rtsp获取H264裸流并保存到mp4文件

本篇将使用上节http://www.cnblogs.com/wenjingu/p/3977015.html中编译好的库文件通过rtsp获取网络上的h464裸流并保存到mp4文件中. 1.VS2010建立VC++  win32控制台项目 2.在工程目录下建立lib目录和include目录,将已编译好的lib拷打lib下,include拷到include下,dll拷到Debug目录下 3.工程属性--配置属性--VC++目录--包含目录,添加ffmpeg头文件目录及其他第三方头文件目录 链接器--常

轻量级RTSP服务模块和RTSP推流模块适用场景区别

好多开发者一直搞不清轻量级RTSP服务SDK和RTSP推流SDK的区别(Github下载地址),以下是相关区别: 1. 轻量级RTSP服务模块:轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服务,实现本地的音视频数据(如摄像头.麦克风),编码后,汇聚到内置RTSP服务,对外提供可供拉流的RTSP URL,轻量级RTSP服务,适用于内网环境下,对并发要求不高的场景,支持H.264/H.265,支持RTSP鉴权.单播.组播模式,考虑到单个服务承载能力,我们支持同时创

nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器

本文概要: nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择.本文介绍了一种简易方法快速搭建rtmp流媒体服务器,也叫rtsp转播,数据源不是读取文件,而是采用获取rtspNal流后使用ffmpeg转播.csdn固本培元:[email protected] 开发环境:centos6.4 (主流的linux服务器选择,30%以上的市场占有率) 需要这几个包. 版本号:nginx 1.7.3  openssl 1.0.2   rtmp-module(版本未知)

Windows下利用live555实现H264实时流RTSP发送

文如其名,最近在做的项目要求利用RTSP协议转发处理完的H264视频数据给上一层客户端,环境是Windows的VS2013,于是就各种百度谷歌找代码.结果在得到利用live555去做比较简单的结论的同时也悲情地发现,网上别人贴出来的代码基本都是Linux上面的.在修改了两份来适用于Windows无效后,又一次陷入了百度谷歌的无尽搜索中.Anyway,最后终于解决了,所以贴出代码跟大家分享下,希望能给和我需求相似的童鞋一点启发,也希望有高手指正其中的问题. 用live555进行RTSP的播放基本上

一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(五)用户接口层之提取媒体流数据

当RTSP客户端向RTSP服务端发送完PLAY命令后,RTSP服务端就会另外开启UDP端口(SDP协商定义的端口)发送RTP媒体流数据包.这些数据包之间会间隔一段时间(毫秒级)陆续被发送到RTSP客户端,此时RTSP客户端可以调用GetMediaData等接口获取媒体流数据. 一.uint8_t * RtspClient::GetMediaData(string media_type, uint8_t * buf, size_t * size, size_t max_size) 该函数的作用即获