服务器前期准备
- 系统要求
操作系统 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点重启。但是注意,如果你使用的是 hls 模式,则需要手动重启
crontab 定时任务资料
conntab -e
* 7 * * 2,5 cd /usr/srs/trunk && ./etc/init.d/srs restart > /dev/null 2>&1
手动重启
- 1.检查 srs 对应的端口 并关闭
ps -ef|grep srs
- 2.关闭 srs 端口
kill -9 端口号
- 3.进入srs 项目根目录
cd /usr/srs/trunk
- 重启srs 服务
./objs/srs -c ./conf/http.hls.conf
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 即可
流媒体配置文件
配置对应的 github 地址 https://github.com/ossrs/srs/wiki/v1_CN_DeliveryHLS
个人理解
流媒体推送是首先生成一个多少秒(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 1.1.1.1: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 1.1.1.1: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 的使用
在播放期间,
流
的设置是不能改变的,必须先停止播放。
服务器地址 和 流密匙 是在个人中心的直播页面生成的
- 手机端的直接在手机上做直播即可
视频居中处理
选中视频,点击右键,选择 交换(T)
-> 比例适配屏幕(F)
来源
VLC视频源 - 这个可以选择一个文件夹,但是 媒体源是只可以选择一个文件的
流数据的填写 (值来自于直播页面中,登录账号后,进入我的直播)
服务:选择自定义
服务器:FMSURL 的值
串流密钥: Flow mark 的值
我的直播页面数据
FMSURL: rtmp://1.1.1.1: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
推流和拉流
推 1.1.1.1:1935
拉 http://1.1.1.1:8080
播放地址 http://x.x.x.x:8080/sdf/yyyyy.m3u8
推流地址 http://x.x.x.x:1935/sdf/yyyyy
或者 rtmp://x.x.x.x:1935/sdf/yyyyy
yyyyy 就相当于具体某个视频 保持一致 就可以看到视频
推流用1935端口,看视频用8080