Получить размеры YouTube видео (ширина / высота) - PullRequest
12 голосов
/ 01 марта 2012

Я пытаюсь получить размер видео на YouTube. Я использую вызов API Gdata для получения основной информации (заголовок, URL-адреса, миниатюры и категории), но не могу найти размеры видео.

Я встраиваю некоторые видео на веб-сайт с помощью серверных вызовов API данных YouTube, например: http://gdata.youtube.com/feeds/api/videos/z_AbfPXTKms?0=v&1=2&alt=json. К сожалению, нет надежной информации о размерах видео (все изображения для предварительного просмотра представлены в формате 4/3 даже с широкоэкранными видео).

То, что я пытаюсь сделать, это вставить видео точно в плеер; ширина плеера фиксирована, поэтому мне просто нужны исходные размеры или хотя бы пропорция.

Есть ли способ получить данные такого рода с помощью API YouTube?

(Мой запасной план - установить размер игрока на 4/3 и никогда не смотреть назад, но любая помощь приветствуется!)

Ответы [ 5 ]

11 голосов
/ 20 ноября 2012

Вы также можете получить его благодаря реализации YouTube.Пример:

https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=hUvbb_eUP84&format=xml

format=json также принимается.

7 голосов
/ 19 января 2017

Обновление 2017 - принятый ответ больше не работает

Если вы хотите получить размеры для примера видео из вопроса:

Затем попробуйте этот URL, используя 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);
});

См. DEMO на JSBin.

7 голосов
/ 11 октября 2012

Есть решение прямо сейчас: если вы поцарапаете общедоступную страницу видео:

http://www.youtube.com/watch?v=[id]

Вы можете увидеть открытые теги ширины и высоты графика, например:

<meta property="og:video:width" content="1920">
<meta property="og:video:height" content="1080">

Так что вы можете получить размеры там; -)

3 голосов
/ 05 октября 2014

Если вы загружаете видео с 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.

Суть здесь. Живой пример здесь.

2 голосов
/ 09 декабря 2014

Исходя из решения Исры.Да, похоже, что YouTube не разработал свой код API oEmbed, так как videoFrameSize возвращает 470 x 270 пикселей.Но, по крайней мере, это дает вам что-то, что GRAB может динамически удерживать!

Использование метода suck it и see, предложенного «Ли Тейлором», - это KISS-способ достижения этого, но не идеальный, если вам нужен динамический контент.

ОК - учитывая неточные размеры, предоставленные oEmbed - он действительно обеспечивает решение.

В настоящее время я разрабатываю генератор strusturedData для видеоконтента в галерее, связанной со всеми видео YouTube.

Вот неточный способ получения Dimension из youtube, но с наименьшим количеством его данных!

Как получить размер видео с youtube.

Этап 1: Вызов данных oEmbed с YouTube ::

$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:

используйте переменные в вашем коде так, как вам удобнее всего использовать: *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...