首先介绍下海康设备对接方案,目前主流的是通过海康的api对接和硬件sdk,api的话需要配套海康的萤石平台或者安防平台,官网可以下载,他们提供健全的api接口满足正常的web浏览器调用,sdk的话对于web浏览器兼容性及开发效果都不是太好,主要是c开发会好集成一点,官网可以下载https://open.hikvision.com/
与客户对接过成中发现客户只有海康的硬盘录像机,并没有采购管理平台,gg,api没法用,但是通过sdk集成貌似只有ie能支持他的js播放,再次gg,没办法只能曲线救国,想着可以直接获取摄像头的视频流,然后自己转码处理,我tm真是个天才
海康还有其他的监控设备视频地址是固定的:
条件:取流端口554(默认554,以实际端口为准)映射到互联网,IP填写互联网IP
举例1:
取IP为127.0.0.1硬盘录像机,第1通道的主码流
rtsp://admin:12345@127.0.0.1:554/Streaming/Channels/101?transportmode=unicast
取IP为127.0.0.1硬盘录像机,第1通道的子码流
rtsp://admin:12345@127.0.0.1:554/Streaming/Channels/102?transportmode=unicast
举例2:
取IP为127.0.0.1硬盘录像机,第17通道的主码流
rtsp://admin:12345@127.0.0.1:554/Streaming/Channels/1701?transportmode=unicast
取IP为127.0.0.1硬盘录像机,第17通道的子码流
rtsp://admin:12345@127.0.0.1:554/Streaming/Channels/1702?transportmode=unicast
用vlc播放器(自行下载)测试下果然可以获取到视频,下面的问题就是如何将rtsp视频流转换成rtmp或者hls视频进行播放了,这里不懂rtsp、rtmp、hls是啥的,自己先去问下度娘,
rtsp(实时流媒体协议)、
rtmp协议(实时消息传输协议)和http协议是同为应用层的不同协议、
hls(Live HTTP流媒体技术)
方案实施(linux为例,win下面更简单)
1、Ffmpeg实现视频转码推流
2、nginx流媒体搭建,实现转码播放
1、ffmpeg安装配置
官网下载最新版https://ffmpeg.org/download.html#build-linux 如果没安装yasm编译器需要安装一下,下载地址http://www.tortall.net/projects/yasm/releases/安装#tar -xvf ffmpeg-4.4.tar
#cd ffmpeg-4.4
#./configure --prefix=/usr/local/ffmpeg
--prefix安装位置可自行更改#make
#make install
安装完成之后执行ffmpeg -version查看版本,如果显示不是内部命令,配置下环境变量,将安装目录bin里面的ffmpeg复制到usr/bin下即可#cd /usr/local/ffmpeg/bin
#cp ffmpeg /usr/bin
2、nginx安装及nginx-rtmp-module模块集成
官网下载ngxin,http://nginx.org/download/ 下载nginx-rtmp-module并解压
https://github.com/arut/nginx-rtmp-module/archive/master.zip
#tar -xzvf nginx-1.18.0.tar.gz
#cd nginx-1.18.0
#./configure --prefix=/opt/nginx-1.18.0 --with-http_stub_status_module --add-module=/home/nginx-18/nginx-rtmp-module-master --with-http_ssl_module #--prefix=/opt/nginx-1.18.0为安装位置
#make
#make install
3、nginx配置
进入nginx/conf 目录将nginx.conf 复制并重命名nginx-linux-rtmp.conf然后打开这个文件,并进行配置
#vim nginx-linux-rtmp.conf
rtmp {
server {
listen 4848;
chunk_size 4000;
application live {#使用rtmp 协议播放 (例如:播放器访问地址 rtmp://localhost:4848/live/test)
live on;#开启实时
}
application hls {#增加hls 协议支持
live on; #开启实时
hls on; #开启hls
hls_path hls; #切片存放位置
hls_fragment 5s; #每个TS文件包含5秒的视频内容
}
}
}
然后通过nginx-linux-rtmp.conf启动nginx
4、ffmpeg进行推流
rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov为rtsp在线测试地址
RTSP转RTMPffmpeg -rtsp_transport tcp -i
命令
ffmpeg -rtsp_transport tcp -i "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov" -ar 44100 -f flv "rtmp://127.0.0.1:4848/live"
成功之后直接用vlc打开rtmp://127.0.0.1:4848/live串流即可进行视频播放,但是如果想用浏览器播放rtmp视频流,可以用video.js但是浏览器必须支持flash,目前flash已经停止服务
RTSP转HLSffmpeg -f rtsp -rtsp_transport tcp -i
命令
hls可以直接浏览器播放不需要flash插件,可完美兼容,只是会卡顿
ffmpeg -f rtsp -rtsp_transport tcp -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov -codec copy -f hls -hls_list_size 10 -hls_wrap 20 -hls_time 15 /opt/nginx-1.18.0/hls/test.m3u8
/opt/nginx-1.18.0/hls为当前nginx目录下的hls文件夹,执行完命令之后刷新该文件夹可看见生成的ts文件
然后页面嵌入http://192.168.2.188:9032/hls/test.m3u8地址即可播放