2019-9-5lesson

Sep 5, 2019

开始做视频网站前的准备

1
2
3
Nginx 做流量转发
SRS 做直播流服务
Nginx-http-flv-module 作为播放本地视频流服务

自己测试了下SRS 做直播服务单机都感觉非常稳定,所以直播的能力就先交给他了。我找一遍没有找到SRS 能播放本地视频的。使用ffmpeg 倒也能播放,但是却不能拖动前、后播放视频了。

所以果断放弃。使用Nginx-http-flv-module 作为播放本地视频,配置也是超级简单。但是Nginx-http-flv-module 的直播流却不理想,自己感觉不是很好。

也可能是我偷偷搞、学,遗漏了?反正就这么着:SRS 扛起直播大旗、Nginx-http-flv-module 扛起播放视频服务大旗!

SRS 上面也已讲过,商用的话,还缺少一个:鉴权服务。SRS 本身就有鉴权方案,我在之后会多多参考,现在主要还是先搭起播放本地视频的服务。

下面开始Nginx-http-flv-module 的实现流程。

首先说明环境

使用昨天搭建的CentOS7 光溜溜版。只有openssh.

装个nodejs 先:参考

cd /tmp
curl — silent — location https://rpm.nodesource.com/setup_9.x | sudo bash -
yum install -y nodejs

下载Nginx
mkdir /root/downloads cd /root/downloads
wget http://nginx.org/download/nginx-1.17.3.tar.gz
wget https://github.com/winshining/nginx-http-flv-module/archive/v1.2.6.zip
tar -zxvf nginx-1.17.3.tar.gz # 得到文件夹nginx-1.17.3
unzip -o v1.2.6.zip -d nginx-http-flv-module # 得到nginx-http-flv-module

cd nginx-1.17.3
./configure --add-module=/root/downloads/nginx-http-flv-module --with-http_ssl_module --with-http_v2_module # 可能会报pcre、openssl 没有找到。
# 上面同时也把nginx-http-flv-module 第三方包加载成功

yum install -y openssl openssl-devel # 安装openssl
yum install -y pcre pcre-devel # 安装pcre

上面做好了准备, 下面是编译和启动

make && make install # 完成之后会在/usr/local/nginx 生成目录,这里就是nginx操作处
cd /usr/local/nginx
./sbin/nginx -s start -c ./conf/nginx.conf # 启动nginx

检查下nginx 是否正确运行。

下面来设置conf/nginx.conf

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
37
38
39
40
41
42
43
44
45
rtmp {
server {
listen 1935;
chunk_size 4000;
application live {
live on;
record off;

hls on;
hls_path /opt/video/test;
hls_fragment 3s;
hls_playlist_length 32s;

meta on;
gop_cache on;
}
application vod {
play /opt/video/vod;
}
}
}
http {
server {
listen 80;
server_name yourdomain.com;
index index.html index.htm;

location /vod {
alias /opt/vod/;
}
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /opt/video/;
expires -1;
add_header Cache-Control no-cache;
}
location /flv {
flv_live on;
chunked_transfer_encoding on;
}
}
}

上面看的到支持了hls、flv。实现了两个服务:本地播放流媒体和接受推流、被拉流的功能。

推流: ffmpeg -re -stream_loop -1 -i 222.mp4 -c:v libx264 -c:a aac -f flv rtmp://10.221.55.4/live/test

拉流: rtmp://10.211.55.4/live/test

然后砸门往 /opt/video/vod/1.mp4 放了个mp4.

拉流 rtmp://10.211.55.4/vod/1.mp4


当然域名yourdomain.com 可以写进主机hosts 里面,这样就可以真实环境测试了。

比如拉流: rtmp://yourdomain.com/flv?app=live&stream=test

播放MP4: rtmp://yourdomain.com/vod/1.mp4


最后一个: 权限控制

控制播放权限:

on_play http://localhost:9000/onPlay;

on_publish http://localhost:9000/onPublish;

上面这两个会调用本地权限验证,如果返回200则开始播放、返回非200 则失败。

以上完成这次的任务。

nginx-http-flv-module

参考