包 | flash.media |
类 | public class SoundLoaderContext |
继承 | SoundLoaderContext Object |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
load()
方法。
在使用此类时,请考虑以下安全模型:
Sound.id3
属性以及 SoundMixer.computeSpectrum()
、SoundMixer.bufferTime
和 SoundTransform()
方法。
但在 Adobe AIR 中,application
安全沙箱中的内容(使用 AIR 应用程序安装的内容)不受这些安全限制的约束。
有关安全性的详细信息,请参阅以下部分:
属性 | 定义方 | ||
---|---|---|---|
bufferTime : Number = 1000 在开始传输声音流之前将其预加载到缓冲区中所用的毫秒数。 | SoundLoaderContext | ||
checkPolicyFile : Boolean = false 指定应用程序是否应在开始加载声音之前尝试从所加载声音的服务器下载 URL 策略文件。 | SoundLoaderContext | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object |
方法 | 定义方 | ||
---|---|---|---|
创建新的声音加载器上下文对象。 | SoundLoaderContext | ||
指示对象是否已经定义了指定的属性。 | Object | ||
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
指示指定的属性是否存在、是否可枚举。 | Object | ||
设置循环操作动态属性的可用性。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object |
bufferTime | 属性 |
public var bufferTime:Number = 1000
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在开始传输声音流之前将其预加载到缓冲区中所用的毫秒数。
请注意,无法通过设置全局 SoundMixer.bufferTime
属性来覆盖 SoundLoaderContext.bufferTime
的值。 SoundMixer.bufferTime
属性影响 SWF 文件中嵌入声音流的缓冲时间,该属性与动态创建的 Sound 对象(即在 ActionScript 中创建的 Sound 对象)无关。
checkPolicyFile | 属性 |
public var checkPolicyFile:Boolean = false
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
指定应用程序是否应在开始加载声音之前尝试从所加载声音的服务器下载 URL 策略文件。此属性应用于使用 Sound.load()
方法从执行调用的 文件自己的域外加载的声音。
此属性仅适用于在 AIR 应用程序沙箱之外运行的 SWF 内容。
如果从执行调用的文件自己的域外加载声音,并且执行调用的文件中的代码需要对声音数据进行低级访问,请将此属性设置为 true
。对声音数据进行低级访问的示例包括引用 Sound.id3
属性以获取 ID3Info 对象,或调用 SoundMixer.computeSpectrum()
方法以便从加载的声音中获取声音样本。如果在加载时没有将 checkPolicyFile
属性设置为 true
的情况下尝试访问声音数据,则可能会出现 SecurityError 异常,因为尚未下载所需的策略文件。
如果不需要对正在加载的声音数据进行低级访问,请避免将 checkPolicyFile
设置为 true
。检查策略文件会占用网络带宽并且可能会延迟下载的开始时间,因此只应在必要时才执行此操作。
如果在将 SoundLoaderContext.checkPolicyFile
设置为 true
的情况下调用 Sound.load()
,则 Flash Player 或 AIR 必须在开始下载指定的声音之前成功下载相关的 URL 策略文件,或确定不存在这样的策略文件。Flash Player 或 AIR 将按此顺序执行下列操作,以验证策略文件是否存在:
Security.loadPolicyFile()
调用中指定的任何未处理的策略文件。
URLRequest.url
所在的同一服务器上的 /crossdomain.xml
)下载策略文件。(声音的 URL 在传递给 Sound.load()
或 Sound() 构造函数的 URLRequest 对象的 url
属性中指定。)
无论哪种情况,Flash Player 或 AIR 都要求声音服务器上存在一个正确的策略文件,该文件可以提供对 URLRequest.url
上的声音文件的访问(根据该策略文件的位置),并允许执行调用的文件所在的域通过一个或多个 <allow-access-from>
标签来访问该声音。
如果将 checkPolicyFile
设置为 true
,则 Flash Player 或 AIR 会等到策略文件验证完成后再加载声音。应该等到从 Sound 对象调度了 progress
和 complete
事件后再对声音数据执行任何低级操作,如调用 Sound.id3
或 SoundMixer.computeSpectrum()
。
如果将 checkPolicyFile
设置为 true
,但未找到适当的策略文件,则将直到执行需要策略文件的操作时才会收到错误,然后,Flash Player 或 AIR 会引发 SecurityError
异常。 收到 complete
事件后,通过在 try
块内获取 Sound.id3
的值,并查看是否会引发 SecurityError
,您可以测试是否已找到相关策略文件。
如果正在从使用服务器端 HTTP 重定向的 URL 中下载声音,请谨慎使用 checkPolicyFile
。Flash Player 或 AIR 尝试检索与传递到 Sound.load()
的 URLRequest 对象的 url
属性相对应的策略文件。如果最终声音文件由于 HTTP 重定向而来自不同的 URL,那么,最初下载的策略文件可能不适用于声音的最终 URL,此 URL 与安全决策相关。
如果发生此情况,这里有一个可能的解决方案。收到 progress
或 complete
事件后,可以检查包含声音的最终 URL 的 Sound.url
属性值。然后用根据声音的最终 URL 计算的策略文件 URL 调用 Security.loadPolicyFile()
方法。最后,轮询 Sound.id3
的值,直到没有引发异常为止。
这一点不适用于 AIR 应用程序沙箱中的内容。应用程序沙箱中的内容始终可以通过编程方式访问声音内容,无论这些内容的来源是什么。
有关策略文件的详细信息,请参阅《ActionScript 3.0 编程》中的“Flash Player 安全性”一章。
另请参见
SoundLoaderContext | () | 构造函数 |
public function SoundLoaderContext(bufferTime:Number = 1000, checkPolicyFile:Boolean = false)
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
创建新的声音加载器上下文对象。
参数bufferTime:Number (default = 1000 ) — 在开始传输声音流之前,将其预加载到缓冲区中所用的秒数。 | |
checkPolicyFile:Boolean (default = false ) —
指定在加载对象时是否应检查 URL 策略文件是否存在,如果是,则为 (true )。
|
可以使用 SoundLoaderContext 对象的第一个参数 (context
) 将默认缓冲时间值从 1 秒增加到 3 秒。(该值以毫秒为单位。)如果将 SoundLoaderContext 对象的第二个参数设置为 true
,Flash Player 将在加载对象后检查跨域策略文件。这里将其设置为默认值 false
,所以将不会检查策略文件。声音对象的 load()
方法将使用 context 设置,以确保在开始传输声音流之前,花 3 秒钟的时间将流声音预加载到缓冲区中。URLRequest
对象确定文件(来自 Adobe 的播客)的位置。如果在加载声音文件的过程中发生 IOErrorEvent.IO_ERROR
错误,则会调用 errorHandler()
方法。
package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundLoaderContext; import flash.events.IOErrorEvent; public class SoundLoaderContextExample extends Sprite { public function SoundLoaderContextExample() { var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); var context:SoundLoaderContext = new SoundLoaderContext(3000, false); snd.load(req, context); snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); } private function errorHandler(errorEvent:IOErrorEvent):void { trace("The sound could not be loaded: " + errorEvent.text); } } }