centos 搭建SRS 流媒体服务

96
小龙123
2019.04.25 18:04* 字数 963

服务器前期准备

  • 系统要求
    操作系统 centos7.0以上64位
  • 生成软件包信息缓存
yum makecache
  • 安装更新
yum update -y
  • 安装必要软件
yum install -y zip  unzip  wget curl git vim zsh nano screen
  • 安装 oh my zsh (有助于不全和选择目录)
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

下载安装

  • 将 srs 安装到目录 /usr cd /usr
  • 下载软件包并进入目录 trunk
git clone https://github.com/ossrs/srs && cd srs/trunk
  • 编译
./configure  && make

启动 srs

./objs/srs -c conf/srs.conf

开放端口

  • 以下端口不在开放端口行列,则需要开放
  8080
  1935

3:生成 /etc/sysconfig/iptables

iptables -P INPUT ACCEPT

4:执行开放端口命令

/sbin/iptables -I INPUT -p tcp --dport 1935 -j ACCEPT

5:保存

iptables-save > /etc/sysconfig/iptables

srs 最好每隔一段时间重启一次,我写了计划任务是每周二,周五7点重启
crontab 定时任务资料

conntab -e
* 7 * * 2,5  cd /usr/srs/trunk  && ./etc/init.d/srs restart  > /dev/null 2>&1

github-srs指令链接

指令一定要切换到 /usr/srs/trunk 目录下,才能执行.

./etc/init.d/srs {start|stop|status|restart|reload} 开始,停止,状态,重启,重置

在重启之后,最好执行 ./etc/init.d/srs status,如果显示 SRS(pid 14203) is running. 则表示启动成功,而不要只仅仅靠 ps -ef |grep srs 来判断服务是否开启

查看进程使用情况 htop指令

  • 查看centos 版本
cat /etc/redhat-release  // 执行后看到使用的是 7.5.1804
  • 安装
# CentOS6
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
yum install htop -y

# CentOS7
yum install epel-release -y
yum install htop -y
  • 使用

直接执行 htop 即可

流媒体配置文件

流媒体推送是首先生成一个多少秒(hls_fragment)的文件包,这个文件包成为一个切片,然后推送出去。这个包越小,越会较少网络的性能,也就越容易推送。当一个流推送出去后,我们就可以把他删除,不然会生成太多的切片文件,耗费服务器性能。(hls_window)参数就是指,当前时间多少秒以前的数据文件都要删除。
hls_path 是指流媒体文件生成后存放的文件夹地址

配置文件地址 /usr/srs/trunk/conf/http.hls.conf

vhost __defaultVhost__ {
    hls {
        enabled         on;
        hls_fragment    3; // 切片时间段,3秒种一段(一段文件就是三秒中的播放长度),段越小,越流畅,但数据会产生的更多.但是网络也是有延迟的,我个人尝试,感觉这个是配置 5  hls_window 配置 25 会比较好
        hls_window      9; // 缓存总长度(最多缓存多长时间)
        hls_path        ./objs/nginx/html;
        hls_m3u8_file   [app]/[stream].m3u8;
        hls_ts_file     [app]/[stream]-[seq].ts;
    }
    forward 43.226.124.121:1935;
}
  • 参数理解
1. hls_fragment
 the hls fragment in seconds, the duration of a piece of ts.
 指定ts切片的最小长度。 比如 demo 就是 3s,但实际值可能是大于3s的

2.hls_window:秒,指定HLS窗口大小,即m3u8中ts文件的时长之和,超过总时长后,丢弃第一个m3u8中的第一个切片,直到ts的总时长在这个配置项范围之内。即SRS保证下面的公式: hls_window >= sum(m3u8中每个ts的时长)
# the hls window in seconds, the number of ts in m3u8.

3.hls_path: HLS的m3u8和ts文件保存的路径。SRS会自动加上app和stream名称。比如

    对于RTMP流:rtmp://localhost/live/livestream
    HLS配置路径:hls_path        /data/nginx/html;
    那么会生成以下文件:
    /data/nginx/html/live/livestream.m3u8
    /data/nginx/html/live/livestream-0.ts
    /data/nginx/html/live/livestream-1.ts
    /data/nginx/html/live/livestream-2.ts
    最后的HLS地址为:http://localhost/live/livestream.m3u8

4.hls_m3u8_file: HLS的m3u8文件名

5.hls_ts_file: HLS的ts文件名

HLS Introduction

HLS是提供一个m3u8地址,Apple的Safari浏览器直接就能打开m3u8地址,譬如:

http://demo.srs.com/live/livestream.m3u8

Android不能直接打开,需要使用html5的video标签,然后在浏览器中打开这个页面即可,譬如:

<!-- livestream.html -->
<video width="640" height="360"
        autoplay controls autobuffer 
        src="http://demo.srs.com/live/livestream.m3u8"
        type="application/vnd.apple.mpegurl">
</video>

HLS的m3u8,是一个ts的列表,也就是告诉浏览器可以播放这些ts文件,譬如:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:64
#EXT-X-TARGETDURATION:12
#EXTINF:11.550
livestream-64.ts
#EXTINF:5.250
livestream-65.ts
#EXTINF:7.700
livestream-66.ts
#EXTINF:6.850
livestream-67.ts

推流到指定的服务器

 forward 43.226.124.121:1935; // 端口并不是一定药使用1935,也可以使用其他端口,服务器是其他搭建流媒体的服务器
 这个地址是技能接收流,又能推送流。推送并不是说主动推送的情况,而是说访问这个端口可以得到数据
 如果药推送到多个服务器,直接再 ip 后面留个空格,继续写即可。
 demo forward  192.168.1.6:1935 192.168.1.6:1936 192.168.1.7:1935 192.168.1.7:1936;

软件直播推流

必备软件

OBS Studio: 直播软件
VLC media player,可以播放任何格式的视频

OBS Studio 的使用

OBS-Studio版本的使用教程

在播放期间, 的设置是不能改变的,必须先停止播放。
服务器地址流密匙 是在个人中心的直播页面生成的

  • 手机端的直接在手机上做直播即可

视频居中处理

选中视频,点击右键,选择 交换(T)-> 比例适配屏幕(F)

来源

VLC视频源 - 这个可以选择一个文件夹,但是 媒体源是只可以选择一个文件的

流数据的填写 (值来自于直播页面中,登录账号后,进入我的直播)

服务:选择自定义
服务器:FMSURL 的值
串流密钥: Flow mark 的值

我的直播页面数据

FMSURL: rtmp://43.226.124.134:1935/live   流->服务器的地址
Flow mark: 25791_1558006219               流->流密钥的地址

当直播开始后,我的直播页面不要刷新,否则密钥流地址会变化,导致视频播放失败

一切准备就绪后,1.在我的视频页面点击 OBS直播,会提示直播成功。这个页面不能关闭,否则会导致流密钥无效;
2.OBS软件点击 开始推流


检查网速

  • 安装 speedtest
$ cd /usr/tmp   
$ wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
$ chmod a+rx speedtest.py
$ mv speedtest.py /usr/local/bin/speedtest
$ chown root:root /usr/local/bin/speedtest
  • 执行命令检查网速
$ speedtest

查看网络使用情况 -- iftop 指令

  • 安装 iftop
 yum -y install iftop 
  • 使用
iftop
LINUX
Gupao