1. 需求与目标
传统监控高清摄像机ip camera(如: 海康,大华等)遵循监控行业标准,一般只支持rtsp传输协议,互联网直播通用标准为rtmp协议,将这些摄像机视频流引入互联网直播是一个较共性需求,如:咖啡连锁企业通过摄像头将咖啡制作过程直播出去;监控景点直播;户外楼宇直播等。
典型摄像头(海康威视ds-2cd1221-i3网络监控摄像头)配置:
自主搭建完整可商用的互联网直播平台研发和维护成本巨大,我们一般采用成熟的直播云平台,如:腾讯云直播平台。对接腾讯云直播需要解决的问题:
1、 摄像头的RTSP协议数据采集。
2、 采集到的数据本地可以处理,并可通过RTMP协议推送流到腾讯云进行互联网直播。
2. 实现方案
以上面海康摄像头为例:
1)通过rtsp协议获取到摄像头的直播数据,形如: rtsp://admin:12345@192.168.1.5:554/h264/ch1/main/av_stream
2)通过ffmpeg从摄像头拉取rtsp视频数据流实现采集,并转发到nginx-rtmp
3) nginx-rtmp转推rtmp流到腾讯云实现互联网直播
3.软件安装
软件环境信息: - 操作系统:Centos 7.2 - ffmpeg版本:2.8.15 - nginx版本:1.14.2
1) ffmpeg安装
采用yum方式安装即可。
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm
yum -y install ffmpeg
2) nginx-rtmp安装和配置
nginx默认不带nginx-rtmp-module,需要通过源码编译形安装。
安装必须的组件
yum -y install openssl openssl-devel
下载nginx-rtmp-module源码
git clone https://github.com/arut/nginx-rtmp-module.git
下载nignx源码
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2/
编译和安装
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module
make
make install
4.对接测试配置
1)开通腾讯云直播
开通服务
进入控制台,选择接入码接入方式,生产推流地址
推流后控制台进行观看
2)nginx-rtmp配置
创建nginx本地文件存放目录
mkdir -p /mnt/share/html/hls
rtmp配置
vi /usr/local/nginx/conf/nginx.conf #文件末尾追加 rtmp {
server {
listen 1935; #监听的端口 chunk_size 4000; # rtmp推流请求路径 application hls { live on; hls on; # 本地保存hlv格式文件 hls_path /mnt/share/html/hls; hls_fragment 10s; # 转推腾讯云 push rtmp://2490.livepush.myqcloud.com/live/rtsptest?bizid=2490&txSecret=d39774d3ce88ad218fe54eb84783a5af&txTime=5C1281FF; }
}
}
检查配置是否正确
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
启动nginx
/usr/local/nginx/sbin/nginx
(可选)再次修改配置后重启nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload
3) ffmpeg拉摄像头的视频流
通过ffmpeg从远端摄像头拉取rtsp流,转换成flv格式,推到本地nginx-rtmp
ffmpeg -i "rtsp://admin/h264/ch1/main/av_stream " -f flv -y "rtmp://127.0.0.1/hls"
3) 检测
按照上面配置后,可以进行两步检测。
1)检测ffmpeg从摄像头拉流到nginx-rtmp, 如果成功,可以看到:
cd /mnt/share/html/hls
#注:该目录每10秒生产一个HLV格式的ts文件
[root@VM_16_62_centos hls]# ll
total 63840
-rw-r--r-- 1 nobody nobody 10797592 Dec 13 17:57 mystream-0.ts
-rw-r--r-- 1 nobody nobody 10873544 Dec 13 17:57 mystream-1.ts
-rw-r--r-- 1 nobody nobody 10555072 Dec 13 17:57 mystream-2.ts
-rw-r--r-- 1 nobody nobody 10884260 Dec 13 17:58 mystream-3.ts
-rw-r--r-- 1 nobody nobody 10913212 Dec 13 17:58 mystream-4.ts
-rw-r--r-- 1 nobody nobody 10848916 Dec 13 17:58 mystream-5.ts
-rw-r--r-- 1 nobody nobody 378256 Dec 13 17:58 mystream-6.ts
-rw-r--r-- 1 nobody nobody 268 Dec 13 17:58 mystream.m3u8
[root@VM_16_62_centos hls]#
** 2)检测是否推送到腾讯云,如果推送成功,控制可以看到“直播状态”为直播中。**
5.参考
- ffmpeg安装:https://rpmfusion.org/Configuration
- nginx安装:http://www.nginx.cn/install
- nginx-rtmp-module配置:https://github.com/arut/nginx-rtmp-module
- 腾讯云直播:https://cloud.tencent.com/document/product/267