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.服务端解决方案:将场编码视频转码为帧编码。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

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