Windows系统下ffmpeg+nginx搭建HLS服务器
1. 准备软件
nginx下载
ffmpeg下载
解压ffmpeg软件后,打开cmd,进入ffmpeg的bin文件目录,用ffmpeg -version
测试是否正确安装。
2. 服务器搭建
2.1. 使用ffmpeg对MP4文件进行点播切片
ffmpeg -i source.mp4 -codec:v libx264 -codec:a mp3 -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_time 10 out%03d.ts
上述指令用的ffmpeg的segment模块来进行对source.mp4文件进行切片,segment_format用来指定输出格式为mpegts,segment_list用来配置输出的列表文件名,segment_time则是切片的时长,更多的参数请参考ffmpeg的官方使用文档,或查看libavformat/segment.c
源文件。切片完成后,可以看到N个的outXXX.ts(其中XXX为数字,根据视频的大小,会有不同的数量),ffmpeg会根据out%03d,自动计算生成的文件名称格式。
2.2. 使用ffmpeg对MP4文件进行直播切片
ffmpeg -re -i source.mp4 -codec:v libx264 -codec:a mp3 -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_list_flags +live -segment_list_size 6 -segment_time 10 out%03d.ts
与点播的区别就是加了-segment_list_flags +live以示直播,并且加上了-re参数(该参数表示ffmpeg将会按照source.mp4的播放速率进行转码)。segment_list_size参数将列表数量控制在6个。ssegment模块有个缺点,虽然可以通过以上方式达到直播,但是生成的TS文件并不会循环,会一直被保留(当然如果要顺带将内容录制下来,这反倒是一个优点,只能说其实现的还是切片的功能,并非纯粹的直播)。使用HLS模块就可以更好的胜任直播功能,HLS模块实现于libavformat/hlsenc.c libavformat/hls.c
以及 libavformat/hlsproto.c
。使用HLS模块进行视频文件切片的指令如下:
ffmpeg -re -i source.mp4 -codec:v libx264 -codec:a libfaac -map 0 -f hls -hls_list_size 6 -hls_wrap 10 -hls_time 10 playlist.m3u8
hls_list_size即为HLS播放的列表,hls_wrap则表示为最大的TS循环数,也就是每10个一个循环,比如现在是生成playlist0.ts ~ playlist9.ts,10个文件,之后又会从playlist0.ts重新生成。
2.3. 搭建nginx服务器
解压nginx软件后,双击nginx.exe,注意路径中不能有中文,80端口不被占用。将ffmpeg生成的ts片段和playlist.m3u8文件放在html目录下。进入html目录点击index.html文件打开nginx服务,浏览器中显示如下信息,则表示nginx服务器启动成功。
3. 测试
搭建好nginx服务器后,可以使用VLC进行播放验证。
3.1. 打开VLC软件,选择 “媒体 - 打开网络串流” 选项
3.2. 填入串流地址,点击 “播放” 按钮
输入
http://your_ip:your_port/your_playlistname.m3u8
,如下图所示,ip
地址为192.168.98.61
,端口号为80
,播放列表为playlist.m3u8
,则串流地址为http://192.168.98.61:80/playlist.m3u8
。图 3.2
参考链接
使用FFmpeg生成HLS
Windows系统下ffmpeg+nginx+Vitamio搭建HLS服务器+Android客户端方法