基础知识
流媒体协议
进阶
RTMP流媒体服务器搭建+ 推拉流实践
服务器搭建
Nginx服务器搭建
Nginx安装
- 在终端执行以下命令,来安装Nginx服务
# 抓取最新安装路径
brew tap denji/homebrew-nginx
brew install nginx-full --with-rtmp-module
- 在终端执行nginx,启动Nginx服务
nginx
接下来在浏览器中输入http://localhost:8080/,出现以下信息即表示服务器启动成功
Nginx服务器配置
接下来,需要配置Nginx来支持HLS和RTMP推流
前往文件夹/usr/local/etc/nginx/nginx.conf,使用文本编辑器打开,在文件的末尾处添加以下配置。
rtmp {
server {
listen 1935;#端口号
application live1 {#live1 随便起,后面的拉流的时候保持一致即可
live on;
record off;
}
application hls {
live on;
hls on;
hls_path /usr/local/var/www/hls;#视频流存放地址,在推流过程中产生的ts和m3u8文件都会在此路径中生成
hls_fragment 5s; #设置HLS分片的长度的。默认是5秒
}
}
}
关于rtmp模块的更多配置和属性,可以查看官方文档github.com/arut/nginx-…
配置完成后,在终端执行以下命令:
# 保存文件后,重新加载nginx的配置文件
nginx -s reload
SRS服务器搭建
SRS服务器安装
在终端执行以下命令,安装srs服务
git clone https://gitee.com/winlinvip/srs.oschina.git
进入srs/trunk文件夹,编译srs
./configure && make
SRS服务器配置
在文件/srs/trunk/conf/.rtmp.conf中已经有默认的配置。
关于rtmp模块的更多配置和属性,可以查看官方文github.com/ossrs/srs/w…
启动SRS服务器
./objs/srs -c conf/rtmp.conf
以上两种服务器都可以支持本地的推拉流实现
FFmpeg + OBS推流
FFmpeg推流
这里是使用ffmpeg来进行推流
首先安装ffmepg
brew install ffmpeg
接下来就可以准备推流,在终端执行以下命令:
ffmpeg -re -i /Users/tongxing/Movies/wwdc2022-10128_sd.mp4 -vcodec copy -f flv rtmp://localhost:1935/hls/room
这里rtmp://``localhost:1935/hls/room中的hls就是上面配置的application后面的路径名称,后面的room可以随便写
可以看到,终端已经在开始对mp4文件进行分片处理
这个时候打开/usr/local/var/www/hls路径就可以看到,文件夹里面的ts片段和m3u8文件是在实时更新的。
这个时候就可以拿到 rtmp:// **localhost:1935/hls/room**这个链接来进行播放了。
OBS 文件推流
如果不擅长使用ffmpeg的命令方式,也可以使用客户端来进行操作,推荐使⽤主流的OBS开源推流软件,可从官⽹obsproject.com/ 下载最新版本,⽬前很多⽹络主播都是⽤它做直播。该软件⽀持本地视频⽂件以及摄像头推流。
- 首先添加媒体源
- 然后随便取一个名称
- 点击确定,选择一个本地文件
- 接下来是关键的部分,点击设置,进入下面的设置界面:
- 在直播->服务器这⾥,输⼊srs的地址:rtmp://xxx.xxx.xxx.xxx:1935/hls (注意这⾥不要带room,另外将localhost替换成本地的ip地址), 然后在串流密钥这⾥,才是输⼊room
设置好以后,就可以点击“开始直播”了。如果顺利,下⾯的状态栏,会显示⼀些实时数据:
这个时候也可以使用拉流播放器来进行播放了。
OBS 摄像头推流
- 跟上⾯的其实差不多,区别只是添加“视频捕捉设备”
- 选择摄像头设备,这里我使用的是mac,所以使用了usb连接的手机摄像头
后面的步骤和文件推流的第四步和第五步一样,设置服务器推流地址,开始直播。
客户端拉流实现
Mac上VLC进行拉流播放
为了判断是否真的推流成功,下载一个 VLC 工具,进行拉流地址的播放。
双击播放地址,即可看到,视频正在播放,同时m3u8文件一直在更新。
视频:
暂时无法在飞书文档外展示此内容
Gif图:
Mac终端ffplay拉流
ffplay rtmp://localhost:1935/hls/room
iPhone 设备上进行拉流播放
这里使用的是ijkplayer播放器来进行播放的。文件末尾附上Demo。
修改demo中的某个m3u8播放地址。我这里修改的是:IJKDemoSampleViewController示例中的播放地址:
这里播放播放地址,需要将**localhost** 换成你的 Mac 机器的网络IP地址: x.x.x.x:1935
可以看到双端是可以在同时进行内容同步播放。
视频:
暂时无法在飞书文档外展示此内容
gif图: