zoukankan      html  css  js  c++  java
  • 基于EasyIPCamera实现的RTSP跨平台拉模式转发流媒体服务器

    本文转自博客:http://blog.csdn.net/xinlanbobo/article/details/53224445


    上一篇博客《EasyIPCamera通过RTSP协议接入海康、大华等摄像机,摒弃私有SDK接入弊端》简单介绍了自己的需求,并对EasyIPCamera_RTSP进行编译、运行。本篇博客针对EasyIPCamera_RTSP进行二次开发,增添读取配置文件、读取数据库的功能,将EasyIPCamera_RTSP打造成为简单的RTSP流媒体服务器。

    1. 读取配置文件(读数据库道理类似) 
    Win32下,读取INI配置文件非常简单,其中我的配置文件名为“EasyIPCamera_RTSP.ini”,具体内容如下:

    [RunMode]
    ;单机模式、连数据库模式
    Mode = 单机
    ;数据库服务地址
    DBSIP = 192.168.1.24
    DBSUserName = root
    DBSPassword = 123456
    [IPC0]
    IPCName=测试1
    ;ID号为必填项,客户端请求时传入此ID即可
    IPCID=1
    ;IP地址为必填项
    IPCIP=192.168.1.30
    ;RTSP端口为必填项,一般默认为554即可
    IPCPort=554
    ;摄像机用户名为必填项
    UserName=admin
    ;摄像机密码为必填项
    Password=12345
    RtspUrl=rtsp://admin:12345@192.168.1.30:554
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    具体读取配置文件代码如下:

    char chRunMode[MAX_PATH];  
    ::GetPrivateProfileStringA("RunMode", "Mode", "单机", chRunMode, MAX_PATH, ".\EasyIPCamera_RTSP.ini");
    • 1
    • 2
    • 1
    • 2

    上述代码非常简单,通过读取配置文件[RunMode]中的Mode字段,来确定程序的运行模式。“单机”模式就是通过配置文件中的[IPCx]字段生成摄像机连接串信息,“数据库”模式就是将相关IPC连接串信息存入数据库,通过数据库服务读取。 
    2. 初始化所有通道信息 
    根据配置文件或者数据库中的相关字段,生成的IPC连接串信息需要一次性初始化至 RTSP_SOURCE_CHANNEL_T channel[MAX_CHANNEL_NUM];

    for (int i=0; i < MAX_CHANNEL_NUM; i++)
    {
      channel[i].id = i;
      sprintf(str, "IPC%d", i);
      ::GetPrivateProfileStringA(str, "IPCID", "", buf, MAX_PATH, ".\EasyIPCamera_RTSP.ini");
      if (buf[0] == '')
      {
         continue;
      }
      sprintf(channel[i].name, "channel=%s", buf);
      char ipcRtspUrl[MAX_PATH] = {0};
      ::GetPrivateProfileStringA(str, "RtspUrl", "", ipcRtspUrl, MAX_PATH, ".\EasyIPCamera_RTSP.ini");
      char rtspUrl[512] = {0};
      sprintf_s(rtspUrl, "%s", ipcRtspUrl);
      channel[i].sourceType = SOURCE_TYPE_RTSP;
      strcpy(channel[i].source_uri, rtspUrl);
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    通过上面的循环,一次性填充了所有通道,这样EasyIPCamera_RTSP就可以作为服务接收不同摄像机的请求了。 
    3. 视频请求实现 
    假如EasyIPCamera_RTSP运行在192.168.1.155上面,则使用VLC客户端请求时需要填入如下格式的RTSP URL: 
    rtsp://192.168.1.155:8554/channel=IPCID 
    配置文件中的 IPCID在这里就不受源代码的限制了(原有是代码写死的)。 
    4.部署 
    将EasyIPCamera_RTSP.exe程序,EasyIPCamera_RTSP.ini ,libEasyIPCamera.dll , libEasyRTSPClient.dll 放在同一文件夹中,同时放入msvcp100.dll和msvcr100.dll(Visual Studio 2010的动态链接库),应该就可以在任意的Windows系统主机上运行了。 
    是不是非常简单,仅仅需要4步,就能将EasyIPCamera打造成为一个“ RTSP服务+流媒体转发” 的服务器!

    下一步,我们还可以使用EasyRTSPClient作为测试工具,批量、循环连断EasyIPCamera_RTSP.exe,来测试该服务的稳定性、并发性。 
    大家赶快行动起来,领略一下EasyDarwin开源项目的魅力吧!


  • 相关阅读:
    背水一战 Windows 10 (90)
    背水一战 Windows 10 (89)
    背水一战 Windows 10 (88)
    背水一战 Windows 10 (87)
    背水一战 Windows 10 (86)
    背水一战 Windows 10 (85)
    背水一战 Windows 10 (84)
    背水一战 Windows 10 (83)
    背水一战 Windows 10 (82)
    背水一战 Windows 10 (81)
  • 原文地址:https://www.cnblogs.com/babosa/p/9217861.html
Copyright © 2011-2022 走看看