У нас есть приложение для браузера Flash, которое загружает встроенный проигрыватель AS3 YouTube для воспроизведения некоторых видеороликов YouTube (https://developers.google.com/youtube/flash_api_reference)
Да, я знаю, что Flash API устарел, Flash умирает и т. Д., Но в настоящее время это единственная практическая платформа для нашего сложного инструмента разработки трехмерной графики, который, как одна функция, воспроизводит видео с YouTube; и было бы безумием заставлять наших клиентов размещать свои видео на Vimeo, чтобы решить эту проблему.
Пока все работает нормально (без изменений в коде или сервере), до 2 недель назад, когда мы не могли воспроизводить видео YouTube из приложения.
Я обнаружил, что формат URL, который мы использовали до сих пор, давал ошибку «файл не найден»:
http://www.youtube.com/v/<my video code>?version=3&autoplay=1
После небольшого исследования выяснилось, что Google обновил свои условия использования своих служб API сервис.
Итак, следуя некоторым указаниям на их странице, я изменил http на https:
https://www.youtube.com/v/<my video code>?version=3&autoplay=1
Когда мое приложение пытается загрузить проигрыватель YouTube с использованием этого URL-адреса, запускается событие Event.COMPLETE
, и данные проигрывателя, кажется, загружаются нормально, но в этой части, где проигрыватель YouTube назначается переменной:
private function onLoaderComplete(e:Event):void {
var player = e.currentTarget.content;
....
}
Выдает следующую ошибку:
*** Security Sandbox Violation ***
SecurityDomain http://<my app url> tried to access incompatible context 'https://www.youtube.com/v/<my video code>?version=3&autoplay=1'
SecurityError: Error #2121: Security sandbox violation: LoaderInfo.content: http://<my app url> cannot access https://www.youtube.com/v/<my video code>?version=3&autoplay=1. This may be worked around by calling Security.allowDomain.
Я установил все Security.allowDomain
и Security.allowInsecureDomain
, о которых я могу думать (*.youtube.com
, *.ytimg.com
, https ://www.youtube.com
, https://s.ytimg.com
и т. Д. И любые варианты http и https, о которых я могу думать). Так что я не думаю, что это проблема.
Я попробовал решение в этом потоке < / a>, где рекомендуется использовать эту строку для решения ошибки № 2121:
loaderContext.securityDomain = SecurityDomain.currentDomain;
Теперь он даже не запускает событие Event.COMPLETE
. Только событие SecurityErrorEvent.SECURITY_ERROR
, поэтому контент не загружается:
*** Security Sandbox Violation ***
Connection to https://www.youtube.com/v/<my video code>?version=3&autoplay=1 halted - not permitted from http://<my app url>
httpStatus (error): [HTTPStatusEvent type="httpStatus" bubbles=false cancelable=false eventPhase=2 status=0 redirected=true responseURL=null]
SecurityError:
[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Security sandbox violation: http://<my app url> cannot load data from https://www.youtube.com/v/<my video code>?version=3&autoplay=1."]
Так что я считаю, что это шаг назад.
Я думал, что это может быть проблема с HTTP на HTTPS, но, с другой стороны, загрузка API-интерфейса YouTube Chromeless AS3 напрямую (без элементов управления воспроизведением / остановкой и временной шкалой) работает нормально:
https://www.youtube.com/apiplayer?version=3&video_id=<my video code>
Мы будем благодарны за любую полезную подсказку.