监控摄像头RTSP协议对接腾讯云直播

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方式安装即可。

代码语言:javascript
复制
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,需要通过源码编译形安装。

安装必须的组件

代码语言:javascript
复制
yum -y install openssl openssl-devel

下载nginx-rtmp-module源码

代码语言:javascript
复制
git clone https://github.com/arut/nginx-rtmp-module.git

下载nignx源码

代码语言:javascript
复制
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar zxvf nginx-1.14.2.tar.gz 
cd nginx-1.14.2/

编译和安装

代码语言:javascript
复制
./configure --prefix=/usr/local/nginx  --add-module=../nginx-rtmp-module  --with-http_ssl_module 
make 
make install 

4.对接测试配置

1)开通腾讯云直播

开通服务

进入控制台,选择接入码接入方式,生产推流地址

推流后控制台进行观看

2)nginx-rtmp配置

创建nginx本地文件存放目录

代码语言:javascript
复制
mkdir -p /mnt/share/html/hls

rtmp配置

代码语言:javascript
复制
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;
}

}
}

检查配置是否正确

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 

启动nginx

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx   

(可选)再次修改配置后重启nginx

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload

3) ffmpeg拉摄像头的视频流

通过ffmpeg从远端摄像头拉取rtsp流,转换成flv格式,推到本地nginx-rtmp

代码语言:javascript
复制
ffmpeg -i "rtsp://admin/h264/ch1/main/av_stream "  -f flv -y  "rtmp://127.0.0.1/hls"

3) 检测

按照上面配置后,可以进行两步检测。

1)检测ffmpeg从摄像头拉流到nginx-rtmp, 如果成功,可以看到:

代码语言:javascript
复制
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.参考

  1. ffmpeg安装:https://rpmfusion.org/Configuration
  2. nginx安装:http://www.nginx.cn/install
  3. nginx-rtmp-module配置:https://github.com/arut/nginx-rtmp-module
  4. 腾讯云直播:https://cloud.tencent.com/document/product/267