套件 | flash.media |
類別 | public class SoundLoaderContext |
繼承 | SoundLoaderContext Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
load()
方法。
使用此類別時,必須考慮下列安全性模型:
- 如果呼叫的 檔在網路安全執行程序中,而要載入的聲音檔卻位於本機,則不允許載入並播放聲音。
- 根據預設,如果呼叫的 位於本機而且嘗試載入並播放遠端聲音,則不允許載入並播放該聲音。 使用者必須授與允許此行為的明確權限。
- 處理聲音的特定作業會受到限制。 除非您實作 URL 原則檔,否則已載入聲音中的資料無法由不同網域中的檔案存取。此限制下的聲音相關 API 為
Sound.id3
屬性以及SoundMixer.computeSpectrum()
、SoundMixer.bufferTime
和SoundTransform()
方法。
但在 Adobe AIR 中,application
安全執行程序中的內容 (使用 AIR 應用程式所安裝的內容) 沒有這些安全性限制。
如需安全性詳細資訊,請參閱「Flash Player 開發人員中心」主題:安全性。
屬性 | 定義自 | ||
---|---|---|---|
bufferTime : Number = 1000
聲音開始串流之前,將串流聲音預先載入緩衝區的毫秒數。 | SoundLoaderContext | ||
checkPolicyFile : Boolean = false
指定應用程式是否應該在開始載入聲音之前,嘗試從載入聲音的來源伺服器下載 URL 原則檔案。 | SoundLoaderContext | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object |
方法 | 定義自 | ||
---|---|---|---|
會建立新的 SoundLoaderContext 物件。 | SoundLoaderContext | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object |
bufferTime | 屬性 |
public var bufferTime:Number = 1000
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
聲音開始串流之前,將串流聲音預先載入緩衝區的毫秒數。
請注意,您無法透過設定全域 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, Flash Lite 4 |
指定應用程式是否應該在開始載入聲音之前,嘗試從載入聲音的來源伺服器下載 URL 原則檔案。這個屬性會套用至使用 Sound.load()
方法,從呼叫中檔案本身的網域外部載入的聲音。
當您從呼叫檔案本身的網域外部載入聲音,而且呼叫檔案中的程式碼需要對此聲音資料進行低階存取時,請將這個屬性設定為 true
。對聲音資料進行低階存取的範例包括,參照 Sound.id3
屬性以便取得 ID3Info 物件,或呼叫 SoundMixer.computeSpectrum()
方法以便從載入的聲音取得聲音樣本。 如果您嘗試存取聲音資料,但沒有在載入時將 checkPolicyFile
屬性設定為 true
,便可能會收到 SecurityError 例外,因為尚未下載所需的原則檔。
如果您不需要對載入的聲音資料進行低階存取,請避免將 checkPolicyFile
設定為 true
。 檢查原則檔會耗用網路頻寬,而且可能會延遲開始下載的時間,因此應該僅在必要時使用。
當您呼叫 Sound.load()
並將 SoundLoaderContext.checkPolicyFile
設定為 true
時,Flash Player 或 AIR 必須先順利下載相關的 URL 原則檔,或判斷沒有這類原則檔存在,然後再開始下載指定的聲音。Flash Player 或 AIR 會依照此順序執行下列動作,以確認原則檔是否存在:
- Flash Player 或 AIR 會考量已經下載的原則檔。
- Flash Player 或 AIR 會嘗試下載在對
Security.loadPolicyFile()
的呼叫中指定的任何擱置原則檔。 - Flash Player 或 AIR 會嘗試從對應至聲音 URL (
/crossdomain.xml
,和URLRequest.url
位於相同伺服器上) 的預設位置下載原則檔。(此聲音的 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
事件後,您就可以檢查 Sound.url
屬性值 (包含該聲音的最終 URL)。 然後再根據該聲音的最終 URL 計算,以原則檔 URL () 呼叫 Security.loadPolicyFile()
方法。 最後,輪詢 Sound.id3
的值,直到沒有擲回任何例外為止。
這個屬性不會套用至 AIR 應用程式安全執行程序中的內容。應用程式安全執行程序中的內容一定會擁有聲音內容的程式存取權,不論來源為何都一樣。
如需安全性詳細資訊,請參閱「Flash Player 開發人員中心」主題:安全性。
相關 API 元素
SoundLoaderContext | () | 建構函式 |
public function SoundLoaderContext(bufferTime:Number = 1000, checkPolicyFile:Boolean = false)
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會建立新的 SoundLoaderContext 物件。
參數bufferTime:Number (default = 1000 ) — 開始串流之前,將串流聲音預先載入緩衝區的秒數。
| |
checkPolicyFile:Boolean (default = false ) — 指定載入物件時是否 (true 為是) 應該檢查 URL 原則檔案的存在。
|
範例 ( 如何使用本範例 )
SoundLoaderContext 物件的第一個參數 (context
) 會用來將預設緩衝值從一秒增加至三秒。 (值的單位是毫秒)。 如果 SoundLoaderContext 物件的第二個參數設定為 true
,Flash Player 會在載入物件後檢查跨網域原則檔案。 這裡,它已設為預設值 false
,因此將不會檢查任何原則檔。 Sound 物件的 load()
方法會使用內容設定,以確定在開始對聲音進行串流處理之前,會花費 3 秒鐘的時間將串流聲音預先載入緩衝區。 URLRequest
物件會決定檔案 (來自 Adobe 的 Podcast) 的位置。 如果載入聲音檔案期間發生 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); } } }
Tue Jun 12 2018, 03:47 PM Z