• 基于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开源项目的魅力吧!


  • 相关阅读:
    导入列Allowed memory size of 33554432 bytes exhausted (tried to allocate 16 bytes)
    图片设置解决CSS下img图片多余空白或者是表格中有空隙Bug的方案
    报表安装Crystal Reports for Eclipse(1)
    百度收购被收购传闻四起,UC 向左Or向右?
    方法格式在<s:iterator>中,将时间输出显示格式化
    参数脚本linux shell 1 变量$#,$@,$0,$1,$2的含义解释
    匹配行UVA 题目10010 Where's Waldorf?
    报表域Crystal Reports for Eclipse(2)
    分区文件系统FAT文件系统
    希望查询windows下安装cygwin后ssh服务无法启动的解决办法
  • 原文地址:https://www.cnblogs.com/babosa/p/9217861.html
Copyright © 2020-2023  润新知