搭建内网的直播系统
背景
前述,我们实现了使用VLC来搭建局域网内的串流播放服务器,但在交付测试后发现对高分视频支持不佳、画面会出现破碎、延迟较高等问题。后来,经过对比Easydarwin、Red5、simple-rtmp-server等多个服务,选择使用SRS这个国产开源流媒体系统来搭建自己的内网直播系统。
部署
SRS是一个简单高效的实时视频服务器,支持支持RTMP/WebRTC/HLS/HTTP-FLV/SRT。同时,它也自带了网页播放器srs-player。
我们主要使用右上角的功能,即从视频源走RTMP协议推流到SRS Server,然后客户端通过RTMP、HTTP-FLV拉取视频流。
服务搭建
容器部署
# 开放端口
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
标准部署
# 默认支持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,过程略
对接服务
推流地址:rtmp://192.168.79.13/live
默认秘钥:1
进阶使用
应用
配置客户端
# 安装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
# 控制端安装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
实现控制
# 开启远程主机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,即便将命令制作别名简化操作,也还要多个步骤完成;
- 定时运行可部分解决问题,但灵活性不足。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.