移动设备上忽略了Youtube iFrame API setPlaybackQuality

时间:2014-12-19 08:23:04

标签: iframe mobile youtube-api playback youtube-iframe-api

我正在尝试设置YouTube iframe API以播放质量较低的全高清视频。我的目标是节省移动设备的带宽并减少加载时间。我的HTML结构是经典的播放器div,加上消息的调试div。

HTML

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

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

我已经尝试在播放器准备好后立即调用setPlaybackQuality,以避免移动用户在缓冲中浪费时间(如post中所述)。我也在“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进行测试)。有解决方案吗?

2 个答案:

答案 0 :(得分:6)

我找到的解决方法是创建没有videoId的播放器,不要在其他任何地方调用setPlaybackQuality,而是在loadVideoById(videoId, 0, desiredQuality)处理程序内调用onReady。在测试时,这在Android和iOS上得到尊重,在Android和桌面上调用onPlaybackQualityChanged一次正确的质量,在iOS上调用两次,从不将质量更改为更高或更低。

不幸的是,如果您传递了视频中无法提供的任何质量,它将强制使用“中等”。要注意这一点。此外,这不太可能打破API在iOS上所做的任何质量限制,以防止在3G / 4G / LTE网络上使用无关的数据。

答案 1 :(得分:3)

现在是2020年,YouTube已弃用setPlaybackQuality功能。

目前尚无办法提高嵌入式视频的播放质量。甚至将播放器设置为144px宽度似乎也不再起作用。