Воспроизведение видео в браузере MP4 периодически прерывается на устройствах iOS - PullRequest
0 голосов
/ 28 апреля 2020

Это действительно озадачивает, и мы подозреваем ошибку iOS.

Ситуация:

У нас есть сайт с видеоконтентом, где мы размещаем видео как mp4 и пользователи могут воспроизводить их. Эти видео отображаются в браузере HTML5 игроков. Часто на одной странице отображается несколько видео.

Проблема

Мы начали получать отчеты от некоторых пользователей, все на устройствах iOS, что небольшое подмножество этих видео показывалось для них как неиграбельное, как показано ниже:

enter image description here

Теперь, опять же, этого не произойдет для всех видео на их экран, только некоторые. Когда видео просматривается на устройстве, отличном от iOS, все в порядке; все видео воспроизводимы. Для этих пользователей не имеет значения, какой браузер они используют на этом устройстве, возникает та же проблема.

Что мы изучили

Сначала мы рассмотрены распространенные HTML5 проблемы с воспроизведением видео, связанные с Safari (и iOS). Например, чтобы сервер отвечал на Range запросов, включая playsinline и так далее. Запросы и ответы выглядели хорошо, что имело смысл, потому что все эти видео перекодированы в один и тот же формат и размещены на одном сервере (Digital Ocean Spaces).

Как только мы смогли воспроизвести эту проблему на iOS мы увидели, что это был не тег видео; даже прямой доступ к mp4 (без HTML) в браузере (неважно, какой именно) не будет работать:

enter image description here

Это поддержал бы идею, что это не работает ни в одном браузере. Вот несколько загадочных деталей, которые мы нашли в ходе нашего тестирования (мы тестируем с помощью онлайн-сервиса, который предоставляет нам доступ к iOS симуляторам):

  • Это происходит только с некоторыми (небольшая часть нашего) видео, большинство видео будет всегда работать
  • Для видео, которые не работают, для каждого симулятора перезапуска есть примерно 50/50 шансов, будет ли он работать или нет. Если он работает (или нет), он будет оставаться в этом состоянии до следующего перезапуска
  • . В течение того же сеанса симулятора никакое число перезапусков ** устройства * не изменит состояние с неработающего на работающее
  • Похоже, что это происходит на iOS 12.4 и выше, iPad и iPhone (протестировано с помощью симулятора)

При поиске на форумах Apple, в последнее время возникает немало проблем с видео воспроизведение, более сфокусированное на обновлении 13.4.

Пример

Мы смогли воссоздать его со стоковыми видео. Просто для контекста, нам потребовалось около 16 видео, прежде чем мы получили 1 сбой.

Работает

Не работает

Когда мы получаем доступ к «не работающей» ссылке в iOS симуляторе (iPhone XS, iOS 12.4), она каждый раз терпит неудачу.

В любом случае, у нас заканчиваются идеи относительно того, как это может решаться и, возможно, просто искать подтверждение, что это может быть известной iOS проблемой. Кто-нибудь испытывал это?

1 Ответ

2 голосов
/ 28 апреля 2020

Неработающий файл - цветовое пространство 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

...