本文转自博客: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] == '\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开源项目的魅力吧!

基于EasyIPCamera实现的RTSP跨平台拉模式转发流媒体服务器的更多相关文章

  1. EasyDarwin在做拉模式转发海康RTSP摄像机视频流的过程中出现花屏问题的解决方案

    问题描述 在3年前我当时基于EasyDarwin为用户开发了一款RTSP拉模式转发的程序,也发布了一篇博客<用Darwin开发RTSP级联服务器(拉模式转发)>,当时考虑的很简单,只要将R ...

  2. 用Darwin开发RTSP级联server(拉模式转发)(附源代码)

    源代码下载地址:https://github.com/EasyDarwin orwww.easydarwin.org 在博客 在Darwin进行实时视频转发的两种模式 中,我们描写叙述了流媒体serv ...

  3. 用Darwin开发RTSP级联服务器(拉模式转发)(附源码)

    源码下载地址:https://github.com/EasyDarwin orwww.easydarwin.org 在博客 在Darwin进行实时视频转发的两种模式 中,我们描述了流媒体服务器对源端音 ...

  4. 基于EasyDarwin框架实现EasyNVR H5无插件直播流媒体服务器方案

    在之前的一篇博客<web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!>中,描述了实现一套H5无插件直播方案的各个组件的参考建议,又在博客<EasyNVR H5流媒体服务器方案架 ...

  5. EasyDarwin流媒体服务器RTSP拉模式流媒体转发模块设计

    拉模式转发 拉模式转发,顾名思义就是服务器主动从源端(IPCamera.NVR.或者其他流媒体服务器)通过RTSP/RTP协议将流媒体音视频数据拉取到流媒体转发服务器,再通过内部分发调度机制,分发给请 ...

  6. 基于EasyNVR摄像机流媒体服务器实现RTSP或Onvif监控摄像头Web无插件化直播监控

    前言介绍 随着互联网的发展,尤其是移动互联网基于H5.微信的应用越来越多,企业也更多地想基于H5.微信公众号来快速开发和运营自己的产品,而传统的安防IPC所输出的各种RTSP.GB28181.SDK视 ...

  7. Dropdown.js基于jQuery开发的轻量级下拉框插件

    Dropdown.js 前言 在SPA(Single Page Application)盛行的时代,jQuery插件的轮子正在减少,由于我厂有需求而开发了这个插件.如果觉得本文对您有帮助,请给个赞,以 ...

  8. ActiveMQ基本详解与总结& 消息队列-推/拉模式学习 & ActiveMQ及JMS学习

    转自:https://www.cnblogs.com/Survivalist/p/8094069.html ActiveMQ基本详解与总结 基本使用可以参考https://www.cnblogs.co ...

  9. 基于EasyDSS流媒体RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器解决方案创建视频点播、短视频、视频资源库等视频播放系统

    需求背景 最近有很多用户咨询关于视频点播问题,主要需求集中在如何搭建属于自己的视频点播平台: 实现的功能可以大体归类为:对应自身拥有的视频文件,需要发布到一个网站,其他用户都可以实现点播观看. 针对于 ...

随机推荐

  1. JS判断SharePoint页面编辑状态

    这篇博客主要讲使用不同的客户端方式来判断页面的编辑模式. 1.当页面处于发布状态时,可以使用下面两种方式:if(g_disableCheckoutInEditMode == true) {   ale ...

  2. How to debug Android Native Application with eclipse

    This blog is inspired by this tutorial http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-a ...

  3. 关于C++的new是否会对内存初始化的问题

    先把结论放上来: C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用构造函数进行初始化:如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的 ...

  4. 开发使用mysql的一些必备知识点整理(一)初阶

    简介 主要知识点包括:能够与mysql建立连接,创建数据库.表,分别从图形界面与脚本界面两个方面讲解 相关的知识点包括:E-R关系模型,数据库的3范式,mysql中数据字段的类型,字段约束 数据库的操 ...

  5. Reactjs 的 PropTypes 使用方法

    propTypes 使用來規範元件Props的型別與必需狀態 var Test = React.createClass({ propTypes: { // required requiredFunc: ...

  6. SQL Server 触发器 详细讲解

    最近在做微信活动,需要用到存储过程,在网上找了下感觉使用触发器更好些,和大家分享下 希望对你有用. 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动 ...

  7. Windows下php环境变量的配置

    1.找到php的路径比如"E:\php_env\PHP".    2.需要保证该目录下php.ini的配置是正确的,如果是刚下载的php包,则可能需要修改相应的一些配置:将php目 ...

  8. 计蒜客 UCloud 的安全秘钥(随机化+Hash)

    题目链接 UCloud 的安全秘钥 对于简单的版本,我们直接枚举每个子序列,然后sort一下判断是否完全一样即可. #include <bits/stdc++.h> using names ...

  9. GitHub+Octopress搭建免费blog

    生成github公钥 检查ssh公钥设置: 如果id_rsa*文件不存在,跳到第三步: $ cd .ssh $ ls 备份原来的ssh key: 备份旧数据,备份后删除旧数据: $ mkdir key ...

  10. win7 32位安装pyqt

    参考 http://blog.csdn.net/fairyeye/article/details/6607981 http://www.cnblogs.com/toSeek/p/6363036.htm ...