Проигрыватель YouTube меньше минимального размера

В документах API YouTube указано, что минимальный размер встроенного проигрывателя должен составлять 200 x 200 пикселей (ссылка).

Чтобы было достаточно места для важных функций проигрывателя, размер проигрывателя должен быть не менее 200 на 200 пикселей.

Мое тестирование привело меня к выводу, что это правда. Если я пытаюсь воспроизвести видео в проигрывателе, размер которого меньше минимального, я получаю сообщение об ошибке, в котором говорится: «Видеопроигрыватель слишком мал». и видео не воспроизводится.

Однако возможны более мелкие игроки. SwitchCam, например, использует их на страницах как этот.

SwitchCam для небольших игроков

Я попытался уменьшить размер проигрывателя, установив его атрибуты высоты и ширины, используя его атрибут стиля и заключив его в содержащий элемент, для которого установлены его высота и ширина. Ни один из этих вариантов не работает.

Что еще можно попробовать, чтобы уменьшить размер плеера?

ИЗМЕНИТЬ

Похоже, что некоторые видео будут воспроизводиться на очень маленьких проигрывателях, а другие нет. Если вы собираетесь протестировать потенциальное решение, используйте этот идентификатор видео: -rMTExNTx2s


person David Tuite    schedule 29.04.2013    source источник
comment
youtube.com/html5 ‹— интересно, вы участвуете в пробной версии?   -  person Nirvana Tikku    schedule 03.05.2013
comment
Я думаю, что эта пробная версия просто дает вам проигрыватель HTML5, когда вы находитесь на сайте YouTube. Я говорю об использовании API проигрывателя YouTube, а это совсем другое.   -  person David Tuite    schedule 03.05.2013
comment
Я не совсем уверен, что это правда. Я начал создавать модульные тесты для написанного мной плагина jQuery (tubeplayer: github.com/nirvanatikku/jQuery -TubePlayer-Plugin), и я заметил, что ошибка минимального размера проигрывателя (onErrorNotEmbeddable) на самом деле не возникает, если я включил пробную версию. По сути, я могу установить видео на ‹ (200 200) без каких-либо проблем, если я включил пробный режим. Я хочу лучше понять это поведение, поскольку оно больше похоже на ошибку, чем на что-либо еще (на основе их документации).   -  person Nirvana Tikku    schedule 03.05.2013
comment
Все еще кажется, что мне придется попросить всех моих пользователей включить эту пробную версию, иначе они увидят ошибки. Мне это не кажется рабочим решением. Возможно, ситуация улучшится, если YouTube интегрирует функции этой пробной версии.   -  person David Tuite    schedule 14.05.2013
comment
просто чтобы продолжить, вы правы в том, что это не является возможным решением. было просто любопытно.   -  person Nirvana Tikku    schedule 14.05.2013


Ответы (2)


Оказывается, есть ограничение на некоторые видео, которые не позволяют вставлять видео размером менее 200 * 200 (px). Это ограничение распространяется не на все видео (возможно, оно старше последнего обновления API YouTube, я не знаю).

После некоторых тестов это ограничение применяется, когда состояние готовности проигрывателя YouTube изменяется на статус: PlayerState.PLAYING (evt.data === 1)

Таким образом, в качестве основного обходного пути вы можете изменить размер iframe «на лету» после обновления состояния, см. Демо и код ниже:

ДЕМО

var player,
     myWidth = "114px",
     myHeight = "65px";

 function onYouTubePlayerAPIReady() {
     player = new YT.Player('testVideo', {
         height: myWidth,
         width: myHeight,
         videoId: '-rMTExNTx2s',
         events: {
             'onReady': onPlayerReady,
             'onStateChange': onPlayerStateChange
         },
          playerVars: {
             controls:0,
             showinfo:0
          }        
     });
 }

function onPlayerStateChange(evt) {
     if (evt.data == -1) {
        evt.target.a.width = "200px"; 
        evt.target.a.height = "200px"; 
     }
     else if (evt.data == 1) {
          evt.target.a.className = "";
         evt.target.a.width = myWidth; 
         evt.target.a.height = myHeight; 
         done = true;
     }
 }

Как вы можете видеть в этом DEMO, я установил скрытый класс с помощью css .hidden{opacity:0}. Это используется, чтобы скрыть проигрыватель перед загрузкой видео. Использование display:none; не работает, это, безусловно, другое ограничение API. Тем не менее в этой DEMO вам нужно подождать, пока видео не начнет воспроизводиться, чтобы увидеть, как появляется проигрыватель. Теперь вам нужно найти лучший обходной путь, который может соответствовать вашим потребностям, используя, например, миниатюру изображения и переходя от проигрывателя с отрицательным смещением к желаемому местоположению, когда состояние готовности изменилось, надеюсь, вы поняли идею.

person A. Wolff    schedule 14.05.2013
comment
эта скрипка работает... она делает то, что вы хотите. так в чем проблема сейчас? - person dutchguy; 15.05.2013
comment
Это работает для конкретного видео, используемого в примере. Он не работает для всех видео (что более важно, он не работает для определенного набора видео, для которого мне это нужно). Если я изменю идентификатор видео, он сломается: jsfiddle.net/eDZrP/1 Я приму, если вы можете заставить его работать с идентификатором видео из моей скрипки или объяснить, почему он работает для одного видео, а не для другого. - person David Tuite; 17.05.2013
comment
@roasted Очень мило. Спасибо. - person David Tuite; 17.05.2013
comment
@A.Wolff A.Wolff, как сделать так, чтобы не было автозапуска? - person EdiSainer; 11.09.2013

Не самое элегантное решение, но задумывались ли вы о том, чтобы уменьшить размер крупного проигрывателя с помощью Преобразование CSS3: свойство scale()? Осторожно, это не поддерживается в IE ‹ 9.

Основная причина, по которой не этого делать, заключается в том, что вы уменьшите размер элементов управления пользовательского интерфейса, что, в свою очередь, снизит удобство использования.

person chrisfrancis27    schedule 29.04.2013
comment
Спасибо за идею, сейчас попробую. Размер элементов управления пользовательского интерфейса не является большой проблемой, поскольку я все равно реализую свои собственные элементы управления. - person David Tuite; 29.04.2013
comment
К сожалению, не работает. YouTube определяет, что проигрыватель слишком мал, и отказывается воспроизводить видео. - person David Tuite; 29.04.2013