流媒体服务器搭建–基于SRS
因为需要搭建监控 dashboard 需要能够直播的摄像头的流媒体服务。
在测试了 Node-Media-Server 和 SRS 之后,由于 NMS 存在一段时间后睡死的问题。所以选用了 SRS ,它的源码在这里。
Linux的一些配置
如果是直接使用Linux服务器的话就跳过这一步。
我这边是使用了虚拟机,需要为 CentOS 设置网络
桥接模式
这边虚拟机我用的是 VM
打开桥接模式
随后在 VM 的编辑栏上选择 虚拟网络编辑器 点击更改设置,进入如下界面
桥接模式中选择宿主机正在使用的网卡。
配置 CentOS 网卡文件
CentOS 通常网卡是默认关闭的,需要手动修改网卡配置文件
- 配置网络信息
网卡脚本一般位于 /etc/sysconfig/network-scripts/ 和
使用 Vi 打开并进行修改( Vi 的操作具体详见 菜鸟教程 )
修改如下
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static --由 dchp 动态模式改成静态模式 static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=77f084da-b285-4dac-91aa-79f066fd4512
DEVICE=ens33
ONBOOT=yes -- 打开网卡 no 改成yes
IPADDR=10.203.22.10 --配置 ip 这个ip你要试着用主机 ping 一下,别和其他电脑重了
NETMASK=255.255.255.0 --固定配置
GATWAY=10.203.22.254 --固定配置
DNS=10.203.1.5 --主机一样即可
- 添加网关地址
vi /etc/sysconfig/network
内容如下:
NETWORKING=yes
HOSTNAME=xxxx #名字随便了
GATEWAY=192.168.1.1 #默认网关和宿主机相同
- 添加 DNS 服务器
vi /etc/resolv.conf
内容如下:
# Generated by NetworkManager
nameserver 192.168.0.1 #DNS,跟宿主一样
重启网卡
service network restart
安装服务器
该服务通常运行在Linux系统,系统的偏好是由于 SRS 采用了 state-threads 的原因。
作者放出了 CentOS 、Ubuntu 、 Raspberry Pi 等系统下编译的安装包。
本人直接下载了官网上的安装包,也可以直接从 GitHub 上对源代码进行编译。由于我直接使用了作者推荐的系统就直接下载安装包了。
CentOS 自带了解压缩的工具。
cd 到对应的目录,默认解压到当前文件夹
unzip file_name.zip
服务器的安装很方便,在当前文件夹中运行 INSTALL 脚本
sudo ./INSTALL
我在安装完之后被提示了错误,要求再安装一个 redhat-lsb 。
yum install -y redhat-lsb
完成之后应该就会提示安装成功了。
卸载的代码如下,其实就是删除对应路径下的软件文件
sudo rm -rf /usr/local/srs
sudo rm -rf /etc/init.d/srs
启动服务
SRS 提供了多种模式的启动配置文件。
默认的 SRS 服务器启动方案是
sudo /etc/init.d/srs start
关闭服务器就是对应的 stop
sudo /etc/init.d/srs stop
推流
推流这边选择了常见的 FFmpeg 。该软件具备丰富的推流、转码等功能。能够实现本地桌面、摄像头、mic、音视频文件等的直播推流需求。
如果进行推流的不是本机(我就是用我自己的电脑往这台服务器上推流)的话,CentOS需要关闭防火墙。
systemctl stop firewalld.service 关闭防火墙
systemctl disable firewalld.service 关闭开机启动
不嫌麻烦的话还可以使用 iptables 来管理 CentOS (注意要开放对应流媒体服务器的端口,通常都是 1935 和 8000 两个端口。
安装 FFmpeg
CentOS 下安装 FFmpeg 还是太费劲了,不如 Windows 下连安装都不需要,直接在可执行文件 exe 下面就可以使用命令行。
网上提供了源代码编译的方法,看了一下老费劲了。
最后还是推荐直接使用第三方的软件仓库。方便快捷,又对应版本。
首先切换到 root 用户,安装 epel源(为红帽系列系统提供第三方软件的项目)。
yum install epel-release
更新源
rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
然后下载安装
yum install ffmpeg ffmpeg-devel
FFmpeg 推流
FFmpeg命令:几种常见场景下的FFmpeg命令(摄像头采集推流,桌面屏幕录制推流、转流,拉流等等)
我这边测试了从 pc 推本地桌面的命令(这边的 Server_IP 指代本机 IP 地址。后面的路径 live/livestream 好像是配置文件的时候定的)
ffmpeg -f gdigrab -i dektop -vcodec libx264 -preset:v ultrafast -tune :zerolatency -max_delay 50 -g -b 7000000 -f flv rtmp://Server_IP/live/livestream
出现了推流的数据之后基本上就代表推流成功了