原因:为了了解ffmpeg内部有关rtmp与hls的实现流程,故在此使用nginx搭建一个服务器用于进行数据转发,实现点播与直播功能。
概述:系统win64,首先安装nginx进行配置,通过ffmpeg进行rtmp推流以及ffplay进行播放,同理hls通过通过ffmpeg进行推流与ffplay实现播放
简单命令行如下:下面命令讲述了如何利用FFmpeg生成m3u8与ts文件,以及如何使用FFmpeg和FFplay进行rtmp推流和拉流.
RTMP直播:
推流:ffmpeg.exe -re -i q.wmv -f flv rtmp://192.168.27.161/live/1
拉流:ffplay.exe -i rtmp://192.168.27.161/live/1
RTMP点播:
拉流:ffplay -i rtmp://192.168.27.161/demand/q.flv
FFmpeg生成ts与m3u8文件:
FFmpeg.exe -i q.flv -vcodec libx264 -acodec copy -vbsf h264_mp4toannexb -map 0 -f segment -segment_format mpegts -segment_list “q.m3U8” -segment_time 10 hls-%03d.ts
播放:ffplay.exe “http://192.168.27.161:8080/hls/q.m3u8”
接下来安装nginx流程与配置
1)下载http://nginx-win.ecsds.eu/download/nginx 1.7.11.3 Gryphon.zip
2)下载https://github.com/arut/nginx-rtmp-module/releases 选择1.2.0zip
将nginx-rtmp-moduble文件夹放到nginx1.7.11.3下面,接下来配置nginx-win.conf文件,如果出现错误查看对应的log文件夹下错误日志即可。
start nginx.exe nginx.exe -s stop.
首先在rtmp键值下面添加点播与直播,比如application live对应的属性值live为on,则表明该application为直播模式,而如果需要进行录制则需要扩展recorder属性。application demand点播模式下只需要添加play属性,通过设置play对应的文件路径,则可以将手动生成的文件放到该路径下,即可观看。通过下面的配置可以看出文件路径暂时都配置到了exe当前目录下的video文件夹,直播过程中会将推流的数据存放到video文件夹下,而点播时也是需要拉取video文件夹下文件进行播放,hls模式生成的文件也需要放置到video下。需要注意的是推流使用的是RTMP对应的端口和ip,而由于hls播放使用http拉流,故需要进行http对应的ip与端口。hls的直播简单实现方式为通过FFmpeg进行实时生成m3u8和ts文件到video目录下,远端即可播放对应的m3u8文件。而且ts文件nginx会定期清理。nginx内部具体如何维护暂时不清楚。
rtmp{
server{
listen 1935;#服务端口
chunk_size 4000;#数据块传输大小
application demand{#点播
play video/; #视频文件存放位置
}
application live { #直播
live on;
recorder rec1{
record all;
record_unique on;
record_path video/;
record_suffix -%Y-%m-%d-%H_%M_%S.flv;
}
}
#HLS配置
application hls{#直播
live on;
hls on;
hls_path video/;#切片文件存放位置
hls_fragment 10s;#每个切片时长
}
}
}
http {
location /stat{
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl{
root nginx-rtmp-module/;
}
location /hls{
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias video/;
expires -1;
add_header Cache-Control no-cache;
}
location /control{
rtmp_control all;
}
}
总结:通过nginx服务器搭建,可以简单实现rtmp模式与hls模式推流与拉流,简单模拟直播与点播模式,接下来将根据现有模型针对ffmpeg有关hls流程源代码进行分析。