IJKPlayer播放视频在iOS部分机型黑屏原因分析

一.背景

1.问题视频在iphone7p等机型上:视频无法正常播放(黑屏),音频正常播放。

2.问题视频在iphone XR机型上:音视频均能正常播放。

二.断点分析

1.问题视频在iphone7p上创建VideoToolBox解码器成功,解码失败(解码中失败IJKPlayer不能自动切换FFmpeg软解码),视频画面无法正常播放。

解码失败错误码:kVTVideoDecoderBadDataErr = -12909

2.问题视频在iphone XR上创建VideoToolBox解码器失败,IJKPlayer自动切换FFmpeg软解码,软解码成功,视频画面正常播放。

解码器创建失败错误码:kVTVideoDecoderMalfunctionErr = -12911

3.以上现象说明此视频无法使用VideoToolBox硬解码。

VideoToolBox为苹果官方提供的编解码库,使用GPU硬编解码。官方文档对错误码未提供更详细的信息。

三.格式分析

1.使用ffprobe分析问题视频的码流格式,包完整性等均未发现问题。

2.使用ffprobe分析问题视频与正常视频格式,对比发现,正常视频为帧编码,扫描方式为逐行扫描。问题视频为场编码,扫描方式为隔行扫描。

逐行扫描视频的表示方法为:720p,1080p,p是progressive“逐行”的缩写。

隔行扫描视频的表示方法为:720i,1080i,i是interlace“交错”的缩写。

四.验证VideoToolBox是否支持场编码

1.测试一:将帧编码视频转码为场编码格式视频(逐行转隔行)。
测试二:将问题视频转码为帧编码视频(隔行转逐行)。

使用FFmpeg命令行:
逐行转隔行:
ffmpeg -i input.mp4 -aspect 16:9 -c:v h264 -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 2000k -dc 9 -flags +ilme+ildct -alternate_scan 1 -top 0 output.mp4

隔行转逐行:
ffmpeg -i input.mp4 -aspect 16:9 -c:v h264 -b:v 4000k -minrate 1000k -maxrate 2000k -bufsize 2000k -dc 9 -deinterlace output.mp4

2.转码后使用MediaInfo工具检查是否转码成功。

逐行视频在“扫描方式”处显示“逐行扫描”或“progressive”。

隔行视频在“扫描方式”处显示“MBAFF”或“interlace”等。“扫描顺序”为“奇数场优先”等(逐行扫描无奇偶场概念)。

3.导入IJKPlayer验证,帧编码(逐行扫描)视频硬解码成功。场编码(隔行扫描)视频解码失败。

(后续会增加测试视频样本量,确保验证的可靠性)

五.解决方案

1.iOS端解决方案:在VideoToolBox解码器创建前判断视频为场编码还是帧编码,若为场编码,则直接走硬解码器创建失败流程,切换为FFmpeg软解码,避免出现硬解码创建成功而解码失败的问题。

判断方法:提取H264中的SPS序列参数集信息。根据SPS的句法,通过frame_mbs_only_flagmb_adaptive_frame_field_flagfield_pic_flag三个字段判断。

WX20200424-170548@2x.png

2.服务端解决方案:将场编码视频转码为帧编码。

实际上,如果是会议或培训等画面内容变动不大的视频,使用帧编码更为合适,可有效去除空间冗余,画面更清晰。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. 概述 苹果从iOS 8开始,开放了硬编码和硬解码的api,所以,从iOS 8开始,需要解码H.264视频时,...
    金山视频云阅读 10,269评论 1 25
  • 随着互联网技术的飞速发展,移动端播放视频的需求如日中天,由此也催生了一批开源/闭源的播放器,但是无论这个播放器功能...
    金山视频云阅读 46,536评论 28 170
  • 上一篇我们侃侃而谈了下Android下的App音视频开发杂谈,我们从入手到深入再到实际项目的遇到的问题以及解决方案...
    耗子_wo阅读 1,891评论 0 3
  • 引言H264编码使用 VideoToolbox硬编码录制H264视频 从iOS8开始,苹果将VideoToolbo...
    泥孩儿0107阅读 1,597评论 0 0
  • 第一性原理原是埃隆马斯克所提出的,被硅谷追捧现在在国内被追捧,但我认为其实没有必要神化,它只是一种思考的方式,这种...
    飞马大定理阅读 1,036评论 2 3