搭建内网的直播系统
|Word Count:767|Reading Time:3mins|Post Views:
背景
前述,我们实现了使用VLC来搭建局域网内的串流播放服务器,但在交付测试后发现对高分视频支持不佳、画面会出现破碎、延迟较高等问题。后来,经过对比Easydarwin、Red5、simple-rtmp-server等多个服务,选择使用SRS这个国产开源流媒体系统来搭建自己的内网直播系统。
部署
SRS是一个简单高效的实时视频服务器,支持支持RTMP/WebRTC/HLS/HTTP-FLV/SRT。同时,它也自带了网页播放器srs-player。
我们主要使用右上角的功能,即从视频源走RTMP协议推流到SRS Server,然后客户端通过RTMP、HTTP-FLV拉取视频流。
服务搭建
容器部署
1 2 3 4 5
| # 开放端口 firewall-cmd --permanent --add-port={8080/tcp,1935/tcp,1985/tcp} firewall-cmd --reload # 部署docker服务 docker run -itd --restart=always -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/docker.conf
|
标准部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 默认支持centos7 # 开放端口 firewall-cmd --permanent --add-port={8080/tcp,1935/tcp,1985/tcp} firewall-cmd --reload # 拉取源码 yum install -y gcc gcc-c++ make automake m4 patch cd /opt git clone -b 4.0release https://gitee.com/ossrs/srs.git # 编译安装 cd srs/trunk ./configure && make && make install # 配置启动脚本 ln -sf /usr/local/srs/etc/init.d/srs /etc/init.d/srs && cp -f /usr/local/srs/usr/lib/systemd/system/srs.service /usr/lib/systemd/system/srs.service && systemctl daemon-reload && systemctl enable --now srs
|
管理后台
- 使用浏览器访问服务器8080端口
- 管理后台
- 网页播放
推流
安装OBS
OBS官网下载OBS,过程略
对接服务
1 2
| 推流地址:rtmp://192.168.79.13/live 默认秘钥:1
|
进阶使用
应用
配置客户端
1 2 3 4 5
| # 安装FFMPEG,后续需要使用ffplayer包含在此包中 dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm dnf install -y https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm dnf makecache dnf install -y ffmpeg
|
添加Ansible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| # 控制端安装Ansible cd dnf install -y ansible cp /etc/ansible/ansible.cfg ./ cat > ansible.cfg <<EOF [defaults] inventory = ./.inventory forks = 50 poll_interval = 15 transport = smart remote_port = 22 timeout = 10 log_path = ./ansible.log executable = /bin/bash deprecation_warnings = False
[privilege_escalation] become=False become_method=sudo become_user=sujx become_ask_pass=False
[paramiko_connection] host_key_auto_add = True EOF
cat > .inventory <<EOF [ffplay] 192.168.79.200 192.168.79.203 EOF
# 实现免密登录 ssh-keygen ssh-copy-id sujx@192.168.79.203 ssh-copy-id sujx@192.168.79.200
|
实现控制
1 2 3 4 5 6
| # 开启远程主机Firefox # Firefox默认不支持命令实现全屏,需要添加参数指定firefox在本地启动 ansible ffplay -a 'firefox --display=:0 https://www.sujx.net' # 远程开启视频流播放 # 默认开启全屏 ansible ffplay -a 'ffplay -fs -fflags nobuffer rtmp://192.168.79.13/live/1'
|
其他
已实现需求
- 局域网广播视频、音频;
- 批量同时拉起多台主机进行视频播放;
- 批量关闭播放视频并恢复原先进程;
未实现功能
- OBS的使用需要进行学习和操作练习;
- 客户端管理需要配置Ansible,即便将命令制作别名简化操作,也还要多个步骤完成;
- 定时运行可部分解决问题,但灵活性不足。