首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >YouTube iFrame接口"setPlaybackQuality“或"suggestedQuality”不工作

YouTube iFrame接口"setPlaybackQuality“或"suggestedQuality”不工作
EN

Stack Overflow用户
提问于 2012-01-10 19:24:18
回答 4查看 27.4K关注 0票数 22

我在通过Youtube iFrame API设置视频的质量设置时遇到了一些问题。这是我的代码:

代码语言:javascript
复制
var player;

player = new YT.Player('player', {
    height: '490',
    width: '725',
    videoId: yturl,
    /* setPlaybackQuality: 'hd720', <-- DOES NOT WORK */
    /* suggestedQuality: 'hd720',   <-- DOES NOT WORK */
    events: {
        'onReady': onPlayerReady
    }
});

function onPlayerReady(event) {
    player.setPlaybackQuality('hd720');       // <-- DOES NOT WORK
    event.target.setPlaybackQuality('hd720'); // <-- DOES NOT WORK
    player.setVolume(100);                    // <-- DOES WORK
    console.log(player.getPlaybackQuality()); // <-- Prints 'small' to console
    event.target.playVideo();
}

有趣的是,我对player.setPlaybackQualityevent.target.setPlaybackQuality的调用没有给出任何错误。它只是看起来好像玩家忽略了它。比如说,调用player.setSuggestedQuality (一个不存在的函数)会像预期的那样抛出一个错误。

我已经尝试了所有有效的字符串参数作为outlined in the API reference ('medium','large','hd720‘等)。它们都不起作用。

有人对我该如何设置这个属性有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-26 00:08:23

我有完全相同的问题和解决办法。我认为现在的情况是,YouTube只允许基于显示器实际尺寸的质量级别,所以除非你的视频有720px高,否则在实际播放之前,你不能默认为720p。然后用户控件开始发挥作用,YouTube就不再是个混蛋了。

编辑

刚刚取得了突破:如果你使用事件3(缓冲)而不是事件5(播放),用户就不会卡顿。一旦开始加载,质量就会发生变化。唯一奇怪的是,你也需要在onPlayerReady中设置它,否则它就不能工作。

代码语言:javascript
复制
function onPlayerReady(event) {
    event.target.setPlaybackQuality('hd720');
}
function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.BUFFERING) {
        event.target.setPlaybackQuality('hd720');
    }
}
票数 28
EN

Stack Overflow用户

发布于 2012-01-10 20:30:42

找到了可能的黑客攻击/解决方案。

如果我等到视频开始播放,然后应用setPlaybackQuality -它起作用了。因此:

代码语言:javascript
复制
player = new YT.Player('player', {
    height: '490',
    width: '725',
    videoId: yturl,
    events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
    }
});

function onPlayerReady(event) {
    player.setVolume(100);
    event.target.playVideo();
}

function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.PLAYING) {
        event.target.setPlaybackQuality('hd720');  // <-- WORKS!
    }
}

然而,这种解决方案并不理想,因为视频首先会以较低的质量开始缓冲,然后在开始播放时切换到720。任何意见或替代解决方案将不胜感激。

票数 5
EN

Stack Overflow用户

发布于 2014-01-06 11:00:01

我找到了一个非常适合我的解决方案:

代码语言:javascript
复制
 function onPlayerStateChange(event) {
   //Some code...

   $(".btn-change-quality").on("click",  function(){
       pauseVideo();
       player.setPlaybackQuality('hd720');
       playVideo();
    });
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8802498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档