m3u8就不做过多介绍了,在linux系统中可以借助ffmpeg这个工具将视频转化为m3u8格式,便于在终端播放。本次测试环境是centos7.6
第一步,得先安装yasm
yum install yasm
如果yum没有yasm这个包需要手动去下载一个源码包来安装,源码包编译安装使用默认方式即可,不需要修改任何配置。
第二步,安装x264 X264源码包下载地址:http://www.videolan.org/developers/x264.html
tar -xjf x264-master.tar.bz2
./configure --prefix=/usr/local/x264 --enable-shared --enable-static --disable-asm
make
make install
第三步,安装ffmpeg ffmpeg源码包下载地址: http://ffmpeg.org/download.html
tar -xjf ffmpeg-snapshot.tar.bz2
./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/usr/local/x264/include --extra-ldflags=-L/usr/local/x264/lib
make
make install
第四步,添加链接库文件和环境变量 vim /etc/ld.so.conf,添加下面两个目录:
/usr/local/ffmpeg/lib/
/usr/local/x264/lib/
然后保存退出,执行ldconfig让变更生效
vim /etc/profile,添加下面一行:
export PATH=$PATH:/usr/local/ffmpeg/bin
保存退出,执行source /etc/profile
安装完毕,查看一下安装的软件版本号:
ffmpeg -version
如果遇到centos8.2系统安装后报错:
[h264_v4l2m2m @ 0x243b3c0] Could not find a valid device
[h264_v4l2m2m @ 0x243b3c0] can't configure encoder
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
[aac @ 0x2455b80] Qavg: 31463.275
[aac @ 0x2455b80] 2 frames left in the queue on closing
Conversion failed!
这个错误初步判断是系统缺少组件导致,具体缺什么不清楚,但这里提供一个很好的解决方案:
下载后解压得到这样的文件目录:
[root@dx-test-root ffmpeg-git-20201128-amd64-static]# ls
ffmpeg ffprobe GPLv3.txt manpages model qt-faststart readme.txt
[root@dx-test-root ffmpeg-git-20201128-amd64-static]#
这里的ffmpeg是可以直接使用的,不需要再去安装ffmpeg源码包了,是不是很方便。
第五步,使用方法及参数说明 将视频转换成m3u8:
[root@nginx mv]# ffmpeg -i td01.mkv -f hls td01hls.m3u8
默认情况下这条命令是将td01.mkv这个视频文件按照每2秒一个片段来分割成m3u8格式,并且td01hls.m3u8文件中只保存最后5个片段,我们可以用加参数的方式来控制它的分割时间长度和m3u8文件保存的片段数,可加参数如下:
-hls_time n: 设置每片的长度,默认值为2。单位为秒
-hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
-hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的 片,而且能够限制写入磁盘的最多的片的数量
-hls_start_number n:设置播放列表中sequence number的值为number,默认值为0
注意:播放列表的sequence number 对每个segment来说都必须是唯一的,而且它不能和片的文件名(当使用wrap选项时,文件名有可能会重复使用)混淆
例如:将一个视频文件按照2分钟的时间来分割,并且记录所有片段:
[root@nginx mv]# ffmpeg -i td01.mkv -hls_time 120 -hls_list_size 0 -f hls td01hls.m3u8
转换完成的视频文件可以直接在html文件中打开,但是有终端限制,不使用插件的情况下只能在苹果设备和安卓手机端中打开,windows电脑无法打开,解决方法使用第三方播放插件,比如:
这是js播放插件,如果客户端禁用了js也无法正常播放。