YouTube iFrame API setPlaybackQuality игнорируется на мобильном устройстве

Я пытаюсь настроить API iframe YouTube для воспроизведения видео 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). Есть ли решение для этого?

1 ответ

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

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

Наступил 2020 год, и YouTube отказался от использования setPlaybackQuality функция.

В настоящее время нет возможности принудительно повысить качество воспроизведения встроенного видео. Даже установка ширины плеера 144 пикселя больше не работает.

Другие вопросы по тегам