我在通过Youtube iFrame API设置视频的质量设置时遇到了一些问题。这是我的代码:
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.setPlaybackQuality
或event.target.setPlaybackQuality
的调用没有给出任何错误。它只是看起来好像玩家忽略了它。比如说,调用player.setSuggestedQuality
(一个不存在的函数)会像预期的那样抛出一个错误。
我已经尝试了所有有效的字符串参数作为outlined in the API reference ('medium','large','hd720‘等)。它们都不起作用。
有人对我该如何设置这个属性有什么建议吗?
发布于 2012-05-26 00:08:23
我有完全相同的问题和解决办法。我认为现在的情况是,YouTube只允许基于显示器实际尺寸的质量级别,所以除非你的视频有720px高,否则在实际播放之前,你不能默认为720p。然后用户控件开始发挥作用,YouTube就不再是个混蛋了。
编辑
刚刚取得了突破:如果你使用事件3(缓冲)而不是事件5(播放),用户就不会卡顿。一旦开始加载,质量就会发生变化。唯一奇怪的是,你也需要在onPlayerReady中设置它,否则它就不能工作。
function onPlayerReady(event) {
event.target.setPlaybackQuality('hd720');
}
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.BUFFERING) {
event.target.setPlaybackQuality('hd720');
}
}
发布于 2012-01-10 20:30:42
找到了可能的黑客攻击/解决方案。
如果我等到视频开始播放,然后应用setPlaybackQuality
-它起作用了。因此:
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。任何意见或替代解决方案将不胜感激。
发布于 2014-01-06 11:00:01
我找到了一个非常适合我的解决方案:
function onPlayerStateChange(event) {
//Some code...
$(".btn-change-quality").on("click", function(){
pauseVideo();
player.setPlaybackQuality('hd720');
playVideo();
});
}
https://stackoverflow.com/questions/8802498
复制相似问题