环境Linux centos 7.6 + Nginx
1.安装Nginx
这一步就不用多说了吧
我是宝塔用户,这边进入到/www/server/nginx/src目录里面
使用nginx -V查看当前的编译选项。
2.安装Nginx的rtmp拓展
nginx的rtmp拓展包github地址:https://github.com/arut/nginx-rtmp-module,可以使用git clone下拉或者直接下载
我这边直接下载解压放到:/root下。
Nginx安装rtmp拓展:
3.编译
在刚刚-V操作所输出的 ./configure arguents:之后的内容复制
然后在后头添加:
--add-module=/opt/module/nginx-rtmp-module
在前头添加
./configure
如:(我这里有编译云锁的安全模块,可以删除)
./configure --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --add-module=/root/nginx-plugin-master --add-module=/root/nginx-rtmp-module
运行后没有错误的话执行
make -j8 (我这里是8个线程编译,可以根据具体机器的配置选配)
make完成后将系统中原有的nginx用重新编译生成的nginx文件替换,替换后重启nginx使新编译nginx生效
rm -rf /www/server/nginx/sbin/nginx
cp objs/nginx /www/server/nginx/sbin/
service nginx restart
4.配置Nginx的rtmp服务站点
# 在文件底部添加下面内容:
rtmp {
server {
listen 1935; #监听的端口
chunk_size 4000;
application tv_file {
live on; #开启实时
hls on; #开启hls
hls_path /www/hls;
#rtmp推流请求路径,文件存放路径
hls_fragment 5s;
#每个TS文件包含5秒的视频内容
}
}
}
另外切记,此段配置文件需要和http配置块同级,即不能将此段内容放在http{}内,否则无法启动且报错
重启Nginx:
nginx -s reload
开放端口(没防火墙忽略此部)
iptables -I INPUT -p tcp --dport 1938 -j ACCEPT
附属步骤1:使用http-hls流(m3u8)(不需要此功能跳过这步)
首先新建一个站点,在配置文件中添加类似这样的代码:
add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Methods' GET;
location /live {
#error_page 404 =200 /nosign.m3u8;
#可以取消注释上面的代码,稍作修改即可配置默认视频流
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /www/hls/;
}
这段配置文件将前一步生成的m3u8和ts文件以http的形式推送。
可以再添加CDN进行分发,但注意缓存时间需要匹配,否则会出现视频流异常。
附属步骤2:读取http-hls流(m3u8)(不需要此功能跳过这步)
完成上面附属一之后,可以使用如下html代码读取播放此m3u8视频源
<script src="https://www.silverdragon.cn/wp-content/themes/hestia/assets/js/hls.min.js"></script>
<video id="video" class="wrap" controls="" poster="封面图片"></video>
<script>
var url = "你的hls地址";
if(Hls.isSupported()) {
var video = document.getElementById('video');
var hls = new Hls();
hls.loadSource(url);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
}
</script>
5、推拉流测试
推流。下载OBS Studio,官网下载太慢了,其他下载地址:https://pc.qq.com/detail/4/detail_23604.html
安装完成,打开软件,在控件版块点击设置,左边的导航选择流,然后流类型选择自定义流媒体服务器,url输入rtmp://你的IP:1935/tv_file(就是刚刚配置的那个),流名称随便设置一个
在场景里头随便添加个视频或者什么七七八八的
设置完成点击推流。
在服务器就看到m3u8文件的生成,推流成功。(然后挂到后台)
这边强烈建议调整为动态码率或者其他什么的,毕竟自己的服务器带宽小,一不小心就跑满了
6、拉流。测试拉流
下载VLC,官方也是慢的要死,可以普通下载:https://pc.qq.com/detail/9/detail_569.html
安装后打开
url输入rtmp://你的IP:1935/tv_file/流名称(秘钥)或者使用刚刚配置的hls流,输入http://你的域名或IP/live/流名称.m3u8
拉取正常
根据本教程可以做出类似本站https://www.silverdragon.cn/?page_id=2339的功能。
好耶!