首先介绍下海康设备对接方案,目前主流的是通过海康的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

docker 海康 海康websdk_linux

#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

docker 海康 海康websdk_rtmp_02

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秒的视频内容
        }
    }
}

docker 海康 海康websdk_ffmpeg_03


然后通过nginx-linux-rtmp.conf启动nginx

4、ffmpeg进行推流

rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov为rtsp在线测试地址
RTSP转RTMP
ffmpeg -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转HLS
ffmpeg -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文件

docker 海康 海康websdk_ffmpeg_04


然后页面嵌入http://192.168.2.188:9032/hls/test.m3u8地址即可播放

docker 海康 海康websdk_docker 海康_05


docker 海康 海康websdk_linux_06