ロードされたメディアへのデータとしてのアクセス

Flash Player 9 以降、Adobe AIR 1.0 以降

ロードされたデータにアクセスするには、BitmapData.draw() メソッド、BitmapData.drawWithQuality() メソッドおよび SoundMixer.computeSpectrum() メソッドを使用します。デフォルトでは、別のサンドボックス内にロードされたメディアによってレンダリングまたは再生されるグラフィックオブジェクトまたはオーディオオブジェクトから、ピクセルデータまたはオーディオデータを取得できません。ただし、次のメソッドを使用すれば、このようなサンドボックス境界をまたがるデータへのアクセス許可を付与できます。

  • アクセス対象のデータをレンダリングまたは再生しているコンテンツ内で、Security.allowDomain() メソッドを呼び出し、別のドメインにあるコンテンツへのデータアクセスを許可します。

  • ロードされたイメージ、サウンドまたはビデオの場合は、ロードされたファイルのサーバー上で URL ポリシーファイルを追加します。このポリシーファイルでは、BitmapData.draw() メソッド、BitmapData.drawWithQuality() メソッドまたは SoundMixer.computeSpectrum() メソッドを呼び出してファイルからデータを抽出しようとする SWF ファイルのドメインへのアクセスを許可する必要があります。drawWithQuality メソッドは Flash Player 11.3 以降および AIR 3.3 以降で使用できます。

次の節では、ビットマップ、サウンド、およびビデオのデータにアクセスする方法を詳しく説明します。

ビットマップデータへのアクセス

BitmapData オブジェクトの draw() メソッドと drawWithQuality() メソッド(Flash Player 11.3 および AIR 3.3)を使用すると、任意の表示オブジェクトの現在表示されているピクセルを BitmapData オブジェクトに描画できます。描画できるピクセルには、MovieClip オブジェクト、Bitmap オブジェクトまたは任意の表示オブジェクトのピクセルがあります。これらのメソッドを使用して BitmapData オブジェクトにピクセルを描画するには、次の条件を満たす必要があります。

  • ロードされたビットマップ以外のソースオブジェクトの場合、そのソースオブジェクトおよび(Sprite または MovieClip オブジェクトの場合には)そのすべての子オブジェクトは、draw メソッドを呼び出すオブジェクトと同じドメインに属しているか、Security.allowDomain() メソッドを呼び出したことによって、呼び出し側からアクセスできる SWF ファイル内に存在する必要があります。

  • ロードされたビットマップソースオブジェクトの場合、ソースオブジェクトは draw メソッドを呼び出すオブジェクトと同じドメインに属する必要があります。あるいはそのソースサーバーは、呼び出し側ドメインに権限を付与する URL ポリシーファイルをインクルードしている必要があります。

これらの条件が満たされない場合は、SecurityError 例外が発生します。

イメージをロードするとき、Loader クラスの load() メソッドを使用すると、LoaderContext オブジェクトである context パラメーターを指定できます。LoaderContext オブジェクトの checkPolicyFile プロパティを true に設定した場合、Flash Player は、イメージがロードされるサーバー上に URL ポリシーファイルがあるかどうかをチェックします。ポリシーファイルが存在し、そのファイルがロードを行おうとしている SWF ファイルのドメインを許可している場合、その SWF ファイルは Bitmap オブジェクト内のデータにアクセスできます。それ以外の場合は、アクセスできません。

テキストフィールド内の <img> タグによってロードされるイメージで checkPolicyFile プロパティを指定することもできます。詳しくは、テキストフィールドに <img > タグを使用した SWF ファイルとイメージのロードを参照してください。

サウンドデータへのアクセス

次のサウンド関連の ActionScript 3.0 API にはセキュリティ制限があります。

  • SoundMixer.computeSpectrum() メソッド - サウンドファイルと同じセキュリティサンドボックス内で実行中のコードで常に使用できます。他のサンドボックス内で実行中のコードには、セキュリティチェックが行われます。

  • SoundMixer.stopAll() メソッド - サウンドファイルと同じセキュリティサンドボックス内で実行中のコードで常に使用できます。他のサンドボックス内のファイルには、セキュリティチェックが行われます。

  • Sound クラスの id3 プロパティ - サウンドファイルと同じセキュリティサンドボックス内にある SWF ファイルで常に使用できます。他のサンドボックス内で実行中のコードには、セキュリティチェックが行われます。

それぞれのサウンドに、コンテンツサンドボックスとオーナーサンドボックスの 2 種類のサンドボックスが関連付けられています。

  • サウンドの元のドメインはコンテンツサンドボックスを決定し、コンテンツサンドボックスは、サウンドの id3 プロパティと SoundMixer.computeSpectrum() メソッドによってサウンドからデータを抽出できるかどうかを決定します。

  • サウンドの再生を開始したオブジェクトは、所有者サンドボックスを決定し、所有者サンドボックスは、SoundMixer.stopAll() メソッドを使用してサウンドを停止できるかどうかを決定します。

サウンドをロードするとき、Sound クラスの load() メソッドを使用すると、SoundLoaderContext オブジェクトである context パラメーターを指定できます。SoundLoaderContext オブジェクトの checkPolicyFile プロパティを true に設定した場合、ランタイムは、サウンドがロードされるサーバー上に URL ポリシーファイルがあるかどうかをチェックします。ポリシーファイルがあり、ロードする側のコードのドメインがそのファイルで許可されている場合、そのコードは Sound オブジェクトの id プロパティにアクセスできます。それ以外の場合はアクセスできません。また、checkPolicyFile プロパティの設定により、ロードされたサウンドの SoundMixer.computeSpectrum() メソッドを有効にできます。

SoundMixer.areSoundsInaccessible() メソッドを使用すると、呼び出し側からサウンド所有者のサンドボックスにアクセスできないので、SoundMixer.stopAll() メソッドの呼び出しがすべてのサウンドを停止できるかどうかを知ることができます。

SoundMixer.stopAll() メソッドを呼び出すと、所有者サンドボックスが stopAll() の呼び出し側と同じものであるサウンドが停止します。また、stopAll() メソッドを呼び出す SWF ファイルのドメインによるアクセスを許可するために Security.allowDomain() メソッドを呼び出した SWF ファイルによって再生が開始されたサウンドも停止します。それ以外のサウンドは停止しません。そのようなサウンドの存在は、SoundMixer.areSoundsInaccessible() メソッドを呼び出すことによって確認できます。

computeSpectrum() メソッドを呼び出すには、再生中のすべてのサウンドが、このメソッドを呼び出すオブジェクトと同じサンドボックスに属するか、呼び出し側のサンドボックスに許可を付与したソースに属する必要があります。それ以外の場合は、SecurityError 例外が発生します。SWF ファイル内でライブラリの埋め込みサウンドからロードされたサウンドの場合、ロードされた SWF ファイルの Security.allowDomain() メソッドへの呼び出しを使用して許可を付与します。SWF ファイル以外のソースからロードされたサウンド(ロードされた MP3 ファイルまたはビデオファイルからのサウンド)の場合、ソースサーバー上の URL ポリシーファイルが、ロードされたメディア内のデータへのアクセスを許可します。

詳しくは、作成者(開発者)コントロールおよびWeb サイトのコントロール(ポリシーファイル)を参照してください。

RTMP ストリームのサウンドデータにアクセスするには、サーバーでアクセスを許可する必要があります。Flash Media Server にある特定のディレクトリへのアクセスを許可するには、サーバーサイド ActionScript のClient.audioSampleAccess プロパティを使用します。詳しくは、『サーバーサイド ActionScript 言語リファレンス』を参照してください。

ビデオデータへのアクセス

ビデオの現在のフレームのピクセルデータをキャプチャするには、BitmapData.draw() メソッドまたは BitmapData.drawWithQuality() メソッドを使用します(drawWithQuality メソッドは Flash Player 11.3 以降および AIR 3.3 以降で使用できます)。

ビデオには、次の 2 種類があります。

  • Flash Media Server から RTMP 経由でストリーミング配信されるビデオ

  • FLV または F4V ファイルからロードされるプログレッシブビデオ

draw メソッドを使用して RTMP ストリームからランタイムグラフィックを抽出するには、サーバーでアクセスを許可する必要があります。Flash Media Server にある特定のディレクトリへのアクセスを許可するには、サーバーサイド ActionScript の Client.videoSampleAccess プロパティを使用します。詳しくは、『サーバーサイド ActionScript 言語リファレンス』を参照してください。

プログレッシブビデオを source パラメーターとして draw メソッドを呼び出す場合は、メソッドの呼び出し側が FLV ファイルと同じサンドボックスに属しているか、FLV ファイルのサーバーに、呼び出しを行う SWF ファイルのドメインに許可を付与するポリシーファイルがある必要があります。NetStream オブジェクトの checkPolicyFile プロパティを trueに設定して、ポリシーファイルがダウンロードされるように要求できます。