Windows系统下ffmpeg+nginx搭建HLS服务器

  • A+
所属分类:教程下载 服务器

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服务器启动成功。

图 2.3

3. 测试

搭建好nginx服务器后,可以使用VLC进行播放验证。
3.1. 打开VLC软件,选择 “媒体 - 打开网络串流” 选项

图 3.1
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

作者:李莫予
链接:https://www.jianshu.com/p/0c1f96a2cf49
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
广告也精彩

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: