背景

前述,我们实现了使用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

管理后台

  1. 使用浏览器访问服务器8080端口
    console
  2. 管理后台
    admin
  3. 网页播放
    HTML5-Player

推流

安装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'

其他

已实现需求

  1. 局域网广播视频、音频;
  2. 批量同时拉起多台主机进行视频播放;
  3. 批量关闭播放视频并恢复原先进程;

未实现功能

  1. OBS的使用需要进行学习和操作练习;
  2. 客户端管理需要配置Ansible,即便将命令制作别名简化操作,也还要多个步骤完成;
  3. 定时运行可部分解决问题,但灵活性不足。