Подтвердить что ты не робот

API Youtube iFrame setPlaybackКачество игнорируется на мобильном устройстве

Я пытаюсь настроить YouTube iframe API для воспроизведения видео FullHD с более низким качеством. Моя цель - сохранить пропускную способность на мобильных устройствах и сократить время загрузки. Моя структура HTML - это классический игрок div, плюс отладочный div для сообщений.

HTML

<div id="debug"></div>

<div id="your_video_id">
  <div id="player"></div>
</div>

Я попытался вызвать setPlaybackQuality, как только игрок будет готов, чтобы пользователи мобильных пользователей не теряли время в буферизации (как это предлагается в ). Я также вызвал его как в состояниях "BUFFERING", так и "PLAYING". При изменении качества контент отладки обновляется с фактическим качеством воспроизведения.

JAVASCRIPT

/* Trigger player ready */
function onPlayerReady(event) 
{
    player.setPlaybackQuality("small");
}

/* Detect playback quality changes */
function onQualityChange(event) 
{
    document.getElementById("debug").innerHTML = event.data;
}

/* Trigger player events */
function onPlayerStateChange(event) 
{
    if (event.data == YT.PlayerState.BUFFERING) 
    {
        player.setPlaybackQuality("small");
    }

    if (event.data == YT.PlayerState.PLAYING) 
    {
        player.setPlaybackQuality("small");
    }
}

Этот код, похоже, работает на рабочем столе (отладка корректно установлена ​​на "маленькая" ), но она игнорируется на мобильных устройствах (отладка установлена ​​на "большой", протестирована с Android 4.2.2). Есть ли решение для этого?

4b9b3361

Ответ 1

Обходной путь, который я нашел, - создать плеер без videoId, никогда не называть setPlaybackQuality где-либо еще, но называть loadVideoById(videoId, 0, desiredQuality) внутри вашего обработчика onReady. Это было соблюдено как на Android, так и на iOS при тестировании, вызывая onPlaybackQualityChanged с правильным качеством один раз на Android и Desktop и дважды на iOS, никогда не меняя качество ни на что выше или ниже.

К сожалению, если вы передадите какое-либо качество, недоступное на видео, оно заставит "средний". Помните об этом. Кроме того, это вряд ли приведет к нарушению каких-либо ограничений качества, которые API делает на iOS, чтобы предотвратить использование посторонних данных в сетях 3G/4G/LTE.