15

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

HTML

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

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

我试图在播放器准备好后立即调用setPlaybackQuality以避免移动用户在缓冲上浪费时间(如本文所述)。我还在“缓冲”和“播放”状态下都调用了它。当质量发生变化时,调试内容会更新为实际播放质量。

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 测试)。有解决方案吗?

4

2 回答 2

6

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

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

于 2015-05-28T16:04:08.143 回答
3

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

目前没有办法强制嵌入视频的播放质量。即使将播放器设置为 144px 宽度似乎也不再起作用。

于 2020-03-12T14:27:22.737 回答