【问题标题】:YouTUBE API for Flash not working用于 Flash 的 YouTube API 无法正常工作
【发布时间】:2016-08-19 21:22:58
【问题描述】:

我们有一个浏览器 Flash 应用程序,它加载 YouTube 嵌入式 AS3 播放器来播放一些 YouTube 视频 (https://developers.google.com/youtube/flash_api_reference)

是的,我知道 Flash API 已被弃用,Flash 正在消亡等,但它是目前我们复杂的 3D 图形创作工具的唯一实用平台,就像播放 YouTube 视频的一个功能一样;强迫我们的客户在 Vimeo 上托管他们的视频来回答这个问题是很疯狂的。

到目前为止一切正常(代码或服务器没有变化),直到 2 周前,我们无法通过应用播放 YouTube 视频。

我发现我们目前使用的 url 格式给出了一个未找到文件的错误:

http://www.youtube.com/v/<my video code>?version=3&autoplay=1

经过一番调查,谷歌似乎更新了他们的 API 服务terms of service

因此,按照他们页面中的一些说明,我将 http 更改为 https:

https://www.youtube.com/v/<my video code>?version=3&autoplay=1

当我的应用尝试使用该 url 加载 YouTube 播放器时,Event.COMPLETE 事件被触发并且播放器数据似乎加载正常,但在 YouTube 播放器分配给 var 的这一部分:

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.allowDomainSecurity.allowInsecureDomain*.youtube.com*.ytimg.comhttps ://www.youtube.comhttps://s.ytimg.com等以及我能想到的http和https的任何变体) .所以我认为这不是问题。

我尝试了thread 中的解决方案,建议使用此行来解决错误 #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 的问题,但另一方面,直接加载 YouTube Chromeless AS3 播放器 API(没有播放/停止和时间线控件)工作正常:

https://www.youtube.com/apiplayer?version=3&video_id=<my video code>

任何有用的提示将不胜感激。

【问题讨论】:

  • 您在测试什么浏览器?我知道,从几个月前开始,Firefox 开始期望所有加载外部数据的 Flash 应用程序都从 HTTPS 服务器运行。其他浏览器可能已经效仿。最简单且面向未来的解决方案是将您的服务器更新为 HTTPS。您的主机或站点的控制面板可能已经允许简单的“启用 HTTPS”设置。与他们核实。
  • PS:不知道为什么无铬版本会通过(不要依赖于持久性)。然而,既然它有效,你能不能只花一两天时间制作自己的自定义播放/暂停/搜索控件?
  • 您找到解决方案了吗?我的 Flash 应用程序也有同样的问题。

标签: actionscript-3 flash youtube youtube-api youtube-data-api


【解决方案1】:

您收到错误Security Sandbox Violation,因为您尝试从计算机上的本地文件访问 Web/服务器文件,Adobe 安全不喜欢该文件。看看这个link

还发现了这个thread,它指出当沙盒被配置为以一种方式使用但被错误地以另一种方式使用时,可能会发生这种情况。

检查这些相关链接:

【讨论】:

  • 请仔细检查您的答案。引用提问者的开场白“我们有一个浏览器 Flash 应用程序...”.
【解决方案2】:

我遇到了同样的问题。看来 Youtube 现在有了更受限制的 crossdomain.xml 版本(https://www.youtube.com/crossdomain.xml):

<allow-access-from domain="*.youtube.com" />
<allow-access-from domain="s.ytimg.com" />

应该是这样的

<allow-access-from domain="*" />

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2020-09-17
    • 2015-01-31
    • 2017-07-25
    • 2020-12-29
    相关资源
    最近更新 更多