海康IPC+NVR+路由器+ffmpeg+nginx实现网页/Android/IOS的HLS直播

总体思路大致如下:

1.搭建好IPC和NVR环境后,可以通过NVR的IP地址(内网)和rtsp协议访问到关联此NVR的IPC视频

2.通过路由器的端口映射功能,将NVR的端口映射到外网上,这样我们就能通过外网IP和映射的外网端口访问到与承此NVR关联的所有IPC视频

3.在远程服务器上使用ffmpeg将rtsp视频转换成hls视频

4.通过nginx将hls视频进行转发

一、准备

1.搭建IPC和NVR环境

这个不进行详细介绍,相关搭建可百度海康IPC和NVR的设置,这一步我们需要达到的目标是NVR的显示屏上能看到IPC的实时预览画面,并记录下每个IPC的通道号

2.路由器端口映射

这个不进行详细介绍,百度如何做端口映射即可,我们需要映射的是NVR上的RTSP端口(默认554),例如我们将NVR的554端口映射到外网的10554上

3.ffmpeg

下载地址:http://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20170411-f1d80bc-win64-static.zip

4.nginx

这里我们可以直接使用easydarwin中集成的nginx,因为已经配置好了,不需要我们再去学习

下载地址:EasyDarwin已编译版本

5.vlc

用于测试播放  下载地址:http://sw.bos.baidu.com/sw-search-sp/software/c2904cc7121e0/vlc_2.2.4.0.exe

二、测试rtsp协议

首先我们测试下rtsp协议是否能正常访问,获取预览视频,例如外网ip是58.49.57.103

那么我们可以使用vlc通过rtsp://admin:[email protected]:554/h264/ch33/sub/av_stream来测试rtsp是否能正常访问

如果可以正常播放视频,则说明rtsp正常

如果不能播放,你需要注意一下几个地方是否有错误:

1)用户名、密码是否正确,由于我们是通过NVR去访问IPC,不是直接访问IPC,因此协议地址中的用户名和密码应填NVR的,这里admin即NVR的用户名,12345即NVR的密码

2)IP通道号是否正确,在老款的NVR中,IP通道号从33开始,即ch33代表D1通道、ch34代表D2通道...依次类推

3)端口号是否正确,NVR的RTSP默认端口号是554,如果被修改,这里也需要对应修改

三、使用ffmpeg进行协议转换

这一步我们将rtsp协议转换成hls协议,使用ffmpeg

ffmpeg是分32位和64位的,请注意转码计算机的位数

使用cmd定位到ffmpeg.exe所在的文件夹下,再执行以下代码进行转码

ffmpeg -i rtsp://admin:[email protected]:10554/h264/ch33/sub/av_stream -strict -2 -c:v libx264 -c:a aac -f hls f:nginx\www\hls\ipc1\ipc1.m3u8

其中-i后面是rtsp源的访问地址,由于我们将nvr的ip和端口映射到外网上了,所以我们可以直接通过外网IP和映射外网端口进行访问

-f后面是目标格式,这里写hls 再后面是m3u8文件和切片ts文件的存放路径

这里我们需要将这些生成的文件存放到nginx中的www目录下,方便nginx对m3u8文件进行发布

如果转码无误,将出现以下界面

四、nginx发布

获取了m3u8文件和ts文件,下一步就是将m3u8发布出去

下载的EasyDarwin中有个nginx文件夹,这就是我们需要的,其他文件夹在本示例中不需要(EasyDarwin也是非常非常强大的流媒体分发服务,大家可移步它的官网学习)

进入nginx/conf,打开nginx.conf文件,设置如下两个端口号:

我们将通过http中的listen端口对m3u8文件的访问

双击nginx.exe,查看任务管理器中的进程,如果有2个或两个以上的nginx.exe进程出现,则说明nginx启动成功,否则请检查设置的两个端口是否已被占用

最后,我们访问hls视频的路径是:http://58.49.57.103:10080/hls/ipc1/ipc1.m3u8

将此路径放入vlc中,测试是否可以正常播放

以上示例实现通过内网穿透的方式,将摄像头暴露在公网上,通过ffmpeg实现协议转换,用于支持各终端的播放,实现此功能的还有海康萤石云,几乎不需要针对视频底层开发,但是需要收费

另外此实例还有一个局限性,即需要公网ip为固定ip,家用宽带的ip不固定,因此在端口映射时,可使用花生壳、nat123等内网穿透服务,他们可提供域名对公网ip进行动态绑定

我们也可直连ipc实现此示例,但有路由器的端口映射数量有限,如果ipc太多,路由器端口映射数量不够,因此,我们需要通过NVR去连接ipc,这样我们只需要将nvr映射出去即可

转载

猜你喜欢

转载自www.cnblogs.com/axin85/p/11741572.html