828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp
华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧!什么是华为云Flexus X实例
华为云Flexus X实例云服务是新一代开箱即用、体验跃级、面向中小企业和开发者打造的高品价比云服务产品。Flexus云服务器X实例是新一代面向中小企业和开发者打造的柔性算力云服务器,可智能感知业务负载,适用于电商直播、企业建站、开发测试环境、游戏服务器、音视频服务等中低负载场景。开始接触华为云Flexus X实例
获取华为云Flexus X实例后第一步就是先去华为云上重置服务器密码重置完毕后用ssh工具登录华为云服务器,这里我用的是finalshell,也可以用其他工具登陆比如xshell或者Putty都可以
登录上去查看硬盘大小,可以看到是100g硬盘,硬盘总大小是正常的
root@flexusx-ebe8:~# df -hFilesystem Size Used Avail Use% Mounted ontmpfs 1.2G 1.1M 1.2G 1% /run/dev/vda1 99G 4.2G 90G 5% /tmpfs 5.7G 0 5.7G 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 1.2G 4.0K 1.2G 1% /run/user/0
然后输入 ufw status
可以看到默认防火墙是关闭的,因此我们就不需要额外再去配置端口开放相关的配置,只要在华为云安全组配置端口开放就可以了 root@flexusx-ebe8:~# ufw statusStatus: inactive
docker环境的安装
然后进行docker容器的安装,安装最新版本的docker这里因为docker现在已经无法直接通过网络安装,所以我们通过离线安装的方式安装docker环境从官网下载离线包https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/
如图所示,把离线包传到服务器上,进行安装 dpkg -i *.deb
查看安装的docker版本 root@flexusx-ebe8:/home/docker# docker -vDocker version 27.1.2, build d01f264
至此docker容器环境安装完毕 srs相关
什么是srs
SRS的全称为Simple Realtime Server,是一个开源的(MIT协议)简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpeg、OBS、VLC、 WebRTC等客户端配合使用,提供流的接收和分发的能力,是一个典型的发布 (推流)和订阅(播放)服务器模型。开始安装srs
先配置CANDIDATE="127.0.0.1"
,这里配置为外网ip,也就是华为云提供的弹性公网ip然后用docker启动srs使用的版本为srs6的release版本 docker run -it -d -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 1990:1990 -p 8088:8088 --restart=always --env CANDIDATE=$CANDIDATE -p 8000:8000/udp ossrs/srs:6 ./objs/srs -c conf/https.docker.conf
输入docker ps
查看容器运行状态修改配置文件以支持webrtc与rtmp
但是这个版本启动后只支持webrtc但还不能与rtmp互相转换,这里我们就需要修改一下配置文件,让它也支持与rtmp相互转换
输入docker ps
获取容器id
然后输入docker exec -it 30d26105d002 /bin/bash
进入容器,这里的容器id换成你刚才获取的id
root@30d26105d002:/usr/local/srs# lsconf etc objs usrroot@30d26105d002:/usr/local/srs#
进入容器后可以看到,默认的文件夹在/usr/local/srs中,我们进入conf文件夹cd conf
可以看到有很多配置文件,里面也有我们刚才docker容器启动时指定的配置文件https.docker.conf
然后我们输入exit
,退出容器,mkdir -p /usr/local/srs/conf
创建目录,然后把容器内的配置文件copy出来,然后进入刚才创建好的文件夹cd /usr/local/srs/conf
然后执行docker cp 30d26105d002:/usr/local/srs/conf/https.docker.conf https.docker.conf
,可以在本地获取我们需要的https.docker.conf文件,然后开始修改
vhost __defaultVhost__ { hls { enabled on; } http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } rtc { enabled on; # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc rtmp_to_rtc on; # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp rtc_to_rtmp on; }}
把两个off修改为on即可配置文件修改好后,我们还需要把文件放进去,这里我们把改好的配置文件映射到容器内部,来达到我们想要的效果 重新部署srs容器并启动
之前部署的srs服务还启动着,我们需要先停止服务,重新起一个新的,docker stop 30d26105d002
,然后docker rm 30d26105d002
,停止容器,然后删除容器重新运行指令,并附上挂载的命令 docker run -it -d -v /usr/local/srs/conf/https.docker.conf:/usr/local/srs/conf/https.docker.conf -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 1990:1990 -p 8088:8088 --restart=always --env CANDIDATE=$CANDIDATE -p 8000:8000/udp ossrs/srs:6 ./objs/srs -c conf/https.docker.conf
查看docker ps 可以看到容器正常运行着,这就代表着srs服务已经部署完毕了 配置Flexus云服务器X实例安全组
经过上面部署srs服务,这时候服务是已经部署完毕了,但是我们还没法通过外网进行访问,还需要对Flexus云服务器X安全组的配置进行修改
进入安全组的配置页面
新建安全组
这里我们开放1985,1935,8080,8088,1990,8000,这些端口,其中8000一定是自定义udp协议,其他都是tcp,这点非常重要
然后加入新建的安全组
这样我们的实例的端口也就开放成功了
srs功能测试
srs服务器监控
部署完毕srs后,开始对srs进行功能测试
输入网址进行访问,https://ip:8088
点击SRS控制台,连接srs
服务器ip填弹性公网ip,然后端口填1990,点击连接到SRS,就可以看到服务器的运行状态与srs的运行状态,以及负载网速cpu磁盘等各种信息
webrtc推拉流测试
输入网址https://ossrs.net/srs.release/releases/app.html
,选择实用工具中的webrtc播放器
推流配置,把端口改为1990,这是https的端口,然后再把地址复制到播流那边,就可以看到摄像头的画面了
推流上去
拉流直播
这里我测了苹果手机去商店下载谷歌浏览器后,谷歌浏览器也可是可以播放的
rtmp推流
rtmp推流,我一般是使用ffmpeg,指令为ffmpeg -re -i test.mp4 -vcodec h264 -c copy -f flv rtmp://弹性公网ip:1935/live/live200
,然后同样的可以用rtc播放器播放,这就是rtmp转webrtc的效果SRS性能优化
对srs的优化,因为webrtc是使用的udp缓存,因此linux的udp缓存参数得增大,不然会因为本地udp缓存不够大,连本地上传的缓存都不够,导致掉帧。# vi /etc/sysctl.confnet.core.rmem_max=16777216net.core.rmem_default=16777216net.core.wmem_max=16777216net.core.wmem_default=16777216