YouTube iframeembedded不以HD开始
我试图embedded一个高清YouTubevideo,但无论我尝试,似乎只加载480p版本。
根据YouTube的说法,embedded高清video就像在url中joinhd=1
一样简单:
<iframe src="//www.youtube.com/embed/{videoId}?hd=1" width="960" height="720" frameborder="0" allowfullscreen></iframe>
然而,这似乎并没有工作,至less在我的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支持论坛上的这个答案 :
[iframeembedded]将尝试“优化”体验,并且将在embedded播放器的尺寸上工作,以select默认播放的质量。
如果embedded比1280×750小得多,例如853×510或640×390,则无论是否设置了&hd = 1参数,它都将播放480p或360p。
(强调我的)
我将iframe的尺寸更改为1280×720,并以720p分辨率加载video。
所以,iframeembedded机制基本上是智能的,只能根据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版本。 我从这个来源得到这个信息。
我可能会晚一点,但我发现它只是看着video播放器的高度。
当我试图embedded1000px宽的video,但只有408像素高(2.35:1无光泽)时,它会select360p>:|
花了超过5小时的search和testing所有的答案,下面的代码为我工作。 使用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