Zugriff auf geladene Medien als Daten



Mit Methoden wie BitmapData.draw() und SoundMixer.computeSpectrum() können Sie auf geladene Daten zugreifen. In der Standardeinstellung kann eine SWF-Datei aus einer Sicherheits-Sandbox nicht auf Pixeldaten oder Audiodaten aus Grafiken bzw. Audioobjekten zugreifen, die von geladenen Medien in einer anderen Sandbox angezeigt bzw. wiedergegeben werden. Sie können jedoch eine der folgenden Methoden verwenden, um diese Berechtigung zu erteilen:

  • In einer geladenen SWF-Datei rufen Sie die Security.allowDomain()-Methode auf, um SWF-Dateien in anderen Domänen Zugriff auf Daten 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() oder SoundMixer.computeSpectrum() aufzurufen, um Daten aus der Datei zu extrahieren.

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() eines BitmapData-Objekts können Sie die aktuell angezeigten Pixel eines 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 die draw()-Methode Pixel in das BitmapData-Objekt schreibt:

  • 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 SWF-Dateien, die sich in der gleichen Sicherheits-Sandbox wie die Sounddatei befinden, immer zulässig. Bei Dateien in anderen Sandboxen werden Sicherheitsprüfungen durchgeführt.

  • SoundMixer.stopAll()-Methode – Für SWF-Dateien, die sich in der gleichen Sicherheits-Sandbox wie die Sounddatei befinden, 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 Dateien in anderen Sandboxen 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 festlegen, wird in Flash Player auf dem Server, von dem der Sound 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 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. Sie können die Methode computeSpectrum() nicht verwenden, wenn ein Sound aus RTMP-Datenstreams geladen wurde.

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

Zugriff auf Videodaten

Mit der BitmapData.draw()-Methode können Sie Pixeldaten des aktuellen Bilds eines Videos erfassen.

Es gibt zwei verschiedene Arten von Video:

  • RTMP-Video

  • Progressives Video, das aus einer FLV-Datei ohne einen RTMP-Server geladen wird

Mit der BitmapData.draw()-Methode können Sie nicht auf RTMP-Video zugreifen.

Wenn Sie die BitmapData.draw()-Methode mit progressivem Video als source-Parameter aufrufen, muss sich das Objekt, das die Methode BitmapData.draw() 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.