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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。