我正在尝试获取YouTube视频的大小。我正在使用Gdata API调用来检索基本信息(标题,网址,缩略图和类别),但我找不到视频尺寸。
我正在使用YouTube Data API服务器端调用在网站上嵌入一些视频:http://gdata.youtube.com/feeds/api/videos/z_AbfPXTKms?0=v&1=2&alt=json。不幸的是,没有关于视频尺寸的可靠信息(即使使用宽屏视频,所有预览图像都是4/3速率)。
我想要完成的是将视频完全适合播放器;玩家宽度是固定的,所以我只需要原始尺寸或至少比例。
有没有办法使用Youtube API检索此类数据?
(我的后备计划是将玩家大小设置为4/3并且永不回头,但感谢任何帮助!)
答案 0 :(得分:11)
感谢YouTube的oEmbed实施,您也可以获得它。例如:
https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=hUvbb_eUP84&format=xml
format=json
也被接受。
答案 1 :(得分:7)
现在有一个解决方案:如果你刮掉视频公共页面:
http://www.youtube.com/watch?v=[id]
您可以看到打开的图形宽度和高度标记,例如:
<meta property="og:video:width" content="1920">
<meta property="og:video:height" content="1080">
所以你可以得到那里的尺寸; - )
答案 2 :(得分:7)
如果您想从问题中获取示例视频的尺寸:
然后使用Noembed
尝试此网址它将返回以下JSON:
{
"version": "1.0",
"title": "まるです。",
"author_name": "mugumogu",
"provider_url": "https://www.youtube.com/",
"width": 459,
"height": 344,
"thumbnail_height": 360,
"type": "video",
"thumbnail_width": 480,
"provider_name": "YouTube",
"url": "https://www.youtube.com/watch?v=z_AbfPXTKms",
"author_url": "https://www.youtube.com/user/mugumogu",
"html": "\n<iframe width=\" 459\" height=\"344\" src=\"https://www.youtube.com/embed/z_AbfPXTKms?feature=oembed\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"></iframe>\n",
"thumbnail_url": "https://i.ytimg.com/vi/z_AbfPXTKms/hqdefault.jpg"
}
它还支持JSONP用于跨源请求:
有关详细信息,请参阅此答案:
使用jQuery的简单演示:
var id = 'z_AbfPXTKms';
var url = 'https://www.youtube.com/watch?v=' + id;
$.getJSON('https://noembed.com/embed',
{format: 'json', url: url}, function (data) {
alert('Dimensions: ' + data.width + 'x' + data.height);
});
请参阅JSBin上的DEMO。
答案 3 :(得分:3)
如果您像这样加载YouTube视频,只有在视频加载后才能触发javascript功能。
<script src="https://www.youtube.com/iframe_api"></script>
<center>
<div class="videoWrapper">
<div id="player"></div>
</div>
</center>
<script>
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
videoId:'xxxxxxxxxxx',playerVars: { controls:0,autoplay:0,disablekb:1,enablejsapi:1,iv_load_policy:3,modestbranding:1,showinfo:0,rel:0,theme:'light' }
} );
resizeHeroVideo();
}
</script>
resizeHeroVideo
在视频加载后调用。
var player = null;
$( document ).ready(function() {
resizeHeroVideo();
} );
$(window).resize(function() {
resizeHeroVideo();
});
function resizeHeroVideo() {
var content = $('#hero');
var contentH = viewportSize.getHeight();
contentH -= 158;
content.css('height',contentH);
if(player != null) {
var iframe = $('.videoWrapper iframe');
var iframeH = contentH - 150;
if (isMobile) {
iframeH = 163;
}
iframe.css('height',iframeH);
var iframeW = iframeH/9 * 16;
iframe.css('width',iframeW);
}
}
然后我们计算尺寸以保持它在页面中心的位置,并保持适当的16:9宽高比。
答案 4 :(得分:2)
继Isra的解决方案之后。 是的,似乎youtube没有开发他们的oEmbed API代码,因为videoFrameSize返回470 x 270像素。 但至少它给你一些动态GRAB的东西!
使用suck它看看'Lee taylor'提出的方法是实现这一目标的一种方法,但如果你需要一个动态的内容则不理想。
好的 - 请记住oEmbed提供的不准确尺寸 - 它确实提供了解决方案。
我目前正在为图库中的视频内容开发一个strusturedData生成器,它们都链接到youTube视频。
这是从youtube获取Dimension的一种不准确的方法,但至少是它的数据!
如何从youtube获取视频大小。
第1阶段: 从youtube ::
调用oEmbed数据$video_id = "your youtube videos unique ID number ";
$oEmbed = simplexml_load_file('http://www.youtube.com/oembed?url=http%3A//www.youtube.com/watch?v=' . $video_id . '&format=xml');
第2阶段:
$data['height'] = $oEmbed->height;
$data['width'] = $oEmbed->width;
$data['videoFrameSize'] = $oEmbed->height . "x" . $oEmbed->width . "px";
第3阶段:
使用编码中的变量,因为您最好使用::