当我遇上你csy 海康IPC+NVR+路由器+ffmpeg+nginx实现网页/Android/IOS的HLS直播

研究摄像头直播有一个月了,最终领导决定使用HLS协议进行摄像头实时预览,原因是HLS对移动端和Web端都能有比较好的支持

总体思路大致如下:

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:12345@158.49.57.103: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:12345@58.49.57.103: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映射出去即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值