▪ 环境
系统:阿里云 CentOS 7
后台:nginx nginx-rtmp-module
推流软件:OBS(将视频流推送到服务器)
播放软件:VLC Media Player(支持 rtmp 协议,http 协议播放)
▪ 软件安装
1. nginx 的安装文章:《CentOS 7 之源码编译安装 Nginx 1.13》
2. nginx-rtmp-module 的安装参考文章:《Nginx 之增加扩展模块 nginx-rtmp-module》
3. OBS 和 VLC Media Player 的安装自行百度
▪ 服务器端视频文件播放(RTMP协议)
场景:视频文件已经存放到服务器端,利用 nginx-rtmp 提供 rtmp 协议的播放方式
1. 配置
编辑 Nginx 的配置文件:
vim /usr/local/nginx/conf/nginx.conf
在配置文件的最底部增加 rtmp 配置:
# RTMP服务
rtmp{
server{
listen 1935; # 服务端口
chunk_size 4096; # 数据传输块的大小
# 视频文件播放
application vod {
play /data/httpd/htdocs/rtmp/video; # 视频文件存放位置
}
# 直播
application live{
live on;
}
}
}
注1:需要在阿里云安全组开发 1935 端口
注2:新建 /data/httpd/htdocs/rtmp/video 目录用于存放视频文件
配置完成后重启 Nginx 服务。
2. 播放测试
上传一个视频文件 myvod.flv 到 /data/httpd/htdocs/rtmp/video 目录下。
自行去百度下载一个flv文件,并命名为myvod.flv(名字没有固定,可以随意)
打开 VLC media player 软件,在 “媒体->打开网络串流”,在 URL 一览中填入:rtmp://[ip]:1935/vod/myvod.flv,点击播放
播放 mp4 视频时可以拖动,不过好像会先全部下载文件
播放 flv 视频时不可拖动,需要使用其它工具插入关键帧,生成性的flv
▪ 利用 OBS 实现简单的推流直播(RTMP)
场景:利用 OBS 将客户终端的视频或者摄像头视频推流到服务器,同时在另外客户终端用 VLC media player 播放推流过来的视频内容( 采用 rtmp 协议播放)
1. 配置
基于上面 “▪ 服务器端视频文件播放(RTMP协议)” 的配置内容,我们新增一个 Nginx 虚拟主机配置
server {
listen 80;
server_name [xxx.xxxx.com];
# Nginx Rtmp 监控
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
# nginx-rtmp-module path
root /usr/local/nginx-rtmp-module/;
}
}
重启 Nginx 服务器,至此,我们得到了以下几个链接地址:
推流地址:rtmp://[xxx.xxxx.com]:1935/live/[xxxxx]
播放地址:rtmp://[xxx.xxxx.com]:1935/live/[xxxxx]
推流监控:http://[xxx.xxxx.com]/stat
推流地址主要用于直播客户或摄像头等终端将本地的视频流推到服务器
播放地址主要用于访客播放视频,由于使用了 rtmp 协议直接播放,一般的暴风影音等还无法播放,可以使用本文章最开始介绍的 VLC Media Player 进行播放
推流监控地址是 nginx-rtmp-module 自带的监控页面,可以监控推流情况等数据
2. 利用 OBS 和推流地址进行推流
“点击推流” 以后,如果软件没有弹出错误即说明了推流正常,当然我们也可以访问:http://[xxx.xxxx.com]/stat 查看推流是否正常
2. 利用 VLC 播放OBS推流过来的视频
点击播放即可。
至此,基于 rtmp 协议的简单直播就完成了。当然推流和观看都是基于专业的软件。这对一般的客户基本上没有什么可操作性和观看性。接下来我们将继续深入。
▪ 实现浏览器播放直播内容
场景:基于上面 “▪ 利用 OBS 实现简单的推流直播(RTMP)” 的配置和使用,我们发现对于观看的客户来说是非常不友好的,因为他们无法使用 VLC 之类专业的软件来播放 rtmp 协议的视频。基于此,我们就像进行改造,实现利用浏览器播放 rtmp 协议
1. 配置回放模式
修改 rtmp 配置,增加 HLS 功能:
# RTMP服务
rtmp{
server{
listen 1935; # 服务端口
chunk_size 4096; # 数据传输块的大小
# 视频文件播放
application vod {
play /data/httpd/htdocs/rtmp/video; # 视频文件存放位置
}
# 直播
application live{
live on;
allow play all;
hls on; # 这个参数把直播服务器改造成实时回放服务器
hls_path /data/httpd/htdocs/rtmp/live; # 切片视频文件(.ts, .m3u8)存放位置
hls_fragment 5s; # 每个视频切片的时长
hls_playlist_length 10s; # 总共可以回看的事件,这里设置的是1分钟
hls_continuous on; # 连续模式
hls_cleanup on; # 对多余的切片进行删除
hls_nested on; # 嵌套模式(启用后,系统能自动根据串流密钥创建独立的文件夹存放切片视频文件)
}
}
}
注意:务必设置 /data/httpd/htdocs/rtmp 目录的权限和 Nginx 服务器一样,否则视频文件会无法创建
重启 Nginx 服务器,然后按照上面 “▪ 利用 OBS 实现简单的推流直播(RTMP)” 中介绍的,利用 OBS 推送视频流到服务器。
此时我们再进入服务器,可以看到在 /data/httpd/htdocs/rtmp/live 下面多出一下 myvod 文件目录,里面有了一个 index.m3u8 文件和多个 .ts 文件
myvod 是自由定义的一个串流秘钥,Nginx rmtp 服务会根据配置自动创建目录或者文件