2012-03-25 5 views
3

У меня есть бесхромовый проигрыватель YouTube, на который я пытаюсь загрузить видео, но работают только некоторые видео - не все. Если я не ошибаюсь, те, которые не загружаются, связаны с нарушением авторских прав (например, какой-то эпизод мультфильма не загружается, но домашний фильм о ребенке, делающем backflip). То, что я пытаюсь сделать, это либо выяснить, загрузится ли это видео, либо после того, как мы попытаемся загрузить их или раньше.Как я могу определить, действительно ли встраивается видео YouTube, прежде чем пытаться его загрузить?

В качестве примера можно привести два видео Nataly Dawn. Один загружается, другой - нет.

// loads and plays the video 
ytplayer.loadVideoById("GhDGdT33K0k"); 

// doesn't load/play the video 
ytplayer.loadVideoById("-KYUPJIzCyM"); 

Глядя на данные обоих the working video и non-working video, я не могу видеть ничего, что указывало бы, что последний не является встраиваемым. [Я ищу <yt:accessControl> тегов или отсутствующий yt:format='5' (см How do I use the Youtube API to check if a video is embeddable?), но безрезультатно.]

Из того, что я пробовал в консоли, loadVideoByIdвсегда возвращается undefined, независимо от того, не на самом деле загружается видео. Кажется, я не могу найти метод API, чтобы определить, сделало ли это видео.

+0

Оба видео вы упомянули, как представляется, загружаемый и воспроизводиться. Например, используйте: http://code.google.com/apis/ajax/playground/#change_the_playing_video – mjhm

+0

Игровая площадка google иногда воспроизводит видео, которые не встраиваются, например qvr6K02dglc. Вы можете попробовать внедрить его в локальный HTML-файл на вашем диске. –

ответ

3

Оба упомянутых вами видеоролика кажутся загружаемыми и воспроизводимыми для меня. Например, используйте: google code playground и вставьте свои видео в теги опций HTML.

Вот несколько советов.

  • Используйте параметр «v = 2» в запросе gdata для использования текущего API данных YT.
  • This blog post lists several additional restrictions that you may need to check for to determine if a video playable or embeddable.
  • Некоторые видео могут быть встроены, но не воспроизводятся. В этом случае единственное, что вы можете сделать, это использовать JavaScript PlayerAPI для поиска события stateChange, который говорит, что он играет, а затем использовать setInterval для опроса видео через getCurrentTime, чтобы узнать, действительно ли он играет. Это немного сумасшествие для большинства приложений.
+0

Из сообщения в блоге «Есть даже более тонкие ограничения, которые время от времени вступают в игру. Не все из них в настоящее время запрашиваются через API. Например, некоторые видео могут воспроизводиться только в определенном наборе доменов. Как я упоминал выше, только надежный способ узнать, имеет ли пользователь доступ к просмотру видео, чтобы заставить их попробовать посмотреть его ». Тогда я посмотрю на ваш последний вариант.:) –

+0

Я в конце концов узнал, что я не мог понять заранее, если видео загрузится; однако, после размещения обработчика событий onError, я смог заставить его вернуть код ошибки «150», «трансляция, когда запрошенное видео не позволяет воспроизведение во встроенных проигрывателях». Почему это загружается на игровой площадке кода, а не в моем конкретном коде, кто знает. –

+0

, по-видимому, есть некоторые видео, которые не разрешено встраивать, однако на детской площадке вы можете смотреть их, например, qvr6K02dglc –

0

В настоящее время вы можете подключить событие onError встроенного api и проверить коды ошибок 101 и 150 (они одинаковы), которые определяют, что видео было заблокировано из встроенной игры. Кроме того, это позволит вам действовать по-другому в случае возникновения других ошибок (плохой запрос, html 5 вопросов и т. Д.).

function onError(event){ 
    switch(event.data){ 
     case 2: 
      console.log('request contains an invalid parameter value') 
      break 
     case 5: 
      console.log('The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.') 
      break 
     case 100: 
      console.log('The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.') 
      break 
     case 101: 
     case 150: 
      console.log('Uploader has blocked this content from embedded playback') 
      break 
     default: 
      console.log('error code: '+event.data) 

    } 
} 

Если вы хотите внедряемые результаты видео должны быть возвращены в API поиска, включают в себя videoEmbeddable:"true" в вашем request