2014-12-19 76 views
14

我试图设置YouTube iframe API播放低质量的FullHD视频。我的目标是节省移动设备的带宽并缩短加载时间。我的HTML结构是古典播放器div,加上消息的调试div。Youtube iFrame API setPlaybackQuality在移动设备上被忽略

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

+1。我遇到了同样的问题,尝试了onReady,onStateChange与BUFFERING和PLAYING,所有单独和各种组合 - 都不起作用。我提出了此问题:https://code.google.com/p/gdata-issues/issues/detail?id=7191&thanks=7191&ts=1432253375 – 2015-05-22 00:11:56

+0

在iOS上,视频质量直接根据iFrame播放器的大小设置。因此,无论您设置了多大尺寸,移动播放器都会覆盖您的设置,以匹配最接近尺寸的任何尺寸。对于iOS开发者(这实际上只是网页浏览中的iFrame播放器)提供的玩家帮手,这是一个巨大的问题。 YouTube声称这样做是为了避免在手机上使用不必要的数据。 – JAL 2015-05-26 20:07:22

+0

@JAL:嗯。那么,我已经在规定的最小尺寸附近 - 约350 x 200.它不应该试图将其设置为240p?而且因为它实际上是175 x 100 \ @ 2x,难道不会更接近144p吗?我认为这是YT iFrame API方面的一个问题,因为我也注意到[在桌面上寻求降低质量不起作用,但寻求更高质量。](http://stackoverflow.com/questions/30468161/ loading-youtube-iframe-api-video-at-a-quality-quality) – 2015-05-26 21:27:08

回答

6

我找到的解决方法是,没有videoId创建的球员,永远不会调用setPlaybackQuality其他地方,但拨打loadVideoById(videoId, 0, desiredQuality)onReady处理器内部。这在测试时在Android和iOS上都得到了尊重,在Android和桌面上拨打onPlaybackQualityChanged时拨打的号码质量正确一次,在iOS上拨打电话号码为两次,绝不会将质量更改为更高或更低。

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

+0

我按照你的步骤,但它不适合我。你知道自你的答案后API的行为是否已经改变? – kakhkAtion 2016-02-04 22:10:56

+0

最近没有检查过。哪个平台有问题,并且您确定您正在使用loadVideoById(而不是cueVideoById或类似的)3个参数,从不调用setPlaybackQuality,并且您正在播放的视频实际上具有您尝试设置的播放质量?它实际上设置了哪个质量? – 2016-02-07 15:47:39

+0

是的,我正在使用loadVideoById。我正在Android和iOS上尝试Chrome。不管我做什么,我总是在我的iPhone 5上获得高质量的媒体,而在我的Nexus 5上获得高质量的媒体。完全相同的代码在桌面浏览器上工作得很好,我可以改变质量。 – kakhkAtion 2016-02-08 02:22:47