在移动设备上忽略的Youtube iFrame API setPlaybackQuality

问题描述 投票:14回答:2

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

HTML

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

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

我已经尝试在播放器准备就绪后立即调用setPlaybackQuality,以避免移动用户浪费时间进行缓冲(如本post中所建议)。我还在“缓冲”和“播放”状态下调用了它。质量发生变化时,调试内容会以实际的播放质量进行更新。

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

iframe mobile youtube-api playback youtube-iframe-api
2个回答
6
投票

我发现的解决方法是创建一个没有videoId的播放器,不要在其他任何地方调用setPlaybackQuality,而是在loadVideoById(videoId, 0, desiredQuality)处理程序内部调用onReady。经测试,这在Android和iOS上均得到遵守,在Android和Desktop上一次以正确的质量调用onPlaybackQualityChanged,在iOS上两次以正确的质量进行调用,永远不要将质量更改为更高或更低。

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


0
投票

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

目前尚无办法提高嵌入式视频的播放质量。即使将播放器设置为144px宽度似乎也无法正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.