首页 > 解决方案 > iOS 设备上的 MP4 浏览器内视频播放间歇性中断

问题描述

这真是令人费解,我们怀疑是 iOS 错误。

情况:

我们有一个视频内容网站,我们在其中托管视频mp4,用户可以播放它们。这些视频在浏览器的 HTML5 播放器中内嵌显示。通常,用户会在同一页面上显示多个视频。

问题

我们开始收到一些用户的报告,所有用户都是在 iOS 设备上,这些视频中有一小部分显示为无法播放,如下所示:

在此处输入图像描述

再说一次,这不会发生在他们屏幕上的所有视频上,只有少数。在非 iOS 设备上观看视频时,一切正常;所有视频都可以播放。对于这些用户来说,无论他们在该设备上使用什么浏览器,都会发生同样的问题。

我们调查的内容

首先,我们研究了与 Safari(和 iOS)相关的常见 HTML5 视频播放问题。诸如确保服务器响应Range请求并包含playsinline等等之类的事情。请求和响应看起来不错,这是有道理的,因为这些视频都被转码为相同的格式并托管在同一服务器(Digital Ocean Spaces)上。

一旦我们能够在 iOS 上重现这个问题,我们发现它不是视频标签;即使mp4在浏览器中直接访问(无 HTML)(不管是哪一个)也不起作用:

在此处输入图像描述

这将支持它不适用于任何浏览器的想法。以下是我们在测试中发现的一些令人费解的细节(我们正在使用提供 iOS 模拟器访问权限的在线服务进行测试):

当您搜索 Apple 论坛时,最近有不少关于视频播放的问题,更多集中在 13.4 更新上。

例子

我们能够使用库存视频重新创建它。就上下文而言,我们花了大约 16 个视频才出现 1 个失败。

在职的

不工作

当我们在 iOS 模拟器(iPhone XS、iOS 12.4)中访问“不工作”链接时,每次都会失败。

无论如何,我们对于如何解决这个问题已经没有想法了,也许只是在寻找这可能是一个已知的 iOS 问题的确认。有没有人经历过这个?

标签: htmliosvideomp4

解决方案


非工作文件是 yuv422 颜色空间(见Chroma subsampling : 4:2:2下文)。大多数硬件(因此是移动)解码器只能播放 yuv420。该文件必须转码为支持的色彩空间。

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High 4:2:2@L3.1
Format settings                          : CABAC / 4 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 4 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 16 s 984 ms
Bit rate                                 : 2 760 kb/s
Width                                    : 720 pixels
Height                                   : 496 pixels
Display aspect ratio                     : 4:3
Frame rate mode                          : Constant
Frame rate                               : 29.970 (30000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:2
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.258
Stream size                              : 5.59 MiB (100%)
Writing library                          : x264 core 157 r2969 d4099dd
Encoding settings                        : cabac=1 / ref=1 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=2 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=15 / lookahead_threads=3 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=1 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=10 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Color range                              : Full
Codec configuration box                  : avcC

模拟器有时会起作用,因为它们在软件中模拟解码器。而且很多软件解码器确实支持4:2:2


推荐阅读