作为数据访问加载的媒体Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本 要访问加载数据,请使用 BitmapData.draw() 和 SoundMixer.computeSpectrum() 方法。默认情况下,您无法从其他沙箱中加载的媒体呈现或播放的图形或音频对象中获取像素数据或音频数据。但是,您可以使用下列方法授予跨沙箱边界访问此类数据的权限:
以下各节提供有关访问位图、声音和视频数据的详细信息。 访问位图数据借助 BitmapData 对象的 draw() 方法,可以将任何显示对象的当前显示像素绘制到 BitmapData 对象。这样能够包括 MovieClip 对象、Bitmap 对象或任何显示对象的像素。要使用 draw() 方法将像素绘制到 BitmapData 对象,必须满足以下条件:
如果不满足上述条件,则会引发 SecurityError 异常。 当使用 Loader 类的 load() 方法加载图像时,可以指定一个 context 参数,该参数是一个 LoaderContext 对象。如果将 LoaderContext 对象的 checkPolicyFile 属性设为 true,则 Flash Player 将在从其中加载图像的服务器上查找 URL 策略文件。如果存在策略文件且该文件允许执行加载的 SWF 文件所在的域进行访问,则会允许该文件访问 Bitmap 对象中的数据,否则就不允许。 此外,还可以通过文本字段中的 <img> 标签在加载的图像中指定 checkPolicyFile 属性。有关详细信息,请参阅使用文本字段中的 <img> 标签加载 SWF 文件和图像。 访问声音数据以下与声音相关的 ActionScript 3.0 API 存在一些安全限制:
每个声音都具有两种与之关联的沙箱(一个内容沙箱和一个所有者沙箱):
当使用 Sound 类的 load() 方法加载声音时,可以指定一个 context 参数,该参数是一个 SoundLoaderContext 对象。如果将 SoundLoaderContext 对象的 checkPolicyFile 属性设置为 true,运行时会在从其加载声音的服务器上检查是否存在 URL 策略文件。如果存在策略文件,并且该文件支持加载代码的域,则允许该代码访问 Sound 对象的 id 属性;否则,将不允许。此外,设置 checkPolicyFile 属性可以为加载的声音启用 SoundMixer.computeSpectrum() 方法。 可以使用 SoundMixer.areSoundsInaccessible() 方法确定对 SoundMixer.stopAll() 方法的调用是否会因调用方无法访问一个或多个声音所有者的沙箱而停止全部声音。 调用 SoundMixer.stopAll() 方法会停止与 stopAll() 的调用方位于同一所有者沙箱中的那些声音。它还会停止由调用 Security.allowDomain() 方法的 SWF 文件来启动播放的声音,以允许调用 stopAll() 方法的 SWF 文件所在的域进行访问。任何其他声音均不会停止,可以通过调用 SoundMixer.areSoundsInaccessible() 方法来确定此类声音是否存在。 调用 computeSpectrum() 方法要求播放的每个声音应与调用该方法的对象位于同一沙箱中,或者位于已向调用方的沙箱授予权限的源;否则会引发 SecurityError 异常。对于从 SWF 文件库中嵌入声音加载的声音,通过在加载的 SWF 文件中调用 Security.allowDomain() 方法授予权限。对于从非 SWF 文件的源(源自加载的 mp3 文件或视频文件)中加载的声音,源服务器上的 URL 策略文件将授予访问所加载媒体中数据的权限。 有关详细信息,请参阅作者(开发人员)控制和网站控制(策略文件)。 要从 RTMP 流访问声音数据,必须拥有对服务器的访问权限。使用服务器端 ActionScript Client.audioSampleAccess 属性允许访问 Flash Media Server 上的特定目录。有关详细信息,请参阅 Server-Side ActionScript Language Reference。 访问视频数据可以使用 BitmapData.draw() 方法捕获视频当前帧中的像素数据。 视频有两种不同形式:
要使用 BitmapData.draw() 方法从 RTMP 流提取运行时图形,必须拥有对服务器的访问权限。使用服务器端 ActionScript Client.videoSampleAccess 属性允许访问 Flash Media Server 上的特定目录。有关详细信息,请参阅 Server-Side ActionScript Language Reference。 当调用 BitmapData.draw() 方法,并且 source 参数为渐进式视频时,BitmapData.draw() 的调用方必须与 FLV 文件位于同一沙箱,或者 FLV 文件所在的服务器上必须存在一个策略文件,用以向执行调用的 SWF 文件所在的域授予访问权限。通过将 NetStream 对象的 checkPolicyFile 属性设置为 true,可以请求下载该策略文件。 |
|