3.3.1 Record
通过Record选项,我们可以实现对直播流的录制与停止功能。这完全取决于我们在record中设置的参数。
示例
我们先来看一个最简单的配置实现录制
application mylive{
live on;
hls on;
hls_path /usr/local/m3u8File;
hls_fragment 2s;
hls_playlist_length 16s;
recorder myRecord {
record all manual;
record_suffix _.flv;
record_path /tmp/rec;
}
}
首先手动去创建一个目录 mkdir /tmp/rec,再执行ffmpeg推流命令,再去请求开启录制的url。
ffmpeg -i /tmp/nh.mp4 -c:v libx264 -c:a aac -f flv rtmp://172.26.22.30:1935/mylive/77
#ffmpeg推流
http://172.26.22.30/control/record/start?app=mylive&name=77&rec=myRecord
#开启录制url
执行后页面返回/tmp/rec/77_.flv。但是我们到tmp/rec目录下并没发现有录制的文件存在。这里通常是因为文件夹访问权限授予的不够高,无法在rec目录创建及写入,我们通过chmod -R 777 /tmp对目录进行授权,-R是递归子目录,777是最高权限,因为tmp目录我们未来会放很多东西所以把它全部授权了,然后再执行录制命令,成功录制文件,如图3-4。
图3-4
如何停止录制呢?很简单。替换url中start为stop即可。
常用配置
rtmp_stat
流数据统计模块,通过在HTTP下配置可以通过url实时监控流媒体各种状态
示例:
#http://ip:post/liveStat
location /liveStat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /download/NRM/;
}
record
record配置中最基础的功能,来设定录制媒体选项 命令选项 [off|all|audio|video|keyframes|manual] off:关闭录制 all:录制音频与食品 audio:仅录制音频 video:仅录制食品 keyframes:仅记录关键帧 manual:手动开启和关闭录制(默认自动录制)
示例:
record all manual #手动控制,记录音视频
record audio #自动控制,记录音频
record_path
设置录制文件的输出路径
示例:
record_path /xx/x/
record_suffix
设置录制文件输出的文件名 nginx-rtmp-module会在{1}的位置自动替换为StreamKey,因此我们可以设置个性的文件名格式规范(支持strftime函数)。
示例:
record_suffix {1}.flv
record_unique
将当前时间戳附加到已记录的文件。否则,每次新记录发生时,将重写相同的文件。默认是关闭的。 输出格式为{StreamKey}-{long time} 例:77-1517192930.flv
示例:
record_unique on
record_append
将新数据追加到旧文件中,或者当它丢失时创建它。旧数据和文件中的新数据之间没有时间差。默认是关闭的。 因此append与unique、suffix配置是有所冲突的,因为unique与使用了strftime函数的suffix总会产生一个不同的文件名,因此append追加也就没有意义了。
示例:
record_append on
record_max_size
最大录制文件大小,当达到大小限制后,文件将会清空并写入后续数据,确保不会超过设置的数值。
示例:
record_max_size 5000K