m3u8视频处理Android vs IOS

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来进行转换;

视频文件的名字当中不要有空格

  • 终于定位到这个问题,我们的小程序的视频服务使用的是阿里云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

打赏作者^_^

微信 支付宝
微信 && 支付宝

你可能感兴趣的:(DevOps)