zoukankan      html  css  js  c++  java
  • 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 "); 67 g_print ("stream ready at rtsp://127.0.0.1:8554/test1 "); 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> 
    "
    17         "example: %s "( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )"
    ",
    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
    ");
    43   g_main_loop_run (loop);
    44 
    45   return 0;
    46 }

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

  • 相关阅读:
    《数据结构与算法之美》01——系统高效地学习数据结构与算法
    Cookie:SameSite,防止CSRF攻击
    HeadFirst学习笔记-2.观察者(Observer)模式
    HeadFirst学习笔记-1. 设计模式入门
    Redis深入解析系列一:sql与nosql比较
    MySQL优化系列2-索引原理和优化
    MySQL优化系列1-MySQL体系结构
    java集合-ArrayList中EMPTY_ELEMENTDATA与DEFAULTCAPACITY_EMPTY_ELEMENTDATA的区别
    java集合ArrayList中modCount的作用
    java中的System.arraycopy
  • 原文地址:https://www.cnblogs.com/kkia/p/3806520.html
Copyright © 2011-2022 走看看