我正在尝试嵌入一个高清YouTube视频,但无论我怎么尝试,它似乎只加载480p版本。
根据YouTube的说法,嵌入高清视频就像在URL中添加hd=1
一样简单:
<iframe src="//www.youtube.com/embed/{videoId}?hd=1" width="960" height="720" frameborder="0" allowfullscreen></iframe>
这,然而,似乎没有工作,至少在我的iframe
的实现:
<iframe id="video-player" width="960" height="720" src="//www.youtube.com/embed/{videoId}?enablejsapi=1&autoplay=1&rel=0&modestbranding=1&showinfo=0&showsearch=0" frameborder="0" allowfullscreen></iframe>
Javascript API也是如此:
HTML:<div id="video-player"></div>
JS:
var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player('video-player', {
height: '720',
width: '960',
videoId: '{videoId}',
playerVars: {
'controls': 1,
'autoplay': 1,
'hd': 1
},
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerReady(event) {
player.playVideo();
}
使用这个参数:
vq = hd1080
例子:
<iframe src="https://www.youtube-nocookie.com/embed/SzTdgE04uA8?vq=hd1080" width="853" height="480"></iframe>
根据YouTube支持论坛上的答案:
[The iframe embed]将尝试"优化"。这些经验将会逐渐消失的尺寸来选择嵌入播放器播放什么质量默认值为。
如果嵌入的比1280x750小得多,例如853x510或640x390,它将播放480p或360p, 无论是否设置&hd=1参数。
<一口>(强调我的)一口>
我将iframe的尺寸更改为1280x720,视频以720p的分辨率加载。
所以,基本上iframe嵌入机制是智能的,只加载最接近的分辨率根据iframe的大小
你可以做一个小技巧。通过JS设置质量。这不是保证,但工作在我的网站(ggreplayz.com):
https://developers.google.com/youtube/js_api_reference Playback_quality
的例子:
<iframe id="vid2" style="z-index: 1;" width="853" height="505" src="http://www.youtube.com/embed/<?php echo $vid2Array[0];?>?enablejsapi=1&wmode=transparent&hd=1" frameborder="0" allowfullscreen></iframe>
<script type="text/javascript">
...
function onYouTubePlayerAPIReady() {
player1 = new YT.Player('vid1', {
events: {
'onReady': onPlayerReady1
}
});
...
function onPlayerReady1(event) {
player1.setPlaybackQuality('hd720');
}
...
hd
参数已弃用:https://developers.google.com/youtube/player_parameters#Deprecated_Parameters
我使用&hd=1&vq=hd720
来实现这一点。即使播放器更小,它也会加载720p版本。
我可能有点晚了,但我刚刚发现它只关注视频播放器的高度。
当我尝试嵌入视频1000px宽,但只有408像素高(2.35:1哑光),它选择360p>:|
花了5个多小时搜索和测试所有答案后,下面的代码适合我。使用Xcode 5, iOS 7.0.4和iPad mini2。
- (void)viewWillAppear:(BOOL)animated
{
NSString *htmlString = @"<html><head>
<meta name = "viewport" content = "initial-scale = 1.0, user-scalable = yes, height = 640px, width = 360px"/></head>
<body style="background:#000;margin-top:0px;margin-left:0px">
<iframe id="ytplayer" type="text/html" width="640px" height="360px"
src="http://www.youtube.com/embed/%@?vq=hd1080"
frameborder="0"/>
</body></html>";
htmlString = [NSString stringWithFormat:htmlString,self.videoId, self.videoId];
[self.videoPlayerView loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"http://www.youtube.com"]];
}
这里唯一重要的是你在iframe中设置的宽高比(" width="640px" height="360px"),基本上是1280*720的比率。然后为你的UIWebView设置相同的大小。希望这对某人有所帮助。 我的根本不工作。我尝试了所有方法,包括所有这些参数
&hd=1&vq=hd720&quality=high
但是它没有工作,直到我添加了这个参数:
&version=3