第一次接触摄像头 捣腾了好几天 现在记录下搭建过程 以免忘掉
实现思路和其他大神的基本一致 :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协议配置好了
(感谢****博主mengzhengjie的文章http://blog.****.net/mengzhengjie/article/details/50969016)
6.ckplayer
下载地址:百度网盘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:[email protected]: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:[email protected]: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
最下面一排就是事实转流和发送的信息,红色的是错误信息,我的有丢包现象
我们再打开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进行补充