MP4转换m3u8格式
mp4="KIDS REACT TO ROTARY PHONES-XkuirEweZvM.mp4"
m3u8=$(echo ${mp4} | sed "s|mp4|m3u8|g")
# 切分视频代码里面用的
ffmpeg -i "${mp4}" -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls "${m3u8}" -loglevel error 2>&1
# 命令行能够使用的。能用的命令
ffmpeg -i "${mp4}" -vcodec libx264 -vbsf h264_mp4toannexb -start_number 0 -hls_time 10 -hls_list_size 0 -f hls "${m3u8}"
参数说明
-vbsf h264_mp4toannexb
:转换H.264编码比特流,从长前导模式为开始码前导模式(定义在ITU-T H.264 的附录B)- h264有两种封装:
一种是annexb模式,传统模式,有startcode,SPS和PPS是在ES中;另一种是mp4模式,一般mp4、mkv、avi会没有startcode,SPS和PPS以及其它信息被封装在container中,每一个frame前面是这个frame的长度,很多解码器只支持annexb这种模式,因此需要将mp4做转换;在ffmpeg中用h264_mp4toannexb_filter可以做转换;所以需要使用-bsf h264_mp4toannexb来进行转换;
- h264有两种封装:
视频文件的名字当中不要有空格
- 终于定位到这个问题,我们的小程序的视频服务使用的是阿里云oss + cdn构建的服务
- 很奇怪的是安卓手机播放正常,但是IOS手机播放异常,而且以前也出现过这个问题,通常这个问题是由于视频的格式不对导致的通过ffmpeg命令调整
- 但是这个问题有点奇怪的是,我单独使用这个视频的url不使用CDN的时候,可以在IOS上面播放,但是使用CDN的时候就不行。
- 其他的m3u8视频也是播放正常的,只有这个视频不行,最终怀疑到是不是因为视频的名字当中有空格,
- 去掉空格之后,果然OK!!
参考文章
- 一些简单的vbsf: http://xdsnet.github.io/other-doc-cn-ffmpeg/index.html?name=ffmpeg-doc-cn-19
- vbsf描述: https://blog.csdn.net/hejjunlin/article/details/71001593
- 简单的描述:https://blog.csdn.net/psh18513234633/article/details/79312607
打赏作者^_^
微信 && 支付宝