上篇博客是用ffmpeg+nginx实现web播放rtsp视频,原理是将rtsp转码成rtmp格式,再用flash插件播放
由于项目硬件条件有限,转码基本就不考虑了,因此只能直接播放获取到的rtsp流,并且整个网络环境只能有一个外网IP,因此思路就是能否通过NVR去找同一网段内的IPC,如何搭建NVR和IPC的环境这里就不作介绍,必须保证NVR可以看到网段内各摄像头,以及关闭平台接入功能(这个是重点,我就一直卡在这里很久,具体原因未知,希望有懂的大神能指教)
通过NVR查找IPC地址如下:
rtsp://admin:[email protected]/h264/ch33/main/av_stream
这个IP地址是NVR的(我的NVR是旧版的,所以访问地址也只能有旧的地址),格式和直接访问IPC没什么不同,需要注意的是在旧版NVR中,ch33是IP通道的第一个通道,我们在NVR的通道设置中是可以设置IPC的通道编号的
一、准备
1.EasyDarwin
下载地址:http://pan.baidu.com/s/1sluDEPn(下载里面的.rar文件包即可,另一个是Linux的)
2.EasyPusher
下载地址:https://codeload.github.com/EasyDarwin/EasyPusher/zip/master
3.VLC
下载地址:http://sw.bos.baidu.com/sw-search-sp/software/c2904cc7121e0/vlc_2.2.4.0.exe
二、启动EasyDarwin服务
EasyDarwin服务是一个转发服务,可接受RTSP源并将其转发到指定地址
将下载到的rar文件解压,进入文件夹后进入EasyDarwin文件夹
1)配置EasyDarwin
进入解压后的文件夹-->EasyDarwin文件夹-->打开easydarwin.xml文件,这是EasyDarwin的配置文件,我们主要进来配置EasyDarwin的端口:
ctrl+f找到如图所示节点,并配置两个端口(确保两个端口未被占用,查看方法cmd:netstat -a)
修改后保存文件即可
2)双击EasyDarwin文件夹中的start.bat,出现如下界面,说明EasyDarwin服务启动成功
这时,EasyDarwin就可接受RTSP源,并转发出去,那么下一步就是将源推送到EasyDarwin服务了
二、使用EasyPusher推送RTSP源
搭建好EasyDarwin,这一步就将RTSP源推送到EasyDarwin,我们使用EasyPusher进行推送
下载EasyPusher源码后,使用vs2010打开其中的EasyPusher_RTSP,编译后,找到EasyPusher_RTSP\Debug\EasyPusher_RTSP.exe这个文件
这个文件就是一个推送RTSP源的工具,我们要做的就是在自己的项目中用代码打开这个文件并传入参数,实现RTSP源的推送(我只是个会C#的小白)
使用c#打开.exe文件很容易,使用ProcessStartInfo类,在System.Diagnostics命名空间下,我们需要注意的是arguments参数的填写:
-d:接受推送的服务IP地址,即我们在上一步中启动EasyDarwin服务的电脑的IP地址
-p:接受推送的服务端口,即我们在上一步中配置的EasyDarwin的rtsp_port的端口号
-n:流名称,我们可为每一个rtsp流起一个唯一的名称,这个随意取
-u:rtsp流源,即我们通过NVR访问IPC的rtsp协议地址 rtsp://admin:[email protected]/h264/ch33/main/av_stream
执行以上代码,我们可看到如下界面启动
到这一步,说明我们推送的流已经成功到达EasyDarwin,我们可以通过访问EasyDarwin访问到IPC的rtsp流,访问地址就是rtsp://easydarwin服务IP:easydarwin服务端口/流名称,如rtsp://192.168.15.28:554/ipc1,将此地址放到vlc中播放,测试是否成功
到此,使用EasyDarwin系列工具搭建rtsp视频直播完成
注意:如果同时有多个rtsp源需要转发,可打开多次EasyPusher,也可自行修改EasyPusher_RTSP的源码实现,由于我不会c++,因此只能用前一种方式了,希望有c++大神能帮助修改源码,实现多源转发