載入和播放聲音時的安全性考量

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

您應用程式存取聲音資料的功能有可能因為 Flash Player 或 AIR 的安全性模型而受到限制。每個聲音都受限於兩個不同安全執行程序的限制:內容本身的安全執行程序 (內容安全執行程序) 以及載入和播放聲音的應用程式或物件之安全執行程序 (擁有者安全執行程序)。對於應用程式安全執行程序中的 AIR 應用程式內容來說,所有聲音 (包括從其他網域載入的聲音) 都可供應用程式安全執行程序中的內容存取。但是,其他安全執行程序中的內容則與在 Flash Player 中執行之內容遵守相同的規則。如需有關一般 Flash Player 安全性模型以及安全執行程序之定義的詳細資訊,請參閱 安全性

內容安全執行程序可控制是否能使用 id3 屬性或 SoundMixer.computeSpectrum() 方法,從聲音擷取詳細的聲音資料。它並不會限制聲音檔案本身的載入或播放。

聲音檔案的原始網域會定義內容安全執行程序的安全性限制。一般而言,如果聲音檔案與載入該檔案的應用程式或物件之 SWF 檔位於相同的網域或資料夾,應用程式或物件便具有該聲音檔案的完整存取權限。如果聲音來自與應用程式不同的網域,則仍然可以使用原則檔案,將它加入內容安全執行程序。

您的應用程式可以將具有 checkPolicyFile 屬性的 SoundLoaderContext 物件當做參數傳遞至 Sound.load() 方法。將 checkPolicyFile 屬性設定為 true ,可以告知 Flash Player 或 AIR 從載入聲音的伺服器中尋找原則檔案。如果原則檔案存在,而且它授與載入 SWF 檔的網域存取權限,SWF 檔就可以載入聲音檔案、存取 Sound 物件的 id3 屬性,並且為載入的聲音呼叫 SoundMixer.computeSpectrum() 方法。

擁有者安全執行程序可以控制聲音的本機播放作業。開始播放聲音的應用程式或物件會定義擁有者安全執行程序。

只要正在播放的所有 SoundChannel 物件都符合下列準則, SoundMixer.stopAll() 方法便會讓它們全部靜音:

  • 這些聲音都是由相同擁有者安全執行程序中的物件開始播放。

  • 這些聲音都是來自具有原則檔案的來源,該檔案會將存取權限授與呼叫 SoundMixer.stopAll() 方法的應用程式或物件之網域。

但在 AIR 應用程式中,應用程式安全執行程序中的內容 (使用 AIR 應用程式所安裝的內容) 沒有這些安全性限制。

若要得知 SoundMixer.stopAll() 方法是否真的會停止所有播放中的聲音,您的應用程式可以呼叫 SoundMixer.areSoundsInaccessible() 方法。如果該方法傳回 true 值,則表示有些播放的聲音是在目前擁有者安全執行程序的控制之外,而且將不會由 SoundMixer.stopAll() 方法停止。

對於從外部檔案載入的所有聲音, SoundMixer.stopAll() 方法也會使播放磁頭不再繼續播放。不過,如果動畫移到新的影格,則內嵌於 FLA 檔中的聲音,以及使用 Flash 編寫工具附加到時間軸中影格的聲音,都可能會再次開始播放。