Javascript YouTube iFrame API“;“设置播放质量”;或;“建议质量”;不起作用
我在通过Youtube iFrame API设置视频质量设置时遇到一些问题。这是我的代码:Javascript YouTube iFrame API“;“设置播放质量”;或;“建议质量”;不起作用,javascript,api,iframe,youtube,Javascript,Api,Iframe,Youtube,我在通过Youtube iFrame API设置视频质量设置时遇到一些问题。这是我的代码: var player; player = new YT.Player('player', { height: '490', width: '725', videoId: yturl, /* setPlaybackQuality: 'hd720', <-- DOES NOT WORK */ /* suggestedQuality: 'hd720', <
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();
}
var播放器;
player=新的YT.player('player'{
高度:'490',
宽度:'725',
videoId:yturl,
/*setPlaybackQuality:'hd720',发现了一个可能的黑客/解决方案
如果我等到视频开始播放,然后应用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!
}
}
player=new YT.player('player'){
高度:'490',
宽度:'725',
videoId:yturl,
活动:{
“onReady”:onPlayerReady,
“onStateChange”:onPlayerStateChange
}
});
函数onPlayerReady(事件){
播放器设置音量(100);
event.target.playVideo();
}
函数onPlayerStateChange(事件){
if(event.data==YT.PlayerState.PLAYING){
event.target.setPlaybackQuality('hd720');//我有完全相同的问题和解决方法。
我认为现在的情况是,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');
}
}
我已经用这个函数玩了一点,并且onPlayerReady
中的setPlaybackQuality
工作正常。
唯一的问题是分配不是立即的,实际上getPlaybackQuality
在视频启动后返回正确的值。实际上在视频启动前getPlaybackQuality
将始终返回small
。但有一次视频启动时使用的是正确的playBackQuality
我也尝试过不同的球员大小组合,甚至它的工作
注:
我使用的是IFrame API我找到了一个非常适合我的解决方案:
function onPlayerStateChange(event) {
//Some code...
$(".btn-change-quality").on("click", function(){
pauseVideo();
player.setPlaybackQuality('hd720');
playVideo();
});
}
问题是YouTube选择了最合适的播放质量,因此它覆盖了onPlayerReady()
函数中的setPlaybackQuality()
我找到了一个解决方案,可以强制YouTube的播放器以您想要的任何质量播放,无论播放器的宽度和高度如何:
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '180',
width: '320',
videoId: 'M7lc1UVf-VE',
events: {
'onReady': onPlayerReady,
'onPlaybackQualityChange': onPlayerPlaybackQualityChange,
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerReady(event) {
event.target.playVideo();
}
function onPlayerPlaybackQualityChange(event) {
var playbackQuality = event.target.getPlaybackQuality();
var suggestedQuality = 'hd720';
console.log("Quality changed to: " + playbackQuality );
if( playbackQuality !== 'hd720') {
console.log("Setting quality to " + suggestedQuality );
event.target.setPlaybackQuality( suggestedQuality );
}
}
代码确保质量更改是建议的
请记住:用户无法使用带有该代码的播放器按钮更改视频质量
无论如何,您可以强制执行建议的质量一次
在GChrome、Firefox和Safari中测试。另一种解决方案,停止视频并使用seekTo()
。对于直播流,您可以跳过seekTo()
。它会显示缓冲,但好处是无论播放器大小,您都可以完全控制
var player = YT.get('videoid');
rate = 'small';
var currentTime = player.getCurrentTime();
player.stopVideo();
player.setPlaybackQuality(rate);
player.playVideo();
player.seekTo(currentTime, false);
显然,如果视频不支持播放质量,则无法设置播放质量。只有当播放器大小的高度至少为720px时,这才有效。我使用UIWebView和WKWebView进行了尝试,但没有效果!这对我有效。此外,我添加了变量first\u play=false
,并将onclick code放入if stament(if(!first_play)
)。然后只需在if语句中添加first_play=true,即可完美运行我能找到的唯一解决方案-对我有效!嘿,你认为这是因为init视频必须具有相同的播放质量吗?我真的很感兴趣为什么onPlayerStateChange()不够?这似乎不再有效(2018年4月)。我发布了一条消息,诱使YouTube加载更高质量的视频。肯定没有这个解决方案那么优雅,所以我希望他们将来能修复setPlaybackQuality。ios模拟器总是使用中等大小的,当时是2012年,mb,但不适用于ios 12。你能用ios应用程序及其WKWebView测试它吗?“player.getplaybackquality()”在hd1080应该是hd720时返回?为什么?Thanksit不适用于iOS 12,没有效果,无法设置hd720