我正在尝试设置YouTube iframe API以播放较低质量的FullHD视频。我的目标是节省移动设备的带宽并减少加载时间。我的 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 进行测试(。有解决方案吗?
我发现的解决方法是创建没有videoId
的播放器,切勿在其他任何地方调用setPlaybackQuality
,而是在onReady
处理程序中调用loadVideoById(videoId, 0, desiredQuality)
。在测试时,这在Android和iOS上都得到了尊重,在Android和Desktop上以正确的质量调用onPlaybackQualityChanged
一次,在iOS上调用两次,从未将质量更改为更高或更低的质量。
不幸的是,如果您传递了视频中不可用的任何质量,它将强制使用"中等"。请注意这一点。此外,这不太可能打破 API 在 iOS 上所做的任何质量上限,以防止 3G/4G/LTE 网络上的外来数据使用。
2020 年,YouTube 已弃用 setPlaybackQuality
函数。
目前无法强制提高嵌入视频的播放质量。即使将播放器设置为 144px 宽度似乎也不再有效。