音视频问题汇总:iOS APP 显示黑屏

背景介绍

今天收到应用端开发反馈一个问题:APP在进行视频监控时,从IPC页面切换通话过程中,设备端无法播放,显示黑屏。

碰到类似问题一般都是需要一些抓包和log同时分析,以期能够快速定位完成优化。通过抓包可以明显看出来一个标红的包,如下图所示:

图片

经过查阅,wireshark官网上找到了答案:原来该数据包发生格式错误,导致wireshark都没有办法解析。

https://www.wireshark.org/docs/wsug_html_chunked/AppMessages.html#_malformed_packet

那该问题倒是是怎样发生的呢?Wireshark官网给出一些建议:

图片

知道可能存在的原因之后,就逐个分析和排查了,最后发现原来STAP-A包中多了一段不符合预期的SEI的数据内容。

这个就是导致问题出现的罪魁祸首,接下来我们介绍一下SEI的内容。该部分定义在标准的Annex D ( [ISO/IEC 14496-10:2014] )

SEI是什么?

SEI: Supplemental Enhancement Information,补充增强信息。按照名字表面意思就知道该部分数据是补充,额外的数据信息。通过标准的学习可以了解到:SEI信息提供了向传输的视频比特流中增加客户定制的数据的新的方法。不过需要明确一点:

(1)该部分不是解码必要部分,不做解释也可以正常解码显示;

(2)该部分对于直播协议没有特殊依赖性,只要能传输即可;

(3)该部分对于播放设备具有较好向下兼容性;

(4)该部分由视频码率携带,实时性具有保证性;

关于SEI的具体在实际生活中的直接体现,有兴趣的童鞋可以参考如下链接:https://www.birtv.com/Magazine/content/?599.html一文中的描述。

SEI可以支持传输到类型还是非常多的,标准中D.1中给出了大部分的类型

图片

为什么黑了?

标准中有说明NRI取值为 “00” (二进制)时,表征NAL unit不参与重建参考图像,这时的NAL unit是可以丢弃的。大于 “00”(二进制)时,NAL unit 不能被丢弃。

而SEI部分就是OEM定制的内容,不应该同步到主线发布版本。iOS开发同学没有注意这部分内容,直接把该部分送到解码器了

所以知道具体原因之后,就可以比较快速修改和优化了。

拓展学习

一般自己的习惯,看到一个新的东西都会在FFMPEG源码中跟踪一下,review一下行业大佬们的实现方式,以便可以学习更多细节内容,也可以帮助自己整理和汇总,逐步形成自己的知识体系。

所以直接查看相关内容。

ffmpeglibavcodech264_parser.c

查阅parse_nal_units函数,

图片

ffmpeglibavcodech264_sei.c

ff_h264_sei_decode函数中解析了部分type类型,包括图像时序信息,用户注册,恢复

图片

ffmpeglibavcodecsei.h

sei头文件中定义了全部的sei类型,用户可以依据自己的需求使用不同的sei进行开发。

SEI 有效载荷类型构成了 H.264、H.265 和 H.266 标准之间的通用命名空间。给定的有效负载类型始终具有相同的含义,但某些名称在不同的标准中具有不同的有效负载类型(例如,可伸缩嵌套在 H.264 中为 30,但在 H.265 中为 133)。有效载荷数据的内容取决于标准,尽管许多通用部分在任何地方都有相同的解释(例如 mastering-display-colour-volume 和 user-data-unregistered)。

图片

比如 picture timing SEI messages 图片时序 SEI 消息包含 pic_struct,它定义了解码后处理的交错/逐行模式和场序

如果h264的流中包含Picture Timing数据,就会进行解析,将present置1。

图片

之后会进行Picture Timing数据解析:

图片

该部分解析和标准中的部分D.1.3Picture timing SEI message syntax一模一样,也可以参考标准进行解读。

图片

解析出来的数据,将交付应用或者其他模块进行数据展示和操作,该部分不属于我们本次的范畴,暂时不做讨论。

以上,关于其他SEI的东西,我们将来有时间再深入学习。

参考资料:

(1)https://interoperability.blob.core.windows.net/files/MS-H264PF/%5BMS-H264PF%5D.pdf

(2)https://www.rfc-editor.org/rfc/pdfrfc/rfc6184.txt.pdf

(3)https://www.rfc-editor.org/rfc/pdfrfc/rfc6190.txt.pdf

(4)https://www.birtv.com/Magazine/content/?599.html

作者:我是一枚爱跑步的程序猿,维护公众号和知乎专栏《MediaStack》,有兴趣可以关注,一起学习音视频知识,时不时分享实战经验。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论