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 пикселя больше не работает.