天天看点

EasyIPCamera二次开发---快速打造简单流媒体服务器

上一篇博客简单介绍了自己的需求,并对EasyIPCamera_RTSP进行编译、运行。本篇博客针对EasyIPCamera_RTSP进行二次开发,增添读取配置文件、读取数据库的功能,将EasyIPCamera_RTSP打造成为简单的RTSP流媒体服务器。

1. 读取配置文件(读数据库道理类似)

Win32下,读取INI配置文件非常简单,其中我的配置文件名为“EasyIPCamera_RTSP.ini”,具体内容如下:

[RunMode]
;单机模式、连数据库模式
Mode = 单机
;数据库服务地址
DBSIP = .
DBSUserName = root
DBSPassword = 
[IPC0]
IPCName=测试
;ID号为必填项,客户端请求时传入此ID即可
IPCID=
;IP地址为必填项
IPCIP=.
;RTSP端口为必填项,一般默认为554即可
IPCPort=
;摄像机用户名为必填项
UserName=admin
;摄像机密码为必填项
Password=
RtspUrl=rtsp://admin:@.:
           

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

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

上述代码非常简单,通过读取配置文件[RunMode]中的Mode字段,来确定程序的运行模式。“单机”模式就是通过配置文件中的[IPCx]字段生成摄像机连接串信息,“数据库”模式就是将相关IPC连接串信息存入数据库,通过数据库服务读取。

2. 初始化所有通道信息

根据配置文件或者数据库中的相关字段,生成的IPC连接串信息需要一次性初始化至

RTSP_SOURCE_CHANNEL_T channel[MAX_CHANNEL_NUM];

for (int i=; 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] = {};
  ::GetPrivateProfileStringA(str, "RtspUrl", "", ipcRtspUrl, MAX_PATH, ".\\EasyIPCamera_RTSP.ini");
  char rtspUrl[] = {};
  sprintf_s(rtspUrl, "%s", ipcRtspUrl);
  channel[i].sourceType = SOURCE_TYPE_RTSP;
  strcpy(channel[i].source_uri, rtspUrl);
}
           

通过上面的循环,一次性填充了所有通道,这样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开源项目的魅力吧!

继续阅读