Вопрос по javascript, google-chrome-extension, youtube – Невозможно получить доступ к видео YouTube через API JS YouTube внутри расширения Google Chrome, но можно использовать в JS Fiddle

6

Я пытаюсь понять логику, которая стоит за тем, чтобы отключить «блокирование». механизм воспроизведения видео с YouTube.

Здесь я пытаюсь воспроизвести песню, которая заблокирована от встроенного воспроизведения внутри JS Fiddle. Обратите внимание, что это работает:

http://jsfiddle.net/E7B9C/17/

enter image description here

Теперь я использую точно такой же код внутри моего расширения Google Chrome:

http://www.meomixes.com/ если вы хотите щелкнуть, чтобы загрузить расширение.

http://www.meomixes.com/Test.crx для прямой ссылки на расширение.

Заметьте, что я не могу воспроизвести видео на YouTube:

enter image description here

Мне было интересно, каковы были мои варианты отладки для этого сценария. У кого-нибудь есть идеи по поводу того, что мне следует изучить? Я пытался запросить следующие разрешения в моем манифесте, но это не оказало никакого влияния:

"permissions": [
"http://*.youtube.com",
"https://*.youtube.com",
"http://*.google.com",
"https://*.google.com"
]

Я разместил полный источник Test.crx здесь:http://www.meomixes.com/Test.zip Загрузить:

Unzip Go to Google Chrome's extension page and enable 'Developer Mode' Click 'Load Unpacked Extension' and point to the unzipped directory. Observe that the video does not play back.

Последнее замечание: песня счастливо играет в посте на Facebook.

РЕДАКТИРОВАТЬ: Я нашел это:http://gdata.youtube.com/feeds/api/videos/UfESt2KdOdc?v=2&prettyprint=true для видео, о котором идет речь. Это в паре с:http://apiblog.youtube.com/2011/12/understanding-playback-restrictions.html.

Просто опираясь на первый ответ. По существу, существует параметр, называемый «синдикация». который препятствует воспроизведению на «внешних устройствах»; такие как телевизоры и расширения Google Chrome.

Сейчас мы ищем способы обойти эту проблему.

Ваш Ответ

1   ответ
9

по-видимому, блокирует показ определенных лицензированных URL-адресов по ссылкам.

Проблем

Эти ссылающиеся схемы, похоже, не работают с конкретным видео, с которым вы тестируете.

 chrome-extension://
 file://

Похоже, что лицензиат контента, UMG, решил запретить воспроизведение любых расширений или локальных файлов. Альтернативой является избегать использования видео, которые содержат лицензионный контент, но это скучно.

Это неудобно, но есть обходной путь, который позволит вам внедрить проигрыватель iframe в расширение. Все, что волнует Youtube, это то, что плеер встроен на страницу где-то в Интернете.

Proxy Page

Попробуй заменить iframe src в Popup.htm с кадром результата jsfiddle из вашего примера и перезагрузите плагин.

 <iframe width="200" height="200" src="http://fiddle.jshell.net/E7B9C/17/show/"></iframe>

Вы должны увидеть ранее недоступное видео. Ваше расширение теперь ссылается на страницу, которую вы контролируете на jshell.net. Все, что знает YouTube, это то, что вы звоните их игроку с jshell.net.

Управление

Теперь, когда у нас есть плеер, вы можете заметить, что у вас нет доступных элементов управления Youtube, поскольку вы теперь ссылаетесь на свой собственный iframe, который ссылается на iframe Youtube и его API. Как будто это уже не было достаточно забавно, теперь вы можете создать собственный API iframe для связи от расширения chrome до вашего iframe и iframe на Youtube!

При обычных обстоятельствах родитель может установить дочерний фрейм window.location.hash, и этот фрейм просматривает и анализирует любые изменения, которые происходят. Затем ребенок вызывает некоторый обратный вызов в родитель напрямую с некоторой новой информацией.

Редактировать Вместо использования window.location.hash, вы можете вместо этого использовать HTML5 window.postMessage () и избегать необходимости постоянно проверять и анализировать хеш.

Это должно заставить тебя работать.

Это очень подробный ответ. Я буду играть с ним, когда у меня будет время, надеюсь, этим вечером. Я сомневаюсь, потому что контент YouTube, который я хочу отобразить, является динамическим - я хочу иметь возможность загружать видео по требованию, в то же время обходя блокировщик YouTube. Я могу просто написать алгоритм, чтобы найти идентичное видео, которое не ограничено по содержанию. Не уверен, что будет проще в данный момент. Благодарю за ваш ответ! :) РЕДАКТИРОВАТЬ: Мне также интересно - можно ли подделать ссылающийся URL s.t. кажется, не из расширения Google Chrome? Читаю об этом сейчас Sean Anderson
Я пошел дальше и принял твой ответ на исследование, проведенное на твоей стороне. Я пошел дальше и просто написал логику, чтобы найти копию песни. Я выбрал этот маршрут, потому что есть больше способов отключить песню, чем просто проблема встраивания. Таким образом, казалось целесообразным найти способ, который бы решал все проблемы в одном. Ура человек. :) Sean Anderson
Я играл с записью в document.referrer, но даже в качестве расширения он по-прежнему доступен только для чтения. Вы можете использовать location.hash для передачи идентификатора Youtube, который вы хотите воспроизвести, во встроенный iframe, чтобы iframe перехватил идентификатор и динамически изменил код для вставки. Workman
@ SeanAnderson: Вы также можете назначить ему награду. В противном случае он получит только половину. У вас осталось всего 7 часов. Madara Uchiha♦

Похожие вопросы