之前通过SRS和ffmpeg拉流转码来播放海康的监控摄像头,实现起来代码上比较复杂,而且cpu占用高;
后来发现用webrtc-steamer可以直接在前端播放rtsp流;代码量大幅减少,不需要转码,效率也提高了;cpu占用率也降低了,一个服务器可以支撑的视频也多了。
第一步:安装docker版的webrtc-steamer
(直接安装linux版本的缺少很多依赖,弄起来太麻烦了)
docker pull mpromonet/webrtc-streamer
启动
docker run -itd -p 8000:8000 --name webrtc-streamer mpromonet/webrtc-streamer
看下效果
本地和局域网的可以看到。
上云后就看不了。(网上很多攻略到这就没了,完全不能投入使用)
第二步:公网穿透(具体什么原理以后再研究)
Linux下WebRTC搭建私有turn/stun服务,目前coturn只支持linux
1. 安装gcc
yum install gcc-c++
2. 安装openssl-devel
yum -y install openssl-devel
3. 安装libevent
在http://libevent.org/ 下载libevent-2.1.8-stable.tar.gz
tar -zxvf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=/usr --libdir=/usr/lib64 (如果报错试试这个方式:./configure --prefix=/usr/local/coturn)
make
make install
成功没有出现报错信息
4. 安装conturn-4.5.1.1
wget https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz
tar -zxvf 4.5.1.1.tar.gz
cd coturn-4.5.1.1
./configure
make
make install
可以通过which turnserver验证。如果出现路径即为成功
5. 配置文件和签名,然后进入文件夹:
cd /usr/local/etc/ 会看到一个叫做 turnserver.conf.default的配置文件。将它备份:
cp turnserver.conf.default turnserver.conf
6. 在当前文件夹生成签名(自行输入):
openssl req -x509 -newkey rsa:2048 -keyout /usr/local/etc/turn_server_pkey.pem -out /usr/local/etc/turn_server_cert.pem -days 99999 -nodes
后面会弹出地区输入,自己输,没什么影响
7. 修改配置文件
Vim turnserver.conf 参考如下
relay-device=eth0
listening-ip=#内网IP
listening-port=3478
tls-listening-port=5349
relay-ip=#内网IP
external-ip=#公网IP
relay-threads=50
lt-cred-mech
min-port=49152
max-port=65535
cert=/usr/local/etc/turn_server_cert.pem
pkey=/usr/local/etc/turn_server_pkey.pem
pidfile=”/var/run/turnserver.pid”
user=admin:123456
cli-password=123456
将配置文件更新如上。
请一定要设置cli-password这一项,不设置会报错。
注意检查cert和pkey的路径和名称。检查内网ip和公网ip是否填写准确。
注意文本格式准确。
8. 启动turnserver
turnserver -o -a -f -user=admin:123456 -c /usr/local/etc/turnserver.conf -r NanChang
-o 是让程序在后台启动
-r 后面填个地区就行。
-user 一定要和配置文件中一样。
ps -ef|grep turnserver 指令查看是否启动服务,如果有
9.验证
Trickle ICE:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
1、stun:+公网IP+端口,测试出现公网IP则代表部署成功
2、turn:+公网IP+端口,测试出现公网IP则代表部署成功
然后再次docker启动webrtc-streamer
docker run -itd -p 8000:8000 --name webrtc-streamer1 mpromonet/webrtc-streamer -H0.0.0.0:8000 -Tadmin:123456@139.199.172.92:3478-s139.199.172.92:3478-C config.json
139.199.172.92是我公网的ip
我用腾讯云到这里都很顺利,没有报错。
参考:史上最详细的webrtc-streamer访问摄像机视频流教程_吭哧瘪肚的万能工的博客-CSDN博客
第三步:vue项目调用
引用js,js文件要放在public里,这样不会被编译换路径。(js可以在windows版本的webrtc-streamer找到)
调用加载js方法
初始化webrtcstreamer
页面,video就是初始化webrtcstreamer里的video
看效果
Webrtcstreamer是搭建在腾讯云上,不是局域网。
Webrtcstreamer下载地址
https://github.com/mpromonet/webrtc-streamer/releases