使用Nginx+nginx-rtmp-module+OBS推流搭建流媒体服务器
一、安装Nginx
- 下载必备安装包
- 创建安装包存放文件夹
cd
mkdir /usr/source #创建源码目录 后面的源码都放在这个目录
cd source
yum -y install git #安装git
git clone https://github.com/nginx/nginx.git #从github服务器上将nginx的源代码下载下来
git clone https://github.com/arut/nginx-rtmp-module.git #将rtmp模块的源码下载下来
当git下载nginx失败时可以去官网下载后放到服务器
nginx的官方网站为:http://nginx.org/en/download.html
下载依赖模块源码pcre、OpenSSL、zlib 如果机器上已经安装了这些模块就不需要了
wget https://www.openssl.org/source/openssl-1.1.0.tar.gz #下载OpenSSL源码包
wget https://ftp.pcre.org/pub/pcre/pcre-8.39.tar.gz #下载pcre源码包
wget http://www.zlib.net/zlib-1.2.11.tar.gz #下载zlib包源码、
- 对压缩包进行解压并安装Nginx
cd /usr/source
tar -zxvf 包名 #解压各个包源码
我这里采用的Nginx版本为nginx-1.9.9 因此我们进入的 cd /usr/source/nginx-1.9.9 进入文件夹后进行./configure操作
./configure --prefix=/usr/local/nginx \ #nginx安装路径
--with-pcre=../pcre-8.39 \ #pcre文件路径
--with-openssl=../openssl-1.1.0 \ #openssl文件路径
--with-zlib=../zlib-1.2.11 \ #zlib文件路径
--with-http_v2_module \
--with-http_flv_module \
--with-http_mp4_module \
--add-module=../nginx-rtmp-module/ #nginx-rtmp-module模块
根据自己源码包的版本填写相应的路径以及文件夹名!!!
./configure完成后就可以进行安装了
为了确保依赖的gcc和c++存在我们可以先执行安装gcc跟c++
yum -y install gcc #确保依赖的gcc安装
yum -y install gcc-c++ #确保依赖的c++已经安装
make && make install
安装完成后需要把服务器的80端口打开 直接输入地址访问 查看Nginx是否安装成功!
当看见这个界面时说明Nginx安装成功了
- rtmp相关配置
新建hls_path文件夹
mkdir -p /usr/share/nginx/html/hls #该路径可以自定义 需要与Nginx内的rtmp配置的hls_path路径一致
修改Nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
加入以下内容rtmp模块:(rtmp{}的内容和http{}为同级)
rtmp {
server {
listen 1935; #监听的端口
chunk_size 4000;
application hls { #rtmp推流请求路径
live on;
hls on;
hls_path /usr/share/nginx/html/hls;
hls_fragment 5s;
}
}
}
修改http中的server模块可以根据自己的需求进行修改{location部分}
server {
listen 80;
server_name localhost;
location / {
add_header Cache-Control no-cache;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
add_header 'Access-Control-Allow-Headers' 'Range';
root /usr/share/nginx/html;
index index.html index.htm;
} #主要修改这一部分代码
location = /50x.html {
root html;
}
}
修改完毕重启Nginx
/usr/local/nginx/sbin/nginx -s reload
接下来是推流了
在设置->串流 中填写信息:URL为 rtmp://xxx:1935/hls,xxx为你的服务器的IP地址,hls是用来存放流媒体的。
秘钥可以随便填写一个,用来播放的时候识别播放哪个流媒体的,例如填写mystream。
填写完毕后,点击开始串流,就说明我们的流媒体服务器搭建成功了。
打开/usr/share/nginx/html/hls,里面出现mystream.m3u8说明推流正常接下来我们就可以拉流播放了
拉流播放我们可以使用H5的vedio标签就可以实现播放
也可以访问http://xxx:81/hls/mystream.m3u8来观看直播
当你在浏览器输入你的播放地址时候你会发现竟然是把mystream.m3u8下载下来!
因为pc不支持m3u8,所以需要使用video.js 地址 https://github.com/videojs/video.js
新建html页面 代码如下
<link href="//vjs.zencdn.net/7.0/video-js.min.css" rel="stylesheet">
<script src="//vjs.zencdn.net/7.0/video.min.js"></script>
<script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
<video
id="my-player"
class="video-js"
controls
preload="auto"
poster="//vjs.zencdn.net/v/oceans.png"
data-setup='{}'>
<source
src="http://ip地址:端口(默认80)/hls/mystream.m3u8"(你的流秘钥)
type="application/x-mpegURL">
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a
web browser that
<a href="http://videojs.com/html5-video-support/" target="_blank">
supports HTML5 video
</a>
</p>
</video>
<script>
var player = videojs('my-player');
var options = {};
var player = videojs('my-player', options, function onPlayerReady() {
videojs.log('Your player is ready!');
// In this context, `this` is the player that was created by Video.js.
this.play();
// How about an event listener?
this.on('ended', function() {
videojs.log('Awww...over so soon?!');
});
});
</script>
保存后放到nginx配置的root目录下即可成功访问并拉流播放了。
直播存在一定的延迟 这是因为.m3u8文件,这个文件内容是将一个个ts文件串联起来的,这就达到了一个播放的效果,所以看起来会有很大的延迟。
延迟解决方案 :可以设置切片生成的大小以及访问的速度,但是这样大大增加了服务器的压力。
当然,我们也可以用rtmp拉流工具(VLC播放器)来观看直播,延迟会缩短,拉流地址与推流地址一致。
特别提示:需要外部访问的端口我们都需要打开 请根据自己的需要将相应的端口打开即可!
rtmp的参数可以参考:https://github.com/arut/nginx-rtmp-module/wiki
上一篇: Spring Bean的获取与实例化
下一篇: MySQL中的C API
推荐阅读