移动设备上忽略Youtube iFrame API setPlaybackQuality

移动设备上忽略Youtube iFrame API setPlaybackQuality,iframe,mobile,youtube-api,playback,youtube-iframe-api,Iframe,Mobile,Youtube Api,Playback,Youtube Iframe Api,我正在尝试设置YouTube iframe API以播放质量较低的全高清视频。我的目标是节省移动设备的带宽,减少加载时间。我的HTML结构是经典的player div,加上消息的debug div HTML <div id="debug"></div> <div id="your_video_id"> <div id="player"></div> </div> 该代码似乎可以在桌面上运行(debug被正确设置为“s

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

HTML

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

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

该代码似乎可以在桌面上运行(debug被正确设置为“small”),但在移动设备上被忽略(debug被设置为“large”,使用Android 4.2.2进行测试)。有解决方法吗?

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


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

现在是2020年,YouTube已经不推荐使用
setPlaybackQuality
功能


目前没有办法强制提高嵌入式视频的播放质量。即使将播放机的宽度设置为144px,似乎也不再有效。

+1。我也遇到了同样的问题,在onReady、onStateChange和BUFFERING和PLAYING中进行了尝试,所有这些都是单独的和以不同的组合进行的,但都不起作用。我提出了这个问题:在iOS上,视频质量直接根据iFrame播放器的大小设置。因此,无论您设置了什么大小,移动播放器都会覆盖您的设置,以匹配与播放器大小最接近的大小。YouTube为iOS开发者提供的播放器助手(实际上只是web视图中的iFrame播放器)存在一个很大的问题。YouTube声称这样做是为了避免在手机上不必要的数据使用。@JAL:Hm。那么,我把它放在了规定的最小尺寸附近——大约350 x 200。难道它不应该尝试将其设置为240便士吗?既然它实际上是175x100\@2x,它不是更接近144p吗?我认为这是YT iFrame API方面的一个问题,因为我也注意到iFrame API在移动设备上不能正常工作。考虑到它是下一个被弃用的API(而且是),我怀疑谷歌是否正在努力解决与移动设备上iFrame播放器相关的所有问题。@JAL:Huh。iFrame API被弃用后,是否有其他替代方案可以让开发人员将YouTube平台集成到他们的应用程序中?我遵循了您的步骤,但它不适合我。您知道API的行为在您回答后是否发生了变化吗?您最近没有检查过。您在哪个平台上遇到问题,您是否绝对确定您正在使用loadVideoById(不是cueVideoById或类似的)和3个参数,从不调用setPlaybackQuality,并且您正在播放的视频实际上具有您试图设置的播放质量?它实际设置的是哪种质量?是的,我正在使用loadVideoById。我正在Android和iOS上试用Chrome。无论我做什么,我的iPhone5都是中等质量的,Nexus5是大质量的。完全相同的代码在桌面浏览器上运行良好,我可以更改质量。啊,我只使用WebView(Android)和UIWebView/WKWebView(iOS)进行了测试,不确定这是否会影响它。我最后一次测试这个可能是6个月前,所以YMMV。很抱歉听到它不起作用,如果你找到解决办法,请告诉我!谢谢你提供的信息:)我会在周末做更多的工作,如果我找到解决办法,一定会让你知道。
/* 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");
    }
}