Zugriff auf geladene Medien als Daten

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Zum Zugriff auf geladene Daten verwenden Sie die Methoden BitmapData.draw() , BitmapData.drawWithQuality() und SoundMixer.computeSpectrum() . Standardmäßig ist es nicht möglich, Pixeldaten oder Audiodaten von Grafik- oder Audioobjekten abzurufen, die von Medien, die in einer anderen Sandbox geladen sind, dargestellt oder abgespielt werden. Sie können jedoch folgende Methoden verwenden, um den sandboxübergreifenden Zugriff auf solche Daten zu gewähren:

  • Rufen Sie in dem Inhalt, in dem die gewünschten Daten dargestellt oder abgespielt werden, die Security.allowDomain() -Methode auf, um den Datenzugriff auf Inhalt in anderen Domänen zu gewähren.

  • Bei einem geladenen Bild, Sound oder Video fügen Sie dem Server der geladenen Datei eine URL-Richtliniendatei hinzu. Diese Richtliniendatei muss Zugriff auf die Domäne der SWF-Datei gewähren, die versucht, die Methoden BitmapData.draw() , BitmapData.drawWithQuality() oder SoundMixer.computeSpectrum() aufzurufen, um Daten aus der Datei zu extrahieren. Die drawWithQuality -Methode ist in Flash Player 11.3 und höher sowie AIR 3.3 und höher verfügbar.

In den folgenden Abschnitten finden Sie ausführliche Informationen über den Zugriff auf Bitmap-, Sound- und Videodaten.

Zugriff auf Bitmap-Daten

Mit der Methode draw() oder drawWithQuality() (Flash Player 11.3; AIR 3.3) eines BitmapData-Objekts können Sie die aktuell angezeigten Pixel eines beliebigen Anzeigeobjekts in ein BitmapData-Objekt zeichnen. Dabei kann es sich um die Pixel eines MovieClip-Objekts, eines Bitmap-Objekts oder eines Anzeigeobjekts handeln. Die folgenden Bedingungen müssen zutreffen, damit diese Methoden Pixel in das BitmapData-Objekt schreiben:

  • Handelt es sich bei dem Quellobjekt nicht um eine geladene Bitmap, müssen das Quellobjekt und (bei einem Sprite- oder MovieClip-Objekt) alle untergeordneten Objekte aus der gleichen Domäne wie das Objekt stammen, das die draw-Methode aufruft, oder sie müssen sich in einer SWF-Datei befinden, die dem aufrufenden Objekt durch Aufrufen der Methode Security.allowDomain() zugänglich ist.

  • Handelt es sich bei dem Quellobjekt um eine geladene Bitmap, muss das Quellobjekt aus der gleichen Domäne wie das Objekt stammen, das die draw-Methode aufruft, oder der Quellserver muss eine URL-Richtliniendatei enthalten, die der aufrufenden Domäne Zugriffsrechte erteilt.

Wenn diese Bedingungen nicht erfüllt werden, wird eine SecurityError-Ausnahme ausgelöst.

Wenn Sie das Bild mit der load() -Methode der Loader-Klasse laden, können Sie einen context -Parameter angeben, bei dem es sich um ein LoaderContext-Objekt handelt. Wenn Sie die checkPolicyFile -Eigenschaft des LoaderContext-Objekts auf true festlegen, wird in Flash Player auf dem Server, von dem das Bild geladen wird, eine URL-Richtliniendatei gesucht. Wenn eine Richtliniendatei vorhanden und die Domäne der ladenden SWF-Datei darin enthalten ist, kann die Datei auf die Daten im Bitmap-Objekt zugreifen. Andernfalls wird der Zugriff verweigert.

Sie können auch eine checkPolicyFile -Eigenschaft in einem Bild angeben, das über ein <img> -Tag in einem Textfeld geladen wird. Weitere Informationen finden Sie unter Laden von SWF-Dateien und Bildern mit dem <img>-Tag in einem Textfeld .

Zugriff auf Sounddaten

Für die folgenden soundbezogenen ActionScript 3.0-APIs gelten Sicherheitseinschränkungen:

  • SoundMixer.computeSpectrum() -Methode – Für Code, der in der gleichen Sicherheits-Sandbox wie die Sounddatei ausgeführt wird, immer zulässig. Bei Code, der in anderen Sandboxen ausgeführt wird, werden Sicherheitsprüfungen durchgeführt.

  • SoundMixer.stopAll() -Methode – Für Code, der in der gleichen Sicherheits-Sandbox wie die Sounddatei ausgeführt wird, immer zulässig. Bei Dateien in anderen Sandboxen werden Sicherheitsprüfungen durchgeführt.

  • id3 -Eigenschaft der Sound-Klasse – Für SWF-Dateien, die sich in der gleichen Sicherheits-Sandbox wie die Sounddatei befinden, immer zulässig. Bei Code, der in anderen Sandboxen ausgeführt wird, werden Sicherheitsprüfungen durchgeführt.

Jedem Sound sind zwei Arten von Sandboxen zugeordnet: eine Inhalt-Sandbox und eine Eigentümer-Sandbox.

  • Die Ursprungsdomäne des Sounds legt die Inhalt-Sandbox fest und diese bestimmt, ob Daten aus dem Sound über die id3 -Eigenschaft des Sounds und die SoundMixer.computeSpectrum() -Methode extrahiert werden.

  • Das Objekt, das die Wiedergabe des Sounds gestartet hat, legt die Eigentümer-Sandbox fest und diese bestimmt, ob der Sound mit der SoundMixer.stopAll() -Methode gestoppt werden kann.

Wenn Sie den Sound mit der load() -Methode der Sound-Klasse laden, können Sie einen context -Parameter angeben, bei dem es sich um ein SoundLoaderContext-Objekt handelt. Wenn Sie die checkPolicyFile -Eigenschaft des SoundLoaderContext-Objekts auf true setzen, sucht die Laufzeit auf dem Server, von dem der Sound geladen wird, eine URL-Richtliniendatei. Wenn eine Richtliniendatei vorhanden und die Domäne des ladenden Codes darin enthalten ist, kann der Code auf die id -Eigenschaft des Sound-Objekts zugreifen. Andernfalls wird der Zugriff verweigert. Darüber hinaus kann auch das Festlegen der checkPolicyFile -Eigenschaft die SoundMixer.computeSpectrum() -Methode für geladene Sounds aktivieren.

Mit der Methode SoundMixer.areSoundsInaccessible() können Sie ermitteln, ob ein Aufruf der SoundMixer.stopAll() -Methode alle Sounds stoppen würde, da die Sandbox eines oder mehrerer Sound-Eigentümer für das aufrufende Objekt nicht zugänglich ist.

Das Aufrufen der SoundMixer.stopAll() -Methode stoppt Sounds, deren Eigentümer-Sandbox die Gleiche wie die des aufrufenden Objekts von stopAll() ist. Sie stoppt auch die Sounds, deren Wiedergabe von SWF-Dateien gestartet wurde, welche die Security.allowDomain() -Methode aufgerufen haben, um Zugriff für die Domäne der SWF-Datei zu gewähren, welche die stopAll() -Methode aufruft. Alle anderen Sounds werden nicht gestoppt. Das Vorhandensein dieser Sounds kann durch Aufrufen der SoundMixer.areSoundsInaccessible() -Methode ermittelt werden.

Das Aufrufen der computeSpectrum() -Methode erfordert, dass jeder wiedergegebene Sound entweder aus der gleichen Sandbox wie das Objekt stammt, das die Methode aufgerufen hat, oder von einer Quelle, der ein Zugriffsrecht für die Sandbox des aufrufenden Objekts erteilt wurde. Andernfalls wird eine SecurityError-Ausnahme ausgelöst. Bei Sounds, die aus den eingebetteten Sounds einer Bibliothek in einer SWF-Datei geladen werden, wird das Zugriffsrecht mit dem Aufruf der Security.allowDomain() -Methode in der geladenen SWF-Datei erteilt. Bei Sounds, die aus anderen Quellen als SWF-Dateien geladen werden (aus geladenen MP3-Dateien oder aus Videodateien), erteilt eine URL-Richtliniendatei auf dem Quellserver Zugriffsberechtigungen auf die Daten in den geladenen Medien.

Weitere Informationen finden Sie unter Kontrolloptionen für Autoren (Entwickler) und Kontrolloptionen für Websites (Richtliniendateien) .

Zum Zugriff auf Sounddaten von RTMP-Streams müssen Sie den Zugriff auf dem Server gewähren. Verwenden Sie die serverseitige ActionScript-Eigenschaft Client.audioSampleAccess , um den Zugriff auf bestimmte Verzeichnisse auf dem Flash Media Server zu gewähren. Weitere Informationen finden Sie im Handbuch Server-Side ActionScript Language Reference .

Zugriff auf Videodaten

Mit der BitmapData.draw() - oder BitmapData.drawWithQuality() -Methode können Sie Pixeldaten des aktuellen Bilds eines Videos erfassen. (Die drawWithQuality -Methode ist in Flash Player 11.3 und höher sowie AIR 3.3 und höher verfügbar.)

Es gibt zwei verschiedene Arten von Video:

  • Über RTMP von Flash Media Server gestreamtes Video

  • Progressives Video, das aus einer FLV- oder F4V-Datei geladen wird

Damit die draw-Methoden zum Extrahieren von Laufzeitgrafiken aus RTMP-Streams verwendet werden können, müssen Sie den Zugriff auf dem Server gewähren. Verwenden Sie die serverseitige ActionScript-Eigenschaft Client.videoSampleAccess , um den Zugriff auf bestimmte Verzeichnisse auf dem Flash Media Server zu gewähren. Weitere Informationen finden Sie im Handbuch Server-Side ActionScript Language Reference .

Wenn Sie eine draw-Methode mit progressivem Video als source -Parameter aufrufen, muss sich das Objekt, das die Methode aufruft, entweder in der gleichen Sandbox wie die FLV-Datei befinden, oder auf dem Server der FLV-Datei ist eine Richtliniendatei gespeichert, in der Zugriffsrechte für die Domäne der aufrufenden SWF-Datei erteilt werden. Durch Festlegen der checkPolicyFile -Eigenschaft des NetStream-Objekts auf true können Sie das Herunterladen der Richtliniendatei anfordern.