海康IPC+ffmpeg+nginx+ckplayer实现网页实时预览监控视频

2019-07-13 08:45发布

第一次接触摄像头  捣腾了好几天  现在记录下搭建过程 以免忘掉 实现思路和其他大神的基本一致 :1.通过IPC的rtsp协议获取rtsp流  2.使用ffmpeg转成rtmp协议  3.通过nginx发布rtmp流  4.使用ckplayer播放
一、准备: 1.海康IPC 2.交换机 3.笔记本充当服务器 4.ffmpeg   下载地址:https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20170321-db7a05d-win64-static.zip 5.已安装过nginx-rtmp-module功能的nginx 由于本人只是个C#小呆而已  因此网上大神们安装nginx-rtmp-module的方法我完全看不懂,经过一天翻遍某度  终于找到了别人已安装好的   下载地址:https://codeload.github.com/illuspas/nginx-rtmp-win32/zip/master  这个版本的nginx已经帮我们把rtmp协议配置好了 (感谢csdn博主mengzhengjie的文章http://blog.csdn.NET/mengzhengjie/article/details/50969016) 6.ckplayer 下载地址:百度 {MOD}http://pan.baidu.com/s/1kVsJXJp 7.Java或.net或PHP或dw等web开发工具(用于测试实现效果) 8.vlc 下载地址:http://sw.bos.baidu.com/sw-search-sp/software/c2904cc7121e0/vlc_2.2.4.0.exe 可播放rtsp和rtmp流的播放器  用来测试
二、rtsp流  海康IPC支持通过rtsp协议进行流传输,因此获取流非常方便,取流地址为:rtsp://admin:12345@192.168.1.102:554/h264/ch1/main/av_stream 其中,admin和12345是登录IPC的用户名和密码,@后面跟IPC的IP地址,端口号默认为554,如果修改过,这里填修改后的端口号。只要是支持rtsp协议的IPC都可以通过类似方式取流,各厂商的格式可能略有不同,请查阅各厂商的相关说明 连接好IPC、电脑、交换机后,打开vlc播放器,选择媒体-->打开网络串流-->填入rtsp协议-->播放,如果连接和参数正确,此时vlc应该可以播放监控画面

三、安装ffmpeg 通过第一步我们确认了rtsp流可以正确获取后,第二步我们安装ffmpeg,用于rtsp流转rtmp流 ffmpeg是一个功能非常强大的视频处理工具,居家旅行学习开发必备,注意,ffmpeg需要区分32位和64位,请根据自己操作系统进行选择 下载解压后得到如下文件夹结构 配置环境变量:将x:/ffmpeg/bin添加到Path中,具体添加方法大家可查看java配置jdk的方法,网上很多 测试ffmpeg:打开cmd(使用管理员身份打开),输入:ffmpeg  获取到如下图所示界面,说明ffmpeg安装成功 四、nginx搭建 nginx我的理解有点类似iis的功能,是个信息管理器(如果不对,请大神斧正),原版的nginx是不带有rtmp发布功能的,需要安装nginx-rtmp-module插件,网上的方法很多,但是由于我看得一脸懵逼,所以花了好久找到已安装好插件的nginx,链接已奉上,这个我们就可以直接用了 将压缩包解压到任意位置,进入conf文件夹,打开nginx.conf文件,找到http{server{listen,将端口号改成10001(只要没有被占用的端口都可以,我习惯1w+),顺便看看有个rtmp{server{listen1935,这个就是发布rtmp流的端口,后面会用到 保存nginx.conf,双击nginx.exe,一闪而过,不知道啥情况,看看任务管理器 发现有两个nginx.exe,说明启动成功,启动失败多半是端口被占用,cmd:netstat -a 查看端口占用情况,如果nginx成功启动,那么10001和1935也会被占用 至此,nginx成功搭建
五、rtsp转rtmp 搭建好nginx,说明通过ffmpeg转换的rtmp流有地方接收了,这一步我们就来转流 打开cmd输入以下指令: ffmpeg -i "rtsp://admin:12345@192.168.1.102:554/h264/ch1/main/av_stream" -f flv -r 1 -s 1920x1080 -an "rtmp://192.168.1.100:1935/live/stream"
rtsp://是IPC取流的协议地址,rtmp则是刚才搭建nginx的地址,这个1935端口就是刚才配置nginx时看到的rtmp端口,输入后首先会看到关于ffmpeg的一些信息,出现如下界面则说明ffmpeg已成功将rtmp流推送到了nginx 最下面一排就是事实转流和发送的信息,红 {MOD}的是错误信息,我的有丢包现象 我们再打开vlc播放器,测试下是否可以成功播放rtmp流,方法依然是打开vlc,填入:rtmp://192.168.1.100:1935/live/stream 播放,如果可以看到监控画面说明成功
六、网站播放 前面我们已经拿到rtmp流,最后我们将流通过ckplayer在网页上进行播放,使用ckplayer请移步到:http://www.ckplayer.com/tool/help/100.htm
至此,通过ffmpeg+nginx+ckplayer将支持rtsp协议的IPC在网页上播放的工作基本完成,其实还有很多技术处理需要去细化,如ffmpeg在处理多条rtsp流时,效率如何,丢包情况如何处理,nginx配置多个rtmp流等等,后续有进展再写bk进行补充