flash.mediaID3Info Die ID3Info-Klasse enthält Eigenschaften für die ID3-Metadaten.Object Die ID3Info-Klasse enthält Eigenschaften für die ID3-Metadaten. Durch Aufrufen der id3-Eigenschaft der Soundklasse (beispielsweise mySound.id3.TIME) können Sie weitere Metadaten für MP3-Dateien abrufen. Weitere Informationen finden Sie im Abschnitt zu Sound.id3 und in den Definitionen zu ID3-Tags unter http://www.id3.org. Sound.id3album Der Name des Albums. Entspricht dem ID3 2.0-Tag „TALB“.String Der Name des Albums. Entspricht dem ID3 2.0-Tag „TALB“. artist Der Name des Interpreten. Entspricht dem ID3 2.0-Tag „TPE1“.String Der Name des Interpreten. Entspricht dem ID3 2.0-Tag „TPE1“. comment Eine Anmerkung zur Aufnahme. Entspricht dem ID3 2.0-Tag „COMM“.String Eine Anmerkung zur Aufnahme. Entspricht dem ID3 2.0-Tag „COMM“. genre Das Genre des Songs. Entspricht dem ID3 2.0-Tag „TCON“.String Das Genre des Songs. Entspricht dem ID3 2.0-Tag „TCON“. songName Der Name des Songs. Entspricht dem ID3 2.0-Tag „TIT2“.String Der Name des Songs. Entspricht dem ID3 2.0-Tag „TIT2“. track Die Titelnummer. Entspricht dem ID3 2.0-Tag „TRCK“.String Die Titelnummer. Entspricht dem ID3 2.0-Tag „TRCK“. year Das Aufnahmejahr. Entspricht dem ID3 2.0-Tag „TYER“.String Das Aufnahmejahr. Entspricht dem ID3 2.0-Tag „TYER“. MediaType Die MediaType-Klasse zählt die allgemeinen Medientypen auf, die von einer Kamera zurückgegeben werden können.Object Die MediaType-Klasse zählt die allgemeinen Medientypen auf, die von einer Kamera zurückgegeben werden können.

Verwenden Sie die in dieser Klasse definierten Konstanten als Eingabe für die launch()-Methode der CameraUI-Klasse. MediaType-Werte werden auch in der mediaType-Eigenschaft der MediaPromise-Klasse verwendet.

CameraUI.launch()MediaPromise.mediaTypeIMAGE Ein einzelnes Bild.imageString Ein einzelnes Bild. VIDEO Ein Video.videoString Ein Video.
scanHardware Erzwingt einen Neuscan der Mikrofone und Kameras auf dem System. Erzwingt einen Neuscan der Mikrofone und Kameras auf dem System. Camera Mit der Camera-Klasse können Sie Video von der Kamera des Clients erfassen.flash.events:EventDispatcher Mit der Camera-Klasse können Sie Video von der Kamera des Clients erfassen. Mit der Videoklasse können Sie das Video lokal überwachen. Mit der NetConnection- und der NetStream-Klasse können Sie das Video an Flash Media Server übertragen. Flash Media Server kann den Videostream an andere Server senden und an andere Clients, auf denen Flash Player ausgeführt wird, übertragen.

Eine Camera-Instanz erfasst Video im Querformat. Bei Geräten, die die Bildschirmausrichtung ändern können, zum Beispiel Mobiltelefone, zeigt ein an die Kamera angehängtes Video-Objekt Video im Hochformat nur in einer querformatigen Ausrichtung an. Deshalb sollten mobile Anwendungen für die Videoanzeige das Querformat verwenden und keine automatische Drehung vornehmen.

Ab AIR 2.6 ist der Autofokus bei mobilen Geräten mit Autofokuskamera automatisch aktiviert. Falls die Kamera keinen kontinuierlichen Autofokus unterstützt (was auf die Kameras vieler mobiler Geräte zutrifft), fokussiert die Kamera, wenn das Camera-Objekt an einen Videostream angehängt wird und immer, wenn die setMode()-Methode aufgerufen wird. Bei Desktopcomputern ist das Autofokusverhalten vom Kameratreiber und den Kameraeinstellungen abhängig.

In einer AIR-Anwendung unter Android oder iOS erfasst die Kamera kein Video, wenn die AIR-Anwendung nicht aktiv und im Vordergrund ist. Außerdem können Streamingverbindungen unterbrochen werden, wenn sich die Anwendung im Hintergrund befindet. Unter iOS kann das Video von der Kamera nicht angezeigt werden, wenn eine Anwendung den GPU-Renderingmodus verwendet. Das Video von der Kamera kann aber trotzdem an einen Server gestreamt werden.

Unterstützung für mobile Browser: Diese Klasse wird in mobilen Browsern nicht unterstützt.

Unterstützung von AIR-Profilen: Diese Funktion wird unter Desktopbetriebssystemen unterstützt, aber nicht auf allen mobilen Geräten. Bei Geräten mit AIR für TV wird sie nicht unterstützt. Weitere Informationen zum AIR-Support über mehrere Profile finden Sie unter Unterstützung von AIR-Profilen.

Mit der Camera.isSupported-Eigenschaft können Sie testen, ob zur Laufzeit Unterstützung gegeben ist. Beachten Sie, dass bei Geräten mit AIR für TV Camera.isSupported den Wert true hat, Camera.getCamera() jedoch immer null zurückgibt.

Informationen zum Erfassen von Audio finden Sie in der Beschreibung der Microphone-Klasse.

Wichtig: In Flash Player wird ein Zugriffsschutz-Dialogfeld angezeigt, in dem der Benutzer den Zugriff auf die Kamera zulassen oder verweigern kann. Achten Sie darauf, dass die Größe des Anwendungsfensters mindestens 215 x 138 Pixel beträgt. Dies ist die erforderliche Mindestgröße für die Anzeige des Dialogfelds.

Zum Erstellen oder Referenzieren eines Camera-Objekts, verwenden Sie die getCamera()-Methode.

Im folgenden Beispiel sehen Sie das von einer Kamera übertragene Bild, nachdem die Sicherheitswarnung bestätigt wurde. Die Bühne wurde so eingerichtet, dass es nicht skaliert werden kann und an der oberen linken Ecke des Player-Fensters ausgerichtet ist. Das Ereignis activity wird am Anfang und Ende (falls vorhanden) der Sitzung ausgelöst und von der Methode activityHandler() erfasst, woraufhin Informationen zum Ereignis ausgedruckt werden.

Hinweis: Dieses Beispiel kann nur dann korrekt nachvollzogen werden, wenn eine Kamera mit dem Computer verbunden ist.

package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Camera; import flash.media.Video; public class CameraExample extends Sprite { private var video:Video; public function CameraExample() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var camera:Camera = Camera.getCamera(); if (camera != null) { camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler); video = new Video(camera.width * 2, camera.height * 2); video.attachCamera(camera); addChild(video); } else { trace("You need a camera."); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } } }
flash.media.MicrophoneCristophe Coenraets: Video Chat for Android in 30 Lines of CodeMichael Chaize: Android, AIR, and the Camerastatus Wird ausgelöst, wenn der Status einer Kamera protokolliert wird.flash.events.StatusEvent.STATUSflash.events.StatusEvent Wird ausgelöst, wenn der Status einer Kamera protokolliert wird. Vor dem Zugriff auf eine Kamera zeigt Flash Player ein Datenschutz-Dialogfeld an, in dem Benutzer den Zugriff auf die Kamera zulassen oder verweigern können. Wenn der Wert der code-Eigenschaft auf "Camera.Muted" gesetzt ist, hat der Benutzer den Zugriff der SWF-Datei auf die Kamera verweigert. Wenn der Wert der code-Eigenschaft auf "Camera.Unmuted" gesetzt ist, hat der Benutzer den Zugriff der SWF-Datei auf die Kamera gewährt. Camera.getCamera()activity Wird ausgelöst, wenn die Sitzung einer Kamera gestartet oder beendet wird.flash.events.ActivityEvent.ACTIVITYflash.events.ActivityEvent Wird ausgelöst, wenn die Sitzung einer Kamera gestartet oder beendet wird. Rufen Sie Camera.setMotionLevel() auf, um festzulegen, wie viel Bewegung nötig ist, damit ein activity-Ereignis mit einem activating-Wert von true ausgelöst wird, oder um festzulegen, wie viel Zeit ohne Aktivität vergehen muss, bevor ein activity-Ereignis mit einem activating-Wert von false ausgelöst wird. getCamera Gibt eine Referenz auf ein Camera-Objekt zum Aufnehmen von Videos zurück.Wenn der name-Parameter nicht angegeben ist, gibt diese Methode einen Verweis auf die Standardkamera zurück, oder, wenn diese in einer anderen Kamera verwendet wird, auf die erste verfügbare Kamera. (Wenn mehrere Kameras installiert sind, kann der Benutzer im Flash Player-Bedienfeld für die Kameraeinstellungen die Standardkamera festlegen.) Wenn keine Kameras verfügbar oder installiert sind, gibt diese Methode den Wert null zurück. flash.media:CameranameStringnullGibt die abzurufende Kamera an, die in dem von der names-Eigenschaft zurückgegebenen Array festgelegt ist. In den meisten Anwendungen können Sie die Standardkamera durch Weglassen dieses Parameters abrufen. Um einen Wert für diesen Parameter festzulegen, verwenden Sie die Stringrepräsentation der auf Null basierenden Indexposition innerhalb des Camera.names-Arrays. Wenn Sie zum Beispiel die dritte Kamera im Array angeben möchten, verwenden Sie Camera.getCamera("2"). Gibt eine Referenz auf ein Camera-Objekt zum Aufnehmen von Videos zurück. Um mit der Videoaufnahme zu beginnen, muss das Camera-Objekt mit einem Videoobjekt verknüpft werden (siehe Video.attachCamera() ). Wenn Sie Video an Flash Media Server übertragen möchten, rufen Sie NetStream.attachCamera() auf, um das Camera-Objekt mit einem NetStream-Objekt zu verknüpfen.

Mehrere Aufrufe der getCamera()-Methode verweisen auf denselben Kameratreiber. Wenn der Code Elemente wie firstCam:Camera = getCamera() und secondCam:Camera = getCamera() enthält, verweisen firstCam und secondCam somit auf dieselbe Kamera, bei der es sich um die Standardkamera des Benutzers handelt.

Bei iOS-Geräten, die sowohl über eine nach vorn als auch über eine nach hinten gerichtete Kamera verfügen, können Sie jeweils nur von einer Kamera Video erfassen. Bei Android-Geräten haben Sie nur auf die nach hinten gerichtete Kamera Zugriff.

Im Allgemeinen muss kein Wert für den name-Parameter übergeben werden. Verwenden Sie einfach getCamera(), um einen Verweis auf die Standardkamera zurückzugeben. Im Bedienfeld für die Kameraeinstellungen kann der Benutzer eine Standardkamera angeben (Informationen hierzu weiter unten in diesem Abschnitt).

Sie können ActionScript nicht verwenden, um die Berechtigungseinstellung „Zulassen“ oder „Verweigern“ für den Kamerazugriff festzulegen, Sie können jedoch das Adobe Flash Player Dialogfeld für die Kameraeinstellungen anzeigen, in dem der Benutzer den Kamerazugriff steuern kann. Wenn eine SWF-Datei mit der attachCamera()-Methode versucht, die von der getCamera()-Methode zurückgegebene Kamera mit einem Video- oder NetStream-Objekt zu verbinden, zeigt Flash Player ein Dialogfeld an, in dem der Benutzer den Zugriff auf die Kamera zulassen oder verweigern kann. (Achten Sie darauf, dass die Größe des Anwendungsfensters mindestens 215 x 138 Pixel beträgt. Dies ist die in Flash Player erforderliche Mindestgröße für die Anzeige des Dialogfelds.) Nachdem der Benutzer im Dialogfeld für die Kameraeinstellungen eine Option ausgewählt hat, wird in Flash Player ein Informationsobjekt im status-Ereignis zurückgegeben, das die Auswahl des Benutzers angibt. Mit Camera.muted wird angegeben, dass der Benutzer den Zugriff auf eine Kamera verweigert hat. Mit Camera.Unmuted wird angegeben, dass der Benutzer den Zugriff auf eine Kamera gewährt hat. Über die muted-Eigenschaft können Sie ohne Bearbeitung des status-Ereignisses feststellen, ob ein Benutzer den Zugriff auf eine Kamera verweigert oder gewährt hat.

In Flash Player kann der Benutzer permanente Zugriffsschutzeinstellungen für eine bestimmte Domäne festlegen, indem er während des Abspielens einer SWF-Datei mit der rechten Maustaste (Windows und Linux) bzw. bei gedrückter Ctrl-Taste (Mac OS) klickt, „Einstellungen“ auswählt, das Dialogfeld „Zugriffsschutz“ öffnet und „Speichern“ auswählt. Wenn ein Benutzer „Speichern“ auswählt, wird er in Flash Player nicht mehr dazu aufgefordert, den Zugriff von SWF-Dateien in der Domäne auf die Kamera zu gewähren oder zu verweigern.

Hinweis: Die attachCamera()-Methode ruft das Dialogfeld zum Zulassen oder Verweigern des Zugriffs auf die Kamera nicht auf, wenn der Benutzer den Zugriff verweigert hat, indem er in den Flash Player-Einstellungen die Einstellung „Speichern“ gewählt hat. In diesem Fall können Sie den Benutzer auffordern, die Einstellung „Zulassen“ oder „Verweigern“ zu ändern, indem Sie mit Security.showSettings(SecurityPanel.PRIVACY) das Bedienfeld „Zugriffsschutz“ von Flash Player für den Benutzer anzeigen.

Wenn getCamera() den Wert null zurückgibt, wird die Kamera entweder gerade in einer anderen Anwendung verwendet oder im System sind keine Kameras installiert. Mithilfe der names.length-Eigenschaft können Sie feststellen, ob Kameras installiert sind. Um das Kameraeinstellungsbedienfeld von Flash Player anzuzeigen, in dem der Benutzer die Kamera wählen kann, die von getCamera() referenziert werden soll, verwenden Sie Security.showSettings(SecurityPanel.CAMERA).

Der Suchlauf zum Überprüfen der Hardware auf installierte Kameras kann einige Zeit in Anspruch nehmen. Wenn die Laufzeitumgebung mindestens eine Kamera gefunden hat, wird der Suchlauf für diese Player-Instanz nicht noch einmal durchgeführt. Wenn die Laufzeitumgebung jedoch keine Kameras findet, wird der Suchlauf bei jedem Aufruf von getCamera durchgeführt. Diese Funktion ist besonders hilfreich, wenn eine Kamera zwar vorhanden, aber deaktiviert ist. Sofern Ihre SWF-Datei eine Schaltfläche „Wiederholen“ besitzt, mit der getCamera aufgerufen wird, kann Flash Player nach der Kamera suchen, ohne dass die SWF-Datei erneut gestartet werden muss.

Im folgenden Beispiel wird die angeschlossene Kamera zum Erfassen von Videobildern verwendet, nachdem der Benutzer den Zugriff auf die Kamera zugelassen hat. Informationen über den Videostream, zum Beispiel Bilder (Frames) pro Sekunde, werden ebenfalls angezeigt.

Die Camera.getCamera()-Methode gibt einen Verweis auf ein Kameraobjekt zurück oder null, falls keine Kamera verfügbar oder installiert ist. Mit der if-Anweisung wird überprüft, ob die Kamera gefunden wurde und ob der Benutzer den Zugriff auf die Kamera zugelassen hat. Wenn der Benutzer den Zugriff verweigert hat, ist die muted-Eigenschaft mit dem Wert true belegt.

Wenn die attachCamera()-Methode aufgerufen wird, wird ein Dialogfeld angezeigt und fordert den Benutzer auf, den Flash Player-Zugriff auf die Kamera zuzulassen oder zu verweigern. Hat der Benutzer jedoch den Zugriff verweigert und die Option Erinnern gewählt, wird das Dialogfeld nicht geöffnet und es wird nichts angezeigt. Um sicherzustellen, dass der Benutzer die Möglichkeit hat, den Zugriff auf die Kamera zuzulassen, weist das Textfeld myTextField den Benutzer an, auf das Textfeld zu klicken, um die Flash Player-Einstellungen anzuzeigen.

Die clickHandler()-Methode ruft die Security.showSettings()-Methode auf, die das Bedienfeld Zugriffsschutz des Dialogfelds „Einstellungen“ anzeigt. Wenn der Benutzer den Zugriff zulässt, wird das StatusEvent.STATUS-Ereignis ausgelöst und der Wert der code-Eigenschaft des Ereignisses wird auf Camera.Unmuted gesetzt. (Die mute-Eigenschaft des Kameraobjekts ist ebenfalls auf false gesetzt.)

Die statusHandler()-Methode, die hinzugefügt wird, um die Statusänderung der Benutzereinstellung zu überprüfen, ruft die connectCamera()-Methode auf, wenn der Benutzer den Zugriff zulässt. Die connectCamera()-Methode instanziiert ein Videoobjekt mit der Breite und Höhe des erfassten Streams. Um das von der Kamera erfasste Video anzuzeigen, wird der Verweis auf den Videostream zum Videoobjekt hinzugefügt und das Videoobjekt wird der Anzeigeliste hinzugefügt.

Ein Timerobjekt wird ebenfalls gestartet. Jede Sekunde wird ein Timerereignis eines Timerobjekts ausgelöst und die timerHandler()-Methode wird aufgerufen. Die timerHandler()-Methode wird angezeigt und aktualisiert mehrere Eigenschaften des Camera-Objekts.

Hinweis: In diesem Beispiel wird nur die currentFPS-Eigenschaft geändert.

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.StatusEvent; import flash.events.MouseEvent; import flash.system.SecurityPanel; import flash.system.Security; public class Camera_getCameraExample extends Sprite { private var myTextField:TextField; private var cam:Camera; private var t:Timer = new Timer(1000); public function Camera_getCameraExample() { myTextField = new TextField(); myTextField.x = 10; myTextField.y = 10; myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; if (Camera.isSupported) { cam = Camera.getCamera(); if (!cam) { myTextField.text = "No camera is installed."; } else if (cam.muted) { myTextField.text = "To enable the use of the camera,\n" + "please click on this text field.\n" + "When the Flash Player Settings dialog appears,\n" + "make sure to select the Allow radio button\n" + "to grant access to your camera."; myTextField.addEventListener(MouseEvent.CLICK, clickHandler); }else { myTextField.text = "Connecting"; connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); }else { myTextField.text = "The Camera class is not supported on this device."; } } private function clickHandler(e:MouseEvent):void { Security.showSettings(SecurityPanel.PRIVACY); cam.addEventListener(StatusEvent.STATUS, statusHandler); myTextField.removeEventListener(MouseEvent.CLICK, clickHandler); } private function statusHandler(event:StatusEvent):void { if (event.code == "Camera.Unmuted") { connectCamera(); cam.removeEventListener(StatusEvent.STATUS, statusHandler); } } private function connectCamera():void { var vid:Video = new Video(cam.width, cam.height); vid.x = 10; vid.y = 10; vid.attachCamera(cam); addChild(vid); t.start(); } private function timerHandler(event:TimerEvent):void { myTextField.y = cam.height + 20; myTextField.text = ""; myTextField.appendText("bandwidth: " + cam.bandwidth + "\n"); myTextField.appendText("currentFPS: " + Math.round(cam.currentFPS) + "\n"); myTextField.appendText("fps: " + cam.fps + "\n"); myTextField.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n"); } } }
indexmutednamessetMode()statusVideo.attachCamera()statusflash.events:StatusEventWird ausgelöst, wenn der Status einer Kamera protokolliert wird. Vor dem Zugriff auf eine Kamera zeigt Flash Player ein Datenschutz-Dialogfeld an, in dem Benutzer den Zugriff auf die Kamera zulassen oder verweigern können. Wenn der Wert der code-Eigenschaft auf "Camera.muted" gesetzt ist, hat der Benutzer den Zugriff der SWF-Datei auf die Kamera verweigert. Wenn der Wert der code-Eigenschaft auf "Camera.Unmuted" gesetzt ist, hat der Benutzer den Zugriff der SWF-Datei auf die Kamera gewährt. Wird ausgelöst, wenn der Status einer Kamera protokolliert wird.
setKeyFrameInterval Gibt die Videobilder an, die vollständig übertragen (sogenannte Keyframes) und nicht mit dem Algorithmus zur Videokomprimierung interpoliert werden.keyFrameIntervalintEin Wert, mit dem die Videobilder angegeben werden, die vollständig (als Schlüsselbilder) übertragen und nicht mit dem Algorithmus zur Videokomprimierung interpoliert werden. Beim Wert 1 ist jedes Bild ein Schlüsselbild, beim Wert 3 ist jedes dritte Bild ein Schlüsselbild usw. Die zulässigen Werte liegen zwischen 1 und 48. Gibt die Videobilder an, die vollständig übertragen (sogenannte Schlüsselbilder) und nicht mit dem Algorithmus zur Videokomprimierung interpoliert werden. Diese Methode ist nur bei der Übertragung von Videos über Flash Media Server anwendbar.

Mit dem Algorithmus zur Videokomprimierung in Flash werden Videos so komprimiert, dass nur die ab dem letzten Bild eines Videos geänderten Bildbereiche übertragen werden. Diese Abschnitte werden als interpolierte Bilder bezeichnet. Bilder eines Videos können entsprechend dem Inhalt des vorherigen Bilds interpoliert werden. Bei einem Schlüsselbild handelt es sich jedoch um ein vollständiges Videobild, das nicht aus vorherigen Bildern interpoliert wurde.

Berücksichtigen Sie zum Festlegen eines Werts für den keyFrameInterval-Parameter die Bandbreitennutzung und den Zugriff auf die Videowiedergabe. Durch die Angabe eines höheren Werts für keyFrameInterval (weniger häufiges Senden von Schlüsselbildern) wird beispielsweise die Bandbreitennutzung verringert. Dadurch wird jedoch möglicherweise die erforderliche Zeit zum Positionieren des Abspielkopfes an einem bestimmten Punkt im Video erhöht. Unter Umständen muss eine höhere Anzahl Videobilder interpoliert werden, damit die Wiedergabe des Videos fortgesetzt werden kann.

Durch die Angabe eines niedrigen Werts für keyFrameInterval (häufiges Senden von Schlüsselbildern) wird dagegen die Bandbreitennutzung erhöht, da häufiger vollständige Videobilder übertragen werden. Gleichzeitig wird möglicherweise jedoch die erforderliche Zeit zum Suchen eines bestimmten Videobilds in einem aufgenommenen Video verringert.

keyFrameInterval
setLoopback Gibt an, ob ein komprimierter Videostream für die lokale Wiedergabe der Kamera verwendet wird.compressBooleanfalseGibt an, ob für die lokale Wiedergabe der Kameraaufnahmen ein komprimierter Videostream (true) oder ein unkomprimierter Stream (false) verwendet wird. Gibt an, ob ein komprimierter Videostream für die lokale Wiedergabe der Kamera verwendet wird. Diese Methode kann nur bei der Übertragung von Videos mit Flash Media Server angewendet werden. Durch Setzen von compress auf true kann präziser angezeigt werden, wie ein Video bei der Wiedergabe in Echtzeit wiedergegeben wird.

Obwohl ein komprimierter Stream für Testzwecke nützlich ist, beispielsweise bei der Vorschau der Einstellungen für die Videoqualität, entsteht dadurch ein erheblicher Verarbeitungsaufwand. Die lokale Wiedergabe wird nicht einfach nur komprimiert, sie wird komprimiert, wie bei einer Live-Verbindung für die Übertragung bearbeitet und dann für die lokale Wiedergabe dekomprimiert.

Wenn Sie compress auf true setzen, können Sie die Stärke der Komprimierung über Camera.setQuality() festlegen.

setQuality()
setMode Legt als Kameraaufnahmemodus den systemeigenen Modus fest, mit dem die angegebenen Kriterien am besten erfüllt werden.widthintDie erforderliche Aufnahmebildbreite in Pixel. Der Standardwert ist 160. heightintDie angeforderte Aufnahmebildhöhe in Pixel. Der Standardwert ist 120. fpsNumberDie erforderliche Rate in Bildern pro Sekunde, mit der die Kamera Daten erfassen soll. Der Standardwert ist 15. favorAreaBooleantrueGibt an, ob die Breite, Höhe und Bildrate geändert werden sollen, wenn die Kamera über keinen systemeigenen Modus verfügt, mit dem die angegebenen Kriterien erfüllt werden. Der Standardwert ist true, dabei hat die gewünschte Bildgröße Vorrang. Bei diesem Parameter wird der Modus ausgewählt, der den Werten width und height am nächsten kommt, auch wenn dadurch die Bildrate reduziert und die Leistung verschlechtert wird. Soll die Bildrate Vorrang vor den Werten für Höhe und Breite haben, übergeben Sie den Wert false für den ParameterfavorArea. Legt als Kameraaufnahmemodus den systemeigenen Modus fest, mit dem die angegebenen Kriterien am besten erfüllt werden. Wenn die Kamera über keinen systemeigenen Modus verfügt, der mit allen übergebenen Parametern übereinstimmt, wird in Flash Player ein Aufnahmemodus ausgewählt, der dem gewünschten Modus am ehesten entspricht. Bei diesem Vorgang werden möglicherweise Teile des Videobilds abgeschnitten sowie Bilder übersprungen.

Standardmäßig überspringt Flash Player Bilder, sofern dies zum Beibehalten der gewünschten Bildgröße erforderlich ist. Um die Anzahl der übersprungenen Bilder zu minimieren, auch wenn dazu ggf. die Bildgröße reduziert werden muss, übergeben Sie den Wert false für den Parameter favorArea.

Bei Auswahl eines systemeigenen Modus wird in Flash Player versucht, das gewünschte Bildseitenverhältnis möglichst beizubehalten. Wenn Sie beispielsweise den Befehl myCam.setMode(400, 400, 30) ausgeben und die maximalen Werte der Kamera für Breite und Höhe 320 und 288 betragen, werden in Flash Player sowohl die Breite als auch die Höhe auf den Wert 288 gesetzt. So wird in Flash Player das gewünschte Bildseitenverhältnis von 1:1 beibehalten.

Wenn Sie überprüfen möchten, welche Werte diesen Eigenschaften zugewiesen wurden, nachdem in Flash Player der Modus ausgewählt wurde, der den gewünschten Werten am nächsten kommt, verwenden Sie die Eigenschaften width, height und fps.

Wenn Sie Flash Media Server verwenden, können Sie auch einzelne Bilder erfassen oder Zeitrafferaufnahmen erstellen. Weitere Informationen finden Sie unter NetStream.attachCamera().

Im folgenden Beispiel wird die Größe des Videos geändert und die Aufnahmerate Bilder pro Sekunde wird auf einen neuen Wert gesetzt, wenn ein Benutzer auf die Bühne klickt.

Die Bühne ist festgelegt und wird somit nicht skaliert. Die Camera.getCamera()-Methode gibt einen Verweis auf ein Kameraobjekt zurück oder null, falls keine Kamera verfügbar oder installiert ist. Falls eine Kamera vorhanden ist, wird die connectCamera()-Methode aufgerufen. Die connectCamera()-Methode instanziiert ein Videoobjekt. Um das von der Kamera erfasste Video anzuzeigen, wird der Verweis auf den Videostream zum Videoobjekt hinzugefügt und das Videoobjekt wird der Anzeigeliste hinzugefügt. Ein Ereignis-Listener für ein MouseEvent.CLICK-Ereignis wird ebenfalls eingerichtet. Nachdem der Benutzer auf die Bühne geklickt hat, wird die Methode clickHandler() aufgerufen. Die Methode überprüft die Breite des erfassten Videos und legt die Breite, die Höhe und die Anforderungsrate für Bilder pro Sekunde für den Aufnahmemodus der Kamera fest. Damit diese Einstellungen wirksam werden, muss das Videoobjekt entfernt und neu erstellt werden. Die Breite und die Höhe des Videos muss auf die Breite und Höhe des Kameraobjekts eingestellt werden.

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.events.MouseEvent; import flash.display.StageScaleMode; public class Camera_setModeExample extends Sprite { private var cam:Camera; private var vid:Video; public function Camera_setModeExample() { stage.scaleMode = StageScaleMode.NO_SCALE; cam = Camera.getCamera(); if (!cam) { trace("No camera is installed."); }else { connectCamera(); } } private function connectCamera():void { vid = new Video(); vid.width = cam.width; vid.height = cam.height; vid.attachCamera(cam); addChild(vid); stage.addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(e:MouseEvent):void { switch (cam.width) { case 160: cam.setMode(320, 240, 10); break; case 320: cam.setMode(640, 480, 5); break; default: cam.setMode(160, 120, 15); break; } removeChild(vid); connectCamera(); } } }
fpsheightwidthflash.net.NetStream.attachCamera()
setMotionLevel Gibt die erforderliche Bewegungsstärke zum Auslösen des activity-Ereignisses an.motionLevelintGibt die erforderliche Bewegungsstärke zum Auslösen des activity-Ereignisses an. Die zulässigen Werte liegen zwischen 0 und 100. Der Standardwert ist 50. timeoutint2000Gibt die Zeit in Millisekunden an, die ohne Aktivität vergehen muss, bevor Flash Player keine Aktivität mehr feststellt und das activity-Ereignis ausgelöst wird. Der Standardwert ist 2000 Millisekunden (2 Sekunden). Gibt die erforderliche Bewegungsstärke zum Auslösen des activity-Ereignisses an. Gibt optional die Zeit in Millisekunden an, die ohne Aktivität vergehen muss, bevor in Flash Player keine Bewegung mehr festgestellt und das Ereignis ausgelöst wird.

Hinweis: Videos können unabhängig vom Wert des motionLevel-Parameters wiedergegeben werden. Dieser Parameter legt nur fest, wann und unter welchen Umständen das Ereignis ausgelöst wird, nicht jedoch, ob tatsächlich Videodaten aufgezeichnet oder wiedergegeben werden.

Wenn die Kamera überhaupt keine Bewegung erkennen soll, legen Sie für den motionLevel-Parameter den Wert 100 fest. Das activity-Ereignis wird dann nie ausgelöst. (Dieser Wert wird wahrscheinlich nur für Testzwecke verwendet, beispielsweise um vorübergehend alle Prozeduren zu deaktivieren, die bei diesem Ereignis normalerweise ausgelöst werden.)

Über die activityLevel-Eigenschaft können Sie feststellen, welche Bewegungsstärke derzeit mit der Kamera erkannt wird. Die Bewegungstoleranzwerte entsprechen direkt den Aktivitätswerten. Völliges Fehlen von Bewegung entspricht dem Aktivitätswert 0. Ständige Bewegung entspricht dem Aktivitätswert 100. Bei fehlender Bewegung ist der Aktivitätswert niedriger als die Bewegungstoleranz, bei Bewegung übersteigen die Aktivitätswerte häufig die Bewegungstoleranz.

Diese Methode ähnelt Microphone.setSilenceLevel(). Mit beiden Methoden wird angegeben, zu welchem Zeitpunkt das activity-Ereignis ausgelöst werden soll. Diese Methoden haben jedoch deutlich unterschiedliche Auswirkungen auf das Veröffentlichen von Streams:

  • Microphone.setSilenceLevel() dient zur Optimierung der Bandbreite. Wenn ein Audiostream als lautlos eingestuft wird, werden keine Audiodaten gesendet. Stattdessen wird eine Meldung gesendet, um den Beginn der Inaktivität (Stille) anzuzeigen.
  • Camera.setMotionLevel() ist dazu bestimmt, Bewegung festzustellen und hat keinen Einfluss auf die Bandbreitenauslastung. Auch wenn ein Videostream keine Bewegung feststellt, werden weiterhin Videodaten gesendet.
Im folgenden Beispiel wird die Kamera des Benutzers als Überwachungskamera eingesetzt. Die Kamera erkennt Bewegungen und ein Textfeld zeigt die Aktivitätsstufe an. (Das Beispiel kann erweitert werden, sodass ein akustischer Alarm ausgegeben oder eine Nachricht über einen Webdienst an andere Anwendungen gesendet wird.)

Die Camera.getCamera()-Methode gibt einen Verweis auf ein Kameraobjekt zurück oder null, falls keine Kamera verfügbar oder installiert ist. Die if-Anweisung überprüft, ob eine Kamera verfügbar ist und ruft die connectCamera()-Methode auf, wenn dies der Fall ist. Die connectCamera()-Methode instanziiert ein Videoobjekt mit der Breite und Höhe des erfassten Streams. Um das von der Kamera erfasste Video anzuzeigen, wird der Verweis auf den Videostream zum Videoobjekt hinzugefügt und das Videoobjekt wird der Anzeigeliste hinzugefügt. (Wenn die attachCamera()-Methode aufgerufen wird, wird ein Dialogfeld angezeigt und fordert den Benutzer auf, den Flash Player-Zugriff auf die Kamera zuzulassen oder zu verweigern. Hat der Benutzer jedoch den Zugriff verweigert und die Option Erinnern gewählt, wird das Dialogfeld nicht geöffnet und es wird nichts angezeigt. Um sicherzustellen, dass der Benutzer die Möglichkeit hat, den Zugriff auf die Kamera zuzulassen, rufen Sie mit der system.Security.showSettings()-Methode das Flash Player-Dialogfeld „Einstellungen“ auf.)

Die setMotionLevel()-Methode legt die Aktivitätsstufe (Bewegungsstärke) auf 5 für minimale Bewegung fest, bevor das Aktivitätsereignis aufgerufen wird. Die Zeit zwischen dem Zeitpunkt, zu dem die Kamera mit dem Erkennen der Bewegung aufhört, und dem Auslösen des Aktivitätsereignisses ist auf 1 Sekunde (1000 Millisekunden) festgelegt. Wenn 1 Sekunde ohne Aktivität verstreicht oder die Aktivitätsstufe 5 erreicht wird, wird das ActivityEvent.ACTIVITY-Ereignis ausgelöst und die activityHandler()-Methode aufgerufen. Wenn das Ereignis durch die Aktivitätsstufe ausgelöst wurde, wird die activating-Eigenschaft auf true gesetzt und ein Timerobjekt gestartet. Jede Sekunde wird ein Timerereignis für das Timerobjekt ausgelöst und die timerHandler()-Methode wird aufgerufen, die die aktuelle Aktivitätsstufe anzeigt. (Auch wenn der Timer durch die Stufe 5 oder höher ausgelöst wird, kann die angezeigte Aktivitätsstufe darunter liegen.)

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.ActivityEvent; public class Camera_setMotionLevelExample extends Sprite { private var myTextField:TextField; private var cam:Camera; private var t:Timer = new Timer(1000); public function Camera_setMotionLevelExample() { myTextField = new TextField(); myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; cam = Camera.getCamera(); if (!cam) { myTextField.text = "No camera is installed."; }else { myTextField.text = "Waiting to connect."; connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); } private function connectCamera():void { var vid:Video = new Video(cam.width, cam.height); vid.x = 10; vid.y = 10; vid.attachCamera(cam); addChild(vid); cam.setMotionLevel(5, 1000); cam.addEventListener(ActivityEvent.ACTIVITY, activityHandler); } private function activityHandler(e:ActivityEvent):void { if (e.activating == true) { t.start(); } else { myTextField.text = "Everything is quiet."; t.stop(); } } private function timerHandler(event:TimerEvent):void { myTextField.x = 10; myTextField.y = cam.height + 20; myTextField.text = "There is some activity. Level: " + cam.activityLevel; } } }
motionLevelmotionTimeoutMicrophone.setSilenceLevel()
setQuality Legt die maximale Bandbreite pro Sekunde oder die erforderliche Bildqualität des aktuell ausgehenden Videofeeds fest.bandwidthintGibt die maximale Bandbreitennutzung für den aktuell ausgehenden Videofeed in Byte pro Sekunde an. Wenn für Flash Player-Videos so viel Bandbreite verwendet werden soll, wie für die gewünschte quality erforderlich ist, belegen Sie bandwidth mit dem Wert 0. Der Standardwert ist 16384. qualityintEine Ganzzahl, die die erforderliche Bildqualität angibt, die sich aus dem Grad der Komprimierung aller Videobilder ergibt. Die zulässigen Werte liegen zwischen 1 (niedrigste Qualität, maximale Komprimierung) und 100 (höchste Qualität, keine Komprimierung). Soll die Bildqualität bei Bedarf geändert werden, um eine Überschreitung der Bandbreite zu verhindern, belegen Sie quality mit 0. Legt die maximale Bandbreite pro Sekunde oder die erforderliche Bildqualität des aktuell ausgehenden Videofeeds fest. Diese Methode ist in der Regel nur bei der Übertragung von Videos über Flash Media Server anwendbar.

Mit dieser Methode können Sie festlegen, ob die Ausnutzung der Bandbreite oder die Bildqualität des ausgehenden Videofeeds für die Anwendung Vorrang haben soll.

  • Soll die Ausnutzung der Bandbreite Vorrang haben, geben Sie einen Wert für bandwidth an und belegen quality mit dem Wert 0. Flash Player überträgt Video dann innerhalb der angegebenen Bandbreite mit der bestmöglichen Qualität. Die Bildqualität wird von Flash Player gegebenenfalls verringert, um eine Überschreitung der angegebenen Bandbreite zu verhindern. Allgemein gilt, dass bei stärkerer Bewegung die Qualität abnimmt.
  • Soll die Qualität Vorrang haben, belegen Sie bandwidth mit dem Wert 0 und geben für quality einen numerischen Wert an. Flash Player verwendet dann so viel Bandbreite, wie zum Beibehalten der angegebenen Qualität erforderlich ist. Die Bildrate wird von Flash Player gegebenenfalls verringert, um die Bildqualität beizubehalten. Allgemein gilt, dass sich bei stärkerer Bewegung auch die Nutzung der Bandbreite erhöht.
  • Übergeben Sie numerische Werte für beide Parameter, um anzugeben, dass Bandbreite und Bildqualität gleichermaßen wichtig sind. Flash Player überträgt Video mit der angegebenen Qualität, ohne die angegebene Bandbreite zu überschreiten. Die Bildrate wird von Flash Player gegebenenfalls verringert, um die Bildqualität ohne Überschreiten der angegebenen Bandbreite beizubehalten.
getCamera()quality
activityLevel Die von der Kamera erkannte Menge an Bewegung.Number Die von der Kamera erkannte Menge an Bewegung. Die zulässigen Werte liegen zwischen 0 (keine erfasste Bewegung) und 100 (sehr starke Bewegung). Anhand des Werts dieser Eigenschaft können Sie ermitteln, ob eine Einstellung für die setMotionLevel()-Methode übergeben werden muss.

Wenn die Kamera verfügbar ist, aufgrund eines nicht erfolgten Video.attachCamera()-Aufrufs noch nicht verwendet wird, wird diese Eigenschaft auf -1 gesetzt.

Beim Streaming ausschließlich unkomprimierter lokaler Videos wird diese Eigenschaft nur dann gesetzt, wenn der Ereignisprozedur eine Funktion zugewiesen wurde. Andernfalls ist diese Eigenschaft nicht definiert.

motionLevelsetMotionLevel()
bandwidth Die Bandbreite (in Byte), die für den momentan ausgehenden Videofeed maximal zur Verfügung steht.int Die Bandbreite (in Byte), die für den momentan ausgehenden Videofeed maximal zur Verfügung steht. Der Wert 0 bedeutet, dass der Feed die zur Beibehaltung der gewünschten Bildqualität erforderliche Bandbreite für Videos nutzen kann.

Legen Sie diese Eigenschaft über die setQuality()-Methode fest.

setQuality()
currentFPS Die Abtastrate in Bildern pro Sekunde, mit der die Kamera Daten erfasst.Number Die Abtastrate in Bildern pro Sekunde, mit der die Kamera Daten erfasst. Diese Eigenschaft kann nicht eingestellt werden. Mit der setMode()-Methode können Sie jedoch die verwandte Eigenschaft fps festlegen, welche die maximale Bildrate angibt, mit der die Kamera Daten erfassen soll. setMode()fps Die maximale Rate in Bildern pro Sekunde, mit der die Kamera Daten erfassen kann.Number Die maximal Rate in Bildern pro Sekunde, mit der die Kamera Daten erfassen kann. Die höchstmögliche Rate richtet sich nach den Möglichkeiten der Kamera; diese Bildrate wird möglicherweise nicht erzielt.
  • Über die setMode()-Methode können Sie den gewünschten Wert für diese Eigenschaft festlegen.
  • Verwenden Sie die currentFPS-Eigenschaft, um festzustellen, mit welcher Abtastrate die Kamera derzeit Daten erfasst.
currentFPSsetMode()
height Die aktuelle Aufnahmebildhöhe in Pixel.int Die aktuelle Aufnahmebildhöhe in Pixel. Über die setMode()-Methode können Sie einen Wert für diese Eigenschaft festlegen. widthsetMode()index Eine auf null basierende Ganzzahl, die den Index der Kamera anhand des von der names-Eigenschaft zurückgegebenen Arrays angibt.int Eine auf null basierende Ganzzahl, die den Index der Kamera anhand des von der names-Eigenschaft zurückgegebenen Arrays angibt. namesgetCamera()isSupported Die isSupported-Eigenschaft hat den Wert „true“, wenn die Camera-Klasse von der aktuellen Plattform unterstützt wird, andernfalls hat sie den Wert „false“.Boolean Die isSupported-Eigenschaft hat den Wert true, wenn die Camera-Klasse von der aktuellen Plattform unterstützt wird, andernfalls hat sie den Wert false. keyFrameInterval Die Anzahl der Videobilder, die vollständig übertragen (sogenannte Keyframes) und nicht mit dem Algorithmus zur Videokomprimierung interpoliert werden.int Die Anzahl der Videobilder, die vollständig übertragen (sogenannte Schlüsselbilder) und nicht mit dem Algorithmus zur Videokomprimierung interpoliert werden. Der Standardwert ist 15, d. h., jedes fünfzehnte Bild ist ein Schlüsselbild. Der Wert 1 bedeutet, dass jedes Bild ein Schlüsselbild ist. Zulässige Werte sind Zahlen von 1 bis 48. setKeyFrameInterval()loopback Gibt an, ob eine lokale Wiedergabe der Kameraaufnahmen wie bei der Live-Übertragung mit Flash Media Server komprimiert und dekomprimiert (true) oder nicht komprimiert (false) wird.Boolean Gibt an, ob eine lokale Wiedergabe der Kameraaufnahmen wie bei der Live-Übertragung mit Flash Media Server komprimiert und dekomprimiert (true) oder nicht komprimiert (false) wird. Der Standardwert ist false.

Obwohl ein komprimierter Stream für Testzwecke nützlich ist, beispielsweise bei der Vorschau der Einstellungen für die Videoqualität, entsteht dadurch ein erheblicher Verarbeitungsaufwand. Die lokale Ansicht wird komprimiert und für die Übertragung bearbeitet wie in einer Live-Verbindung und dann für die lokale Anzeige dekomprimiert.

Um diesen Wert einzustellen, verwenden Sie Camera.setLoopback(). Wenn diese Eigenschaft auf „true“ gesetzt ist, können Sie den Komprimierungsgrad über Camera.setQuality() festlegen.

setLoopback()setQuality()
motionLevel Die erforderliche Bewegungsstärke zum Auslösen des activity-Ereignisses.int Die erforderliche Bewegungsstärke zum Auslösen des activity-Ereignisses. Die zulässigen Werte liegen zwischen 0 und 100. Der Standardwert ist 50.

Videos können unabhängig vom Wert der Eigenschaft motionLevel wiedergegeben werden. Weitere Informationen hierzu finden Sie unter setMotionLevel().

setMotionLevel()
motionTimeout Die Zeit in Millisekunden zwischen dem Zeitpunkt, zu dem die Kamera keine Bewegung mehr erfasst, und dem Zeitpunkt, zu dem das activity-Ereignis aufgerufen wird.int Die Zeit in Millisekunden zwischen dem Zeitpunkt, zu dem die Kamera keine Bewegung mehr erfasst, und dem Zeitpunkt, zu dem das activity-Ereignis aufgerufen wird. Der Standardwert ist 2000 (2 Sekunden).

Legen Sie diesen Wert über die setMotionLevel()-Methode fest.

setMotionLevel()
muted Ein boolescher Wert, der angibt, ob der Benutzer im Flash Player-Dialogfeld „Zugriffsschutz“ den Zugriff auf die Kamera verweigert (true) oder gewährt (false) hat.Boolean Ein boolescher Wert, der angibt, ob der Benutzer im Flash Player-Dialogfeld „Zugriffsschutz“ den Zugriff auf die Kamera verweigert (true) oder gewährt (false) hat. Wenn sich dieser Wert ändert, wird das status-Ereignis ausgelöst. getCamera()statusname Der Name der aktuellen Kamera, der von der Kamerahardware zurückgegeben wird.String Der Name der aktuellen Kamera, der von der Kamerahardware zurückgegeben wird. namesgetCamera()names Ein Array mit Strings, in dem die Namen aller verfügbaren Kameras enthalten sind. Das Dialogfeld „Zugriffsschutz“ von Flash Player wird nicht angezeigt.Array Ein Array mit Strings, in dem die Namen aller verfügbaren Kameras enthalten sind. Das Dialogfeld „Zugriffsschutz“ von Flash Player wird nicht angezeigt. Dieses Array verhält sich ebenso wie alle anderen ActionScript-Arrays, gibt also implizit die auf null basierende Indexposition jeder Kamera und die Anzahl der Kameras im System zurück (mithilfe von names.length). Weitere Informationen finden Sie im Array-Klasseneintrag names.

Für das Aufrufen der names-Eigenschaft ist eine umfassende Untersuchung der Hardware erforderlich. In den meisten Fällen können Sie die Standardkamera verwenden.

Bei Android wird nur eine Kamera unterstützt, auch wenn das Gerät über mehrere Kameras verfügt. Der Name der Kamera ist immer „Standard“.

getCamera()indexname
quality Die erforderliche Bildqualität, die sich aus dem Grad der Komprimierung jedes Videobilds ergibt.int Die erforderliche Bildqualität, die sich aus dem Grad der Komprimierung jedes Videobilds ergibt. Die zulässigen Werte liegen zwischen 1 (niedrigste Qualität, maximale Komprimierung) und 100 (höchste Qualität, keine Komprimierung). Der Standardwert ist 0, d. h., die Bildqualität kann gegebenenfalls geändert werden, damit die Bandbreite nicht überschritten wird.

Legen Sie diese Eigenschaft über die setQuality()-Methode fest.

setQuality()
width Die aktuelle Aufnahmebildbreite in Pixel.int Die aktuelle Aufnahmebildbreite in Pixel. Über die setMode()-Methode können Sie den gewünschten Wert für diese Eigenschaft festlegen. setMode()
SoundTransform Die SoundTransform-Klasse enthält Eigenschaften für die Lautstärke und Schwenkung.Object Die SoundTransform-Klasse enthält Eigenschaften für die Lautstärke und Schwenkung. Mit dem folgenden Beispiel wird eine MP3-Datei geladen und abgespielt. Bewegen Sie die Maus oder das Benutzereingabegerät, während die MP3-Datei abgespielt wird; die Lautstärke und die Richtungseinstellung ändern sich, wenn Sie die Maus oder das Benutzereingabegerät über die Bühne bewegen. Legen Sie zur Ausführung dieses Beispiels eine Datei mit dem Namen „MySound.mp3“ in dem Verzeichnis ab, in dem sich die SWF-Datei befindet. package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.net.URLRequest; import flash.utils.Timer; public class SoundTransformExample extends Sprite { private var url:String = "MySound.mp3"; private var soundFactory:Sound; private var channel:SoundChannel; private var positionTimer:Timer; public function SoundTransformExample() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; var request:URLRequest = new URLRequest(url); soundFactory = new Sound(); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.load(request); channel = soundFactory.play(); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); } private function setPan(pan:Number):void { trace("setPan: " + pan.toFixed(2)); var transform:SoundTransform = channel.soundTransform; transform.pan = pan; channel.soundTransform = transform; } private function setVolume(volume:Number):void { trace("setVolume: " + volume.toFixed(2)); var transform:SoundTransform = channel.soundTransform; transform.volume = volume; channel.soundTransform = transform; } private function mouseMoveHandler(event:MouseEvent):void { var halfStage:uint = Math.floor(stage.stageWidth / 2); var xPos:uint = event.stageX; var yPos:uint = event.stageY; var value:Number; var pan:Number; if (xPos > halfStage) { value = xPos / halfStage; pan = value - 1; } else if (xPos < halfStage) { value = (xPos - halfStage) / halfStage; pan = value; } else { pan = 0; } var volume:Number = 1 - (yPos / stage.stageHeight); setVolume(volume); setPan(pan); } } } flash.display.SimpleButton.soundTransformflash.display.Sprite.soundTransformflash.media.Microphone.soundTransformflash.media.SoundChannel.soundTransformflash.media.SoundMixer.soundTransformflash.net.NetStream.soundTransformSoundTransform Erstellt ein SoundTransform-Objekt.volNumber1Die Lautstärke im Bereich von 0 (stumm) bis 1 (volle Lautstärke). panningNumber0Die Richtungseinstellung des Sounds von links nach rechts in einem Bereich zwischen -1 (vollständig links) und 1 (vollständig rechts). Beim Wert 0 erfolgt keine Richtungseinstellung (Mitte). Erstellt ein SoundTransform-Objekt. Im folgenden Beispiel wird Sound nur über den rechten Kanal wiedergegeben und die Lautstärke ist auf 50 Prozent eingestellt.

Der Sound wird im Konstruktor und einem zweiten Soundkanal (channel) zugewiesen. Außerdem wird ein SoundTransform-Objekt (transform) erstellt. Dessen erstes Argument legt die Lautstärke auf 50 Prozent fest (der Bereich liegt zwischen 0,0 und 1,0). Das zweite Argument legt die Richtungseinstellung fest. In diesem Beispiel ist die Richtung auf 1,0 eingestellt, was bedeutet, dass der Sound nur aus dem rechten Lautsprecher kommt. Damit diese Einstellungen wirksam werden, wird das SoundTransform-Objekt transform der Eigenschaft soundTransform des Soundkanals zugewiesen.

Hinweis: Für dieses Beispiel wurde nur eine sehr eingeschränkte Fehlerverarbeitung geschrieben.

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.events.IOErrorEvent; public class SoundTransform_constructorExample extends Sprite { public function SoundTransform_constructorExample() { var mySound:Sound = new Sound(); var url:URLRequest = new URLRequest("mySound.mp3"); var channel:SoundChannel; var transform:SoundTransform = new SoundTransform(0.5, 1.0); mySound.load(url); channel = mySound.play(); channel.soundTransform = transform; mySound.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); } private function errorHandler(errorEvent:IOErrorEvent):void { trace("The sound could not be loaded: " + errorEvent.text); } } }
leftToLeft Ein Wert zwischen 0 (nicht) und 1 (vollständig), der angibt, welcher Anteil des linken Eingangssignals über den linken Lautsprecher wiedergegeben wird.Number Ein Wert zwischen 0 (nicht) und 1 (vollständig), der angibt, welcher Anteil des linken Eingangssignals über den linken Lautsprecher wiedergegeben wird. leftToRight Ein Wert zwischen 0 (nicht) und 1 (vollständig), der angibt, welcher Anteil des linken Eingangssignals über den rechten Lautsprecher wiedergegeben wird.Number Ein Wert zwischen 0 (nicht) und 1 (vollständig), der angibt, welcher Anteil des linken Eingangssignals über den rechten Lautsprecher wiedergegeben wird. pan Die Richtungseinstellung des Sounds von links nach rechts in einem Bereich zwischen -1 (vollständig links) und 1 (vollständig rechts).Number Die Richtungseinstellung des Sounds von links nach rechts in einem Bereich zwischen -1 (vollständig links) und 1 (vollständig rechts). Beim Wert 0 erfolgt keine Richtungseinstellung (ausgeglichene Mitte zwischen rechts und links). rightToLeft Ein Wert zwischen 0 (nicht) und 1 (vollständig), der angibt, welcher Anteil des rechten Eingangssignals über den linken Lautsprecher wiedergegeben wird.Number Ein Wert zwischen 0 (nicht) und 1 (vollständig), der angibt, welcher Anteil des rechten Eingangssignals über den linken Lautsprecher wiedergegeben wird. rightToRight Ein Wert zwischen 0 (nicht) und 1 (vollständig), der angibt, welcher Anteil des rechten Eingangssignals über den rechten Lautsprecher wiedergegeben wird.Number Ein Wert zwischen 0 (nicht) und 1 (vollständig), der angibt, welcher Anteil des rechten Eingangssignals über den rechten Lautsprecher wiedergegeben wird. volume Die Lautstärke im Bereich von 0 (stumm) bis 1 (volle Lautstärke).Number Die Lautstärke im Bereich von 0 (stumm) bis 1 (volle Lautstärke).
StageVideoAvailability Diese Klasse definiert eine Aufzählung, die angibt, ob zurzeit Bühnenvideo verfügbar ist.Eine Aufzählung, die angibt, ob zurzeit Bühnenvideo verfügbar ist. Object Diese Klasse definiert eine Aufzählung, die angibt, ob zurzeit Bühnenvideo verfügbar ist. flash.events.StageVideoAvailabilityEventAVAILABLE Bühnenvideo ist zurzeit verfügbar.availableStringBühnenvideo ist zurzeit verfügbar. Bühnenvideo ist zurzeit verfügbar. UNAVAILABLE Bühnenvideo ist zurzeit nicht verfügbar.unavailableStringBühnenvideo ist zurzeit nicht verfügbar. Bühnenvideo ist zurzeit nicht verfügbar. StageWebView Die StageWebView-Klasse zeigt HTML-Inhalt in einem Bühnenviewport an.flash.events:EventDispatcher Die StageWebView-Klasse zeigt HTML-Inhalt in einem Bühnenviewport an.

Die StageWebView-Klasse stellt eine einfache Möglichkeit bereit, HTML-Inhalte auf Geräten anzuzeigen, auf denen die HTMLLoader-Klasse nicht unterstützt wird. Die Klasse ermöglicht keine Interaktion zwischen ActionScript und dem HTML-Inhalt außer durch die Methoden und Eigenschaften der StageWebView-Klasse selbst. Es gibt zum Beispiel keine Möglichkeit, Werte oder Aufruffunktionen zwischen ActionScript und JavaScript zu übergeben.

Unterstützung von AIR-Profilen: Diese Funktion wird auf allen Desktopbetriebssystemen und mobilen Geräten unterstützt, jedoch nicht auf Geräten mit AIR für TV. Mit der StageWebView.isSupported-Eigenschaft können Sie testen, ob zur Laufzeit Unterstützung gegeben ist. Weitere Informationen zum AIR-Support über mehrere Profile finden Sie unter Unterstützung von AIR-Profilen.

Bei Geräten in den mobilen und erweiterten mobilen Profilen verwendet die StageWebView-Klasse die Systemwebkontrolle, die vom Betriebssystem des Geräts bereitgestellt wird. Deshalb können sich die verfügbaren Funktionen und Darstellungen von Gerät zu Gerät unterscheiden. Bei Desktopcomputern (Desktop- und erweiterte Desktopprofile) verwendet die StageWebView-Klasse die interne AIR WebKit-Engine. Die verfügbaren Funktionen und Darstellungen sind die gleichen wie bei der HTMLLoader-Klasse (ohne die enge Integration und Skriptbrücke zwischen ActionScript und JavaScript, die eine HTMLLoader-Instanz bereitstellt). Mit der isSupported-Eigenschaft der StageWebView-Klasse können Sie testen, ob die Klasse auf dem aktuellen Gerät unterstützt wird.

Die StageWebView-Klasse ist KEIN Anzeigeobjekt und kann der Flash-Anzeigeliste nicht hinzugefügt werden. Stattdessen zeigen Sie ein StageWebView-Objekt an, indem Sie es mithilfe der stage-Eigenschaft direkt an die Bühne anhängen. Die an die Bühne angehängte StageWebView-Instanz wird über allen ggf. vorhandenen Flash-Anzeigeobjekten angezeigt. Sie steuern die Größe und Position des Renderingbereichs mit der viewPort-Eigenschaft. Es gibt keine Möglichkeit, die Tiefenreihenfolge verschiedener StageWebView-Objekte zu steuern. Das Überlappen von zwei Instanzen wird nicht empfohlen.

Wenn der Inhalt im StageWebView-Objekt den Fokus hat, hat das StageWebView-Objekt die erste Gelegenheit zur Verarbeitung von Tastatureingaben. Die Bühne, an die das StageWebView-Objekt angehängt ist, setzt Tastatureingaben ab, die nicht verarbeitet wurden. Der normale Erfassen/Bubbling-Ablauf gilt hier nicht, da die StageWebView-Instanz kein Teil der Anzeigeliste ist.

In Android 3.0+ muss eine Anwendung die Hardwarebeschleunigung im Android-Element „manifestAdditions“ des AIR-Anwendungsdeskriptors aktivieren, damit Plug-In-Inhalte in einem StageWebView-Objekt angezeigt werden.

Im folgenden Beispiel wird ein StageWebView-Objekt so eingerichtet, dass es die Bühne füllt. Das Beispiel lädt eine Website mit der loadURL()-Methode und verwendet die Zurück- und Suchen Softwaretaste des Geräts für die Navigation im Verlauf. package { import flash.display.MovieClip; import flash.media.StageWebView; import flash.geom.Rectangle; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.desktop.NativeApplication; public class StageWebViewExample extends MovieClip{ private var webView:StageWebView = new StageWebView(); public function StageWebViewExample() { webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadURL( "http://www.example.com" ); stage.addEventListener( KeyboardEvent.KEY_DOWN, onKey ); } private function onKey( event:KeyboardEvent ):void { if( event.keyCode == Keyboard.BACK && webView.isHistoryBackEnabled ) { trace("Back."); webView.historyBack(); event.preventDefault(); } if( event.keyCode == Keyboard.SEARCH && webView.isHistoryForwardEnabled ) { trace("Forward."); webView.historyForward(); } } } }
HTMLLoader-KlasseMark Doherty: AIR on Android: TweetrAppMark Doherty: OAuth SupportAktivieren von Flash Player und anderen Plug-Ins in einem StageWebView-ObjektfocusOut Wird abgesetzt, wenn StageWebView den Fokus abgibt.flash.events.FocusEvent Wird abgesetzt, wenn StageWebView den Fokus abgibt. focusIn Wird abgesetzt, wenn dieses StageWebView-Objekt den Fokus erhält.flash.events.FocusEvent Wird abgesetzt, wenn dieses StageWebView-Objekt den Fokus erhält. error Gibt an, dass ein Fehler aufgetreten ist.flash.events.ErrorEvent Gibt an, dass ein Fehler aufgetreten ist. complete Gibt an, dass der letzte Ladevorgang, der von der loadString()- oder loadURL()-Methode angefordert wurde, abgeschlossen ist.flash.events.Event.COMPLETEflash.events.EventGibt an, dass der letzte Ladevorgang, der von der loadString()- oder load()-Methode angefordert wurde, abgeschlossen ist. Gibt an, dass der letzte Ladevorgang, der von der loadString()- oder loadURL()-Methode angefordert wurde, abgeschlossen ist. locationChanging Gibt an, dass die location-Eigenschaft des StageWebView-Objekts gleich geändert wird.flash.events.LocationChangeEvent.LOCATION_CHANGINGflash.events.LocationChangeEventGibt an, dass die location-Eigenschaft des StageWebView-Objekts gleich geändert wird. Gibt an, dass die location-Eigenschaft des StageWebView-Objekts gleich geändert wird.

Ein locationChanging-Ereignis wird nur dann abgesetzt, wenn die Positionsänderung durch HTML-Inhalt oder durch Code innerhalb des StageWebView-Objekts initiiert wurde, zum Beispiel, wenn der Benutzer auf einen Hyperlink klickt. Standardmäßig wird die neue Position in diesem StageWebView-Objekt angezeigt. Sie können die preventDefault()-Methode des Ereignisobjekts aufrufen, um das Standardverhalten zu verhindern. Sie könnten zum Beispiel die flash.net.navigateToURL()-Funktion verwenden, um die Seite im Systembrowser basierend auf der location-Eigenschaft des Ereignisobjekts zu öffnen.

Es wird kein locationChanging-Ereignis abgesetzt, wenn Sie die Position mit einer der folgenden Methoden ändern:

  • historyBack()
  • historyForward()
  • historyGo()
  • loadString()
  • loadURL()
  • reload()
locationChange Gibt an, dass die location-Eigenschaft des StageWebView-Objekts geändert wurde.flash.events.LocationChangeEvent.LOCATION_CHANGEflash.events.LocationChangeEventGibt an, dass die location-Eigenschaft des StageWebView-Objekts geändert wurde. Gibt an, dass die location-Eigenschaft des StageWebView-Objekts geändert wurde.

Das Ereignis kann nicht abgebrochen werden.

StageWebView Erstellt ein StageWebView-Objekt. Erstellt ein StageWebView-Objekt.

Das Objekt ist unsichtbar, bis es an eine Bühne angehängt wird und der viewPort festgelegt wurde.

assignFocus Weist dem Inhalt in diesem StageWebView-Objekt den Fokus zu.directionStringnonegibt an, ob das erste oder das letzte Objekt des angezeigten Inhalts, das den Fokus erhalten kann, den Fokus erhält. Weist dem Inhalt in diesem StageWebView-Objekt den Fokus zu.

Richtungswerte sind in der FocusDirection-Klasse definiert: "bottom" (unten), "none" (keine) und "top" (oben).

FocusDirection
dispose Entfernt dieses StageWebView-Objekt. Entfernt dieses StageWebView-Objekt.

Der Aufruf von dispose() ist optional. Wenn Sie keinen Verweis auf diese StageWebView-Instanz behalten, wird sie bei der automatischen Speicherbereinigung entfernt. Mit dem Aufruf von dispose() kann die Speicherbereinigung eher erfolgen oder zu einer passenderen Zeit.

drawViewPortToBitmapData Zeichnet den Viewport der StageWebView in eine Bitmap. Die Breite oder Höhe der Bitmap unterscheidet sich von der Breite oder Höhe des Viewports. ArgumentErrorArgumentErrorDie Bitmap hat den Wert null. ErrorErrorbitmapflash.display:BitmapDataDas BitmapData-Objekt, in dem der sichtbare Teil des StageWebView-Viewport gezeichnet werden soll. Zeichnet den Viewport der StageWebView in eine Bitmap.

Erfassen Sie die Bitmap und setzen Sie die Bühne auf null, um den Inhalt über dem StageWebView-Objekt anzuzeigen.

Mit dem folgenden Beispiel werden zwei Beschriftungen angezeigt: google und facebook. Beim Klicken auf die Beschriftung wird die entsprechende Webseite erfasst und als Schnappschuss auf der Bühne angezeigt. package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.*; import flash.geom.Rectangle; import flash.media.StageWebView; import flash.net.*; import flash.text.TextField; public class stagewebview1 extends Sprite { public var webView:StageWebView = new StageWebView(); public var textGoogle:TextField=new TextField(); public var textFacebook:TextField=new TextField(); public function stagewebview() { textGoogle.htmlText="<b>Google</b>"; textGoogle.x=300; textGoogle.y=-80; addChild(textGoogle); textFacebook.htmlText="<b>Facebook</b>"; textFacebook.x=0; textFacebook.y=-80; addChild(textFacebook); textGoogle.addEventListener(MouseEvent.CLICK,goGoogle); textFacebook.addEventListener(MouseEvent.CLICK,goFaceBook); webView.stage = this.stage; webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); } public function goGoogle(e:Event):void { webView.loadURL("http://www.google.com"); webView.stage = null; webView.addEventListener(Event.COMPLETE,handleLoad); } public function goFaceBook(e:Event):void { webView.loadURL("http://www.facebook.com"); webView.stage = null; webView.addEventListener(Event.COMPLETE,handleLoad); } public function handleLoad(e:Event):void { var bitmapData:BitmapData = new BitmapData(webView.viewPort.width, webView.viewPort.height); webView.drawViewPortToBitmapData(bitmapData); var webViewBitmap:Bitmap=new Bitmap(bitmapData); addChild(webViewBitmap); } } }
historyBack Navigiert zur vorherigen Seite im Browserverlauf. Navigiert zur vorherigen Seite im Browserverlauf. historyForward Navigiert zur nächsten Seite im Browserverlauf. Navigiert zur nächsten Seite im Browserverlauf. loadString Lädt den angegebenen HTML-String und zeigt ihn an.textStringder String mit HTML- oder XHTML-Inhalt, der angezeigt werden soll. mimeTypeStringtext/htmlDer MIME-Typ des Inhalts, entweder „text/html“ oder „application/xhtml+xml“. Lädt den angegebenen HTML-String und zeigt ihn an.

Wenn die loadString()-Methode verwendet wird, wird location als „about:blank“ gemeldet . In URLs innerhalb des HTML-Strings kann nur das Standard-URI-Schema verwendet werden. Die AIR-URI-Schemas, „app:“ und „app-storage:“ sind nicht zulässig.

Der HTML-Inhalt kann keine lokalen Ressourcen wie zum Beispiel Bilddateien laden. XMLHttpRequests sind nicht zulässig.

Es werden nur die MIME-Typen „text/html“ und „application/xhtml+xml“ unterstützt.

Im folgenden Beispiel wird ein StageWebView-Objekt so eingerichtet, dass es die Bühne füllt. Das Beispiel lädt eine HTML-Seite mit der loadString()-Methode. var webView:StageWebView = new StageWebView(); webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); var htmlString:String = "<!DOCTYPE HTML>" + "<html>" + "<body>" + "<h1>Example</h1>" + "<p>King Phillip cut open five green snakes.</p>" + "</body>" + "</html>"; webView.loadString( htmlString, "text/html" );
loadURL Lädt die Seite unter der angegebenen URL.urlString Lädt die Seite unter der angegebenen URL.

Die URL kann die folgenden URI-Schemas verwenden: http:, https:, file:, data: und javascript:. Inhalt, der mit dem file:-Schema geladen wurde, kann andere lokale Ressourcen laden.

Im folgenden Beispiel wird ein StageWebView-Objekt so eingerichtet, dass es die Bühne füllt. Das Beispiel lädt eine Website mit der loadURL()-Methode.

Hinweis: Bei Android müssen Sie die INTERNET-Berechtigung im AIR-Anwendungsdeskriptor spezifizieren, um remote URLs zu laden.

var webView:StageWebView = new StageWebView(); webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadURL( "http://www.example.com" );
reload Lädt die aktuelle Seite neu. Lädt die aktuelle Seite neu. stop Hält den aktuellen Ladevorgang an. Hält den aktuellen Ladevorgang an. isHistoryBackEnabled Gibt an, ob es im Browserverlauf eine vorherige Seite gibt.Boolean Gibt an, ob es im Browserverlauf eine vorherige Seite gibt. isHistoryForwardEnabled Gibt an, ob es im Browserverlauf eine nächste Seite gibt.Boolean Gibt an, ob es im Browserverlauf eine nächste Seite gibt. isSupported Gibt an, ob die StageWebView-Klasse auf dem aktuellen Gerät unterstützt wird.Boolean Gibt an, ob die StageWebView-Klasse auf dem aktuellen Gerät unterstützt wird. location Die URL der aktuellen Position.String Die URL der aktuellen Position. stage Die Bühne, auf der dieses StageWebView-Objekt angezeigt wird.flash.display:Stage Die Bühne, auf der dieses StageWebView-Objekt angezeigt wird.

Stellen Sie stage auf null ein, um dieses StageWebView-Objekt auszublenden.

title Der HTML-Titelwert.String Der HTML-Titelwert. viewPort Der Bereich auf der Bühne, in dem das StageWebView-Objekt angezeigt wird.flash.geom:RectangleDer Rectangle-Wert ist nicht gültig. RangeErrorRangeError Der Bereich auf der Bühne, in dem das StageWebView-Objekt angezeigt wird.
VideoStatus Diese Klasse definiert eine Aufzählung, die mögliche Ebenen der Videodekodierung beschreibt.Eine Aufzählung, die mögliche Ebenen der Videodekodierung beschreibt. Object Diese Klasse definiert eine Aufzählung, die mögliche Ebenen der Videodekodierung beschreibt. ACCELERATED Zeigt die hardwarebeschleunigte (GPU-) Videodekodierung an.acceleratedStringZeigt die hardwarebeschleunigte (GPU-) Videodekodierung an. Zeigt die hardwarebeschleunigte (GPU-) Videodekodierung an. SOFTWARE Zeigt die Software-Videodekodierung an.softwareStringZeigt die Software-Videodekodierung an. Zeigt die Software-Videodekodierung an. UNAVAILABLE Videodekodierung wird nicht unterstützt.unavailableStringVideo wird nicht unterstützt. Videodekodierung wird nicht unterstützt. MediaPromise Die MediaPromise-Klasse repräsentiert die Zusage, ein Medienobjekt bereitzustellen.flash.desktop:IFilePromiseflash.events:EventDispatcher Die MediaPromise-Klasse repräsentiert die Zusage, ein Medienobjekt bereitzustellen.

Die data-Eigenschaft eines MediaEvent-Objekts ist eine MediaPromise-Instanz. Sie können die MediaPromise-Methoden verwenden, um auf das zugesagte Medienobjekt zuzugreifen. Die unterstützten Medienformate sind Standbilder und Videos.

Sie können MediaPromise-Objekte nicht erstellen. Der Aufruf von new MediaPromise() generiert einen Laufzeitfehler.

MediaEventIFilePromiseLoader.LoadFilePromise()IDataInputCameraRoll.browseForImage()CameraUIcomplete Ein MediaPromise-Objekt setzt ein complete-Ereignis ab, wenn alle Daten gelesen wurden.flash.events.Event.COMPLETEflash.events.Event Ein MediaPromise-Objekt setzt ein complete-Ereignis ab, wenn alle Daten gelesen wurden. Das Ereignis zeigt an, dass im zugrunde liegenden Stream keine weiteren Daten verfügbar sind.

Ein complete-Ereignis wird nicht von einer synchronen Datenquelle abgesetzt.

progress Ein MediaPromise-Objekt setzt progress-Ereignisse ab, wenn die Daten verfügbar werden.flash.events.ProgressEvent.PROGRESSflash.events.ProgressEvent Ein MediaPromise-Objekt setzt progress-Ereignisse ab, wenn die Daten verfügbar werden.

Die bytesTotal-Eigenschaft aller progress-Ereignisse mit Ausnahme des letzten hat den Wert 0. Wenn alle Daten sofort verfügbar sind, werden keine progress-Ereignisse abgesetzt. Von synchronen Datenquellen werden keine progress-Ereignisse abgesetzt.

ioError Ein MediaPromise-Objekt setzt ein ioError-Ereignis ab, wenn beim Lesen des zugrunde liegenden Datenstreams ein Fehler auftritt.flash.events.IOErrorEvent.IOERRORflash.events.IOErrorEvent Ein MediaPromise-Objekt setzt ein ioError-Ereignis ab, wenn beim Lesen des zugrunde liegenden Datenstreams ein Fehler auftritt. Nachdem dieses Ereignis abgesetzt wurde, können keine Daten mehr gelesen werden. close Ein MediaPromise-Objekt setzt ein close-Ereignis ab, wenn der zugrunde liegende Datenstream geschlossen wurde.flash.events.Event.CLOSEflash.events.Event Ein MediaPromise-Objekt setzt ein close-Ereignis ab, wenn der zugrunde liegende Datenstream geschlossen wurde. close Schließt die Datenquelle. Schließt die Datenquelle. open Öffnet die zugrunde liegende Datenquelle und gibt die IDataInput-Instanz zurück, mit der sie gelesen werden kann.flash.utils:IDataInput Öffnet die zugrunde liegende Datenquelle und gibt die IDataInput-Instanz zurück, mit der sie gelesen werden kann.

Wenn die zugrunde liegende Datenquelle asynchron ist, setzt das MediaPromise-Objekt progress- und complete-Ereignisse ab, um anzuzeigen, ob Daten zum Lesen verfügbar sind. Wenn die Datenquelle synchron ist, sind alle Daten sofort verfügbar, weshalb diese Ereignisse nicht abgesetzt werden.

Hinweis: Sie können ein MediaPromise-Objekt mit der loadFilePromise()-Methode der Loader-Klasse laden, anstatt die Daten manuell zu lesen.

Loader.loadFilePromise()
reportError Wird von der Laufzeitumgebung verwendet, um Fehler zu melden.eflash.events:ErrorEventDas abzusetzende Fehlerereignis. Wird von der Laufzeitumgebung verwendet, um Fehler zu melden.

Anwendungscode sollte diese Methode nicht aufrufen.

file Die File-Instanz, die das Medienobjekt repräsentiert, falls eines vorhanden ist.flash.filesystem:File Die File-Instanz, die das Medienobjekt repräsentiert, falls eines vorhanden ist.

Die Eigenschaft verweist auf ein File-Objekt, wenn die zugrunde liegende Datenquelle dateibasiert ist und die Datei für die Anwendung zugänglich ist. Andernfalls ist die Eigenschaft null.

isAsync Gibt an, ob die zugrunde liegende Datenquelle asynchron oder synchron ist.Boolean Gibt an, ob die zugrunde liegende Datenquelle asynchron oder synchron ist.

mediaType Der allgemeine Medientyp, entweder Bild oder Video.String Der allgemeine Medientyp, entweder Bild oder Video.

Die Konstanten in der MediaType-Klasse definieren mögliche Werte für diese Eigenschaft:

  • MediaType.IMAGE
  • MediaType.VIDEO
MediaType
relativePath Der Dateiname des Medienobjekts, falls eines vorhanden ist.String Der Dateiname des Medienobjekts, falls eines vorhanden ist.

Ein Dateiname ist verfügbar, wenn die zugrunde liegende Datenquelle dateibasiert ist und die Datei für die Anwendung zugänglich ist. Andernfalls ist die Eigenschaft null.

SoundLoaderContext Über die SoundLoaderContext-Klasse werden Sicherheitsprüfungen bei Dateien durchgeführt, in denen Sounddaten geladen werden.Object Über die SoundLoaderContext-Klasse werden Sicherheitsprüfungen bei Dateien durchgeführt, in denen Sounddaten geladen werden. SoundLoaderContext-Objekte werden als Argument für den Konstruktor und die load()-Methode der Soundklasse übergeben.

Beachten Sie bei Verwendung dieser Klasse das folgende Sicherheitsmodell:

  • Sounddaten können nicht geladen und wiedergegeben werden, wenn sich die aufrufende Datei in einer Netzwerk-Sandbox befindet und die zu ladende Sounddatei lokal gespeichert ist.
  • In der Standardeinstellung ist das Laden und die Wiedergabe von Sounddaten nicht zulässig, wenn über die aufrufende lokale Datei Sound remote geladen und wiedergegeben werden soll. Benutzer müssen für diesen Vorgang eine explizite Berechtigung erteilen.
  • Für bestimmte Vorgänge bei Sounddaten liegen Beschränkungen vor. Auf die Daten in einem geladenen Sound kann nicht von einer Datei in einer anderen Domäne zugegriffen werden, es sei denn, Sie implementieren eine URL-Richtliniendatei. Zu den soundbezogenen APIs, die unter diese Beschränkung fallen, zählen die Sound.id3-Eigenschaft sowie die Methoden SoundMixer.computeSpectrum(), SoundMixer.bufferTime und SoundTransform().

In Adobe AIR unterliegt Inhalt in der Sicherheitssandbox der Anwendung (Inhalt, der mit der AIR-Anwendung installiert wird) nicht diesen Sicherheitseinschränkungen.

Weitere Informationen zum Thema Sicherheit finden Sie im Flash Player Developer Center im Abschnitt Sicherheit.

SoundLoaderContext Erstellt ein neues SoundLoaderContext-Objekt.bufferTimeNumber1000Die Anzahl der Sekunden zum Laden von Streamingsound in einen Puffer vor dem Streaming. checkPolicyFileBooleanfalseGibt an, ob beim Laden des Objekts nach dem Vorhandensein einer URL-Richtliniendatei gesucht werden soll (true). Erstellt ein neues SoundLoaderContext-Objekt. Im folgenden Beispiel wird der Puffer für zu ladenden Sound auf drei Sekunden eingestellt.

Der erste Parameter eines SoundLoaderContext-Objekts (context) wird verwendet, um den Standardpufferwert von einer Sekunde auf drei Sekunden zu erhöhen. (Der Wert wird in Millisekunden angegeben.) Wenn der zweite Parameter des SoundLoaderContext-Objekts auf true gesetzt wird, prüft Flash Player beim Laden des Objekts, ob eine Cross-Domain-Richtliniendatei vorhanden ist. Hier wurde der Standardwert false verwendet, sodass keine Überprüfung der Richtliniendatei stattfindet. Die load()-Methode des Soundobjekts stellt mithilfe der Kontexteinstellung sicher, dass der Streamingsound drei Sekunden in einen Puffer geladen wird, bevor der Sound gestreamt wird. Das URLRequest-Objekt bestimmt die Position der Datei, bei der es sich um ein Podcast von Adobe handelt. Falls beim Laden der Sounddatei ein IOErrorEvent.IO_ERROR-Fehler auftritt, wird die errorHandler()-Methode aufgerufen.

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); } } }
bufferTime Die Anzahl der Millisekunden zum Vorausladen eines Streamingsounds in einen Puffer vor dem Streaming.1000Number Die Anzahl der Millisekunden zum Vorausladen eines Streamingsounds in einen Puffer vor dem Streaming.

Beachten Sie, dass der Wert von SoundLoaderContext.bufferTime durch Festlegen der globalen SoundMixer.bufferTime-Eigenschaft nicht überschrieben werden kann. Die SoundMixer.bufferTime-Eigenschaft wirkt sich auf die Zwischenspeicherzeit für eingebetteten Streamingsound in einer SWF-Datei aus und hängt nicht von dynamisch erstellten Soundobjekten (d. h. den ActionScript erstellten Soundobjekten) ab.

checkPolicyFile Gibt an, ob die Anwendung vor dem Laden von Sound eine Cross-Domain-Richtliniendatei vom Server des geladenen Sounds herunterladen soll.falseBoolean Gibt an, ob die Anwendung vor dem Laden von Sound eine Cross-Domain-Richtliniendatei vom Server des geladenen Sounds herunterladen soll. Diese Eigenschaft wird über die Sound.load()-Methode auf Sound angewendet, der von außerhalb der Domäne der aufrufenden Datei geladen wird.

Setzen Sie diese Eigenschaft auf true, wenn Sie Sound von außerhalb der Domäne der aufrufenden Datei laden und Code in der aufrufenden Datei Zugriff auf niedriger Ebene auf die Sounddaten benötigt. Zu den Beispielen für Sounddaten-Zugriff auf niedriger Ebene gehört der Verweis auf die Sound.id3-Eigenschaft zum Abrufen eines ID3Info-Objekts oder der Aufruf der SoundMixer.computeSpectrum()-Methode zum Abrufen von Soundbeispielen des geladenen Sounds. Wenn Sie während des Ladevorgangs auf Sounddaten zugreifen, ohne die checkPolicyFile-Eigenschaft auf true zu setzen, wird möglicherweise eine SecurityError-Ausnahme ausgelöst, da die erforderliche Richtliniendatei nicht heruntergeladen wurde.

Wenn kein Zugriff auf niedriger Ebene auf die zu ladenden Sounddaten erforderlich ist, setzen Sie checkPolicyFile nicht auf true. Die Suche nach einer Richtliniendatei beansprucht Netzwerkbandbreite und verzögert möglicherweise den Start des Downloads. Sie sollte daher nur durchgeführt werden, wenn dies unbedingt erforderlich ist.

Wenn Sie Sound.load() aufrufen und SoundLoaderContext.checkPolicyFile auf true gesetzt ist, muss Flash Player oder AIR entweder erfolgreich eine relevante URL-Richtliniendatei herunterladen oder feststellen, dass keine derartige Richtliniendatei existiert, bevor der angegebene Sound heruntergeladen wird. In Flash Player oder AIR werden die folgenden Aktionen in der angegebenen Reihenfolge ausgeführt, um zu überprüfen, ob eine Richtliniendatei vorhanden ist.

  • Flash Player oder AIR überprüft Richtliniendateien, die bereits heruntergeladen wurden.
  • Flash Player oder AIR versucht, ausstehende Richtliniendateien herunterzuladen, die in Aufrufen von Security.loadPolicyFile() angegeben wurden.
  • Flash Player oder AIR versucht, eine Richtliniendatei vom Standardspeicherort herunterzuladen, der der URL des Sounds entspricht, d. h. /crossdomain.xml auf dem gleichen Server wie URLRequest.url. (Die URL des Sounds ist in der url-Eigenschaft des URLRequest-Objekts angegeben, das an Sound.load() oder die Sound()-Konstruktorfunktion übergeben wird.)

In allen Fällen muss eine entsprechende Richtliniendatei auf dem Server des Sounds vorhanden sein, über die anhand des Speicherorts der Richtliniendatei auf die Sounddatei unter URLRequest.url zugegriffen werden kann und über die die Domäne der aufrufenden SWF-Datei über mindestens ein <allow-access-from>-Tag auf den Sound zugreifen kann.

Wenn Sie checkPolicyFile auf true setzen, wird der Sound in Flash Player oder AIR erst geladen, nachdem die Richtliniendatei überprüft wurde. Führen Sie Methoden auf niedriger Ebene für die Sounddaten (z. B. Aufrufe von Sound.id3 oder SoundMixer.computeSpectrum()) erst durch, nachdem die Ereignisse progress und complete über das Soundobjekt ausgelöst wurden.

Wenn Sie checkPolicyFile auf true setzen und keine passende Richtliniendatei gefunden wird, wird erst dann ein Fehler zurückgegeben, wenn Sie eine Methode ausführen, die eine Richtliniendatei benötigt. In diesem Fall meldet Flash Player oder AIR einen SecurityError-Ausnahmefehler. Nach dem Empfang eines complete-Ereignisses können Sie testen, ob eine entsprechende Richtliniendatei gefunden wurde. Rufen Sie dazu den Wert von Sound.id3 in einem try-Block ab, und überprüfen Sie, ob SecurityError ausgegeben wird.

Bei Verwendung von checkPolicyFile beim Herunterladen eines Sounds von einer URL, bei der serverseitige HTTP-Weiterleitungen verwendet werden, ist Folgendes zu beachten: Flash Player oder AIR versucht, Richtliniendateien abzurufen, die mit der url-Eigenschaft des an Sound.load() übergebenen URLRequest-Objekts übereinstimmen. Wenn die endgültige Sounddatei aufgrund von HTTP-Weiterleitungen von einer anderen URL stammt, gelten die ursprünglich heruntergeladenen Richtliniendateien möglicherweise nicht für die endgültige URL des Sounds. Dies ist jedoch die URL, die bei Sicherheitsentscheidungen von Bedeutung ist.

Es folgt eine mögliche Lösung für diese Situation. Nach dem Empfang eines progress- oder complete-Ereignisses können Sie den Wert der Sound.url-Eigenschaft überprüfen, die die endgültige URL des Sounds enthält. Rufen Sie dann die Security.loadPolicyFile()-Methode mit der URL einer Richtliniendatei auf, die auf der endgültigen URL des Sounds beruht. Rufen Sie schließlich den Wert von Sound.id3 auf, bis keine Ausnahme mehr ausgegeben wird.

Dies bezieht sich nicht auf Inhalt in der Sandbox der AIR-Anwendung. Inhalt in der Anwendungssandbox hat immer (unabhängig von seiner Herkunft) programmgesteuerten Zugriff auf Soundinhalt.

Weitere Informationen zum Thema Sicherheit finden Sie im Flash Player Developer Center im Abschnitt Sicherheit.

flash.media.Sound.load()flash.media.Sound.id3flash.media.SoundMixer.computeSpectrum()flash.media.Sound.urlflash.system.Security.loadPolicyFile()
SoundChannel Die SoundChannel-Klasse steuert Sound in einer Anwendung.flash.events:EventDispatcher Die SoundChannel-Klasse steuert Sound in einer Anwendung. Jeder Sound ist einem Soundkanal zugewiesen, und die Anwendung kann über mehrere Soundkanäle verfügen, die zusammengemischt werden. Die SoundChannel-Klasse enthält eine stop()-Methode, Eigenschaften zum Überwachen der Amplitude (Lautstärke) eines Kanals und eine Eigenschaft zum Zuweisen eines SoundTransform-Objekts zu einem Kanal. Im folgenden Beispiel wird eine MP3-Datei geladen und abgespielt und es werden Informationen über Soundereignisse angezeigt, die beim Laden und Abspielen der MP3-Datei auftreten. Ein Timerobjekt stellt alle 50 Millisekunden aktualisierte Informationen zur Position des Abspielkopfs bereit. Legen Sie zur Ausführung dieses Beispiels eine Datei mit dem Namen „MySound.mp3“ in dem Verzeichnis ab, in dem sich die SWF-Datei befindet. package { import flash.display.Sprite; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; import flash.utils.Timer; public class SoundChannelExample extends Sprite { private var url:String = "MySound.mp3"; private var soundFactory:Sound; private var channel:SoundChannel; private var positionTimer:Timer; public function SoundChannelExample() { var request:URLRequest = new URLRequest(url); soundFactory = new Sound(); soundFactory.addEventListener(Event.COMPLETE, completeHandler); soundFactory.addEventListener(Event.ID3, id3Handler); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler); soundFactory.load(request); channel = soundFactory.play(); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); positionTimer = new Timer(50); positionTimer.addEventListener(TimerEvent.TIMER, positionTimerHandler); positionTimer.start(); } private function positionTimerHandler(event:TimerEvent):void { trace("positionTimerHandler: " + channel.position.toFixed(2)); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function id3Handler(event:Event):void { trace("id3Handler: " + event); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); positionTimer.stop(); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler: " + event); } private function soundCompleteHandler(event:Event):void { trace("soundCompleteHandler: " + event); positionTimer.stop(); } } } SoundSoundTransformsoundComplete Wird ausgelöst, wenn die Wiedergabe eines Sounds beendet ist.flash.events.Event.SOUND_COMPLETEflash.events.Event Wird ausgelöst, wenn die Wiedergabe eines Sounds beendet ist. Im folgenden Beispiel wählt der Benutzer Titel aus einer Wiedergabeliste aus und wählt dann „Play“, um die Lieder in der ausgewählten Reihenfolge abzuspielen.

Im Konstruktor wird ein Textfeld definiert, das die Liste der Titel sowie eine Zeile, die zum Abspielen ausgewählt wird, enthält. (Normalerweise werden Schaltflächen für die Wiedergabe und Listenfelder für Titellisten verwendet.) Ein Textformatobjekt wird definiert, das das Format der Titel nach der Auswahl zu kursiv ändert. Wenn ein Benutzer das Textfeld auswählt, wird die Methode clickHandler() aufgerufen.

In der clickHandler()-Methode gibt die getLineIndexAtPoint()-Methode des Textfeld-Objekts den Index der Zeile, die der Benutzer ausgewählt hat, zurück. Mithilfe des Zeilenindex ruft die Methode getLineText() den Textinhalt ab. Mit der if-Anweisung wird überprüft, ob der Benutzer eine Auswahl für die Wiedergabe getroffen oder der Wiedergabeliste einen Titel hinzufügt hat. Wenn der Benutzer sich für das Abspielen entschieden hat und ein Titel ausgewählt wurde, wird der Ereignis-Listener für den Mausklick entfernt und die playNext()-Methode aufgerufen, um mit der Wiedergabe der Titel zu beginnen. Wenn der Benutzer einen Titel ausgewählt hat, wird der Inhalt der Zeile dem Array songList hinzugefügt und das Format der Zeile wird auf kursiv eingestellt.

Die playNext()-Methode durchläuft die Arrayliste, um die einzelnen Titel zu laden und abzuspielen. Der Titel wird auch einem Soundkanal zugewiesen. Ein Ereignis-Listener für den Soundkanal wird hinzugefügt, um zu reagieren, wenn ein Titel abgespielt wurde und das Ereignis Event.SOUND_COMPLETE ausgelöst wird. Die soundCompleteHandler()-Methode ruft dann die Methode playNext() auf, um den nächsten Titel abzuspielen. Dieser Prozess wird fortgesetzt, bis alle im Array aufgeführten Titel abgespielt wurden.

package { import flash.display.Sprite; import flash.media.Sound; import flash.media.SoundChannel; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.text.TextFormat; import flash.net.URLRequest; import flash.events.Event; import flash.events.IOErrorEvent; public class SoundChannel_event_soundCompleteExample extends Sprite { private var channel:SoundChannel = new SoundChannel(); private var songList:Array = new Array(); private var listTextField:TextField = new TextField(); private var songFormat:TextFormat = new TextFormat(); private var arrayIndex:int = 0; private var songSelected:Boolean = false; public function SoundChannel_event_soundCompleteExample() { listTextField.autoSize = TextFieldAutoSize.LEFT; listTextField.border = true listTextField.background = true; listTextField.text = "Song1.mp3\n" + "Song2.mp3\n" + "Song3.mp3\n" + "Song4.mp3\n" + "PLAY"; songFormat.italic = true; listTextField.addEventListener(MouseEvent.CLICK, clickHandler); addChild(listTextField); } private function clickHandler(e:MouseEvent):void { var index:int = listTextField.getLineIndexAtPoint(e.localX, e.localY); var line:String = listTextField.getLineText(index); var firstIndex:uint = listTextField.getLineOffset(index); var playLine:uint = listTextField.numLines - 1; if((index == playLine) && (songSelected == true)) { listTextField.removeEventListener(MouseEvent.CLICK, clickHandler); playNext(); } else if (index != playLine) { songList.push(line.substr(0, (line.length - 1))); listTextField.setTextFormat(songFormat, firstIndex, (firstIndex + listTextField.getLineLength(index))); songSelected = true; } } private function playNext():void { if(arrayIndex < songList.length) { var snd:Sound = new Sound(); snd.load(new URLRequest(songList[arrayIndex])); channel = snd.play(); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); arrayIndex++; } else { songSelected = false; while(arrayIndex > 0) { songList.pop(); arrayIndex--; } } } private function soundCompleteHandler(e:Event):void { playNext(); } private function errorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } } }
stop Beendet die Wiedergabe des im Kanal wiedergegebenen Sounds. Beendet die Wiedergabe des im Kanal wiedergegebenen Sounds. Im folgenden Beispiel kann der Benutzer eine Sounddatei anhalten und fortsetzen.

Im Konstruktor wird die Sounddatei geladen. (In diesem Beispiel wird davon ausgegangen, dass sich die Datei im selben Verzeichnis wie die SWF-Datei befindet.) Als Schaltfläche, mit der der Benutzer Sound abspielen oder anhalten kann, wird ein Textfeld verwendet. Wenn der Benutzer das Textfeld button auswählt, wird die clickHandler()-Methode aufgerufen.

In der clickHandler()-Methode wird Sound auf die Wiedergabe eingestellt und einem Soundkanal zugewiesen, wenn der Benutzer das Textfeld zum ersten Mal auswählt. Wenn der Benutzer das Textfeld das nächste Mal auswählt, wird die Soundwiedergabe angehalten. Die position-Eigenschaft des Soundkanals zeichnet die Position des Sounds zum Zeitpunkt des Stopps auf. Diese Eigenschaft wird verwendet, um den Sound ab dieser Position weiter abzuspielen, nachdem der Benutzer das Textfeld ausgewählt hat, um die Wiedergabe fortzusetzen. Bei jedem Aufrufen der Sound.play()-Methode wird ein neues SoundChannel-Objekt erstellt und der Variablen channel zugewiesen. Das Soundobjekt muss einem SoundChannel-Objekt zugewiesen werden, um mithilfe der Methode stop() des Soundkanals den Sound anzuhalten.

package { import flash.display.Sprite; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLLoader; import flash.net.URLRequest; import flash.text.TextField; import flash.events.MouseEvent; import flash.text.TextFieldAutoSize; public class SoundChannel_stopExample extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel = new SoundChannel(); private var button:TextField = new TextField(); public function SoundChannel_stopExample() { var req:URLRequest = new URLRequest("MySound.mp3"); snd.load(req); button.x = 10; button.y = 10; button.text = "PLAY"; button.border = true; button.background = true; button.selectable = false; button.autoSize = TextFieldAutoSize.CENTER; button.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(button); } private function clickHandler(e:MouseEvent):void { var pausePosition:int = channel.position; if(button.text == "PLAY") { channel = snd.play(pausePosition); button.text = "PAUSE"; } else { channel.stop(); button.text = "PLAY"; } } } }
leftPeak Die aktuelle Amplitude (Lautstärke) des linken Kanals von 0 (stumm) bis 1 (volle Amplitude).Number Die aktuelle Amplitude (Lautstärke) des linken Kanals von 0 (stumm) bis 1 (volle Amplitude). position Wenn Sound abgespielt wird, zeigt die Positionseigenschaft die aktuelle Stelle, die in der Sounddatei abgespielt wird, in Millisekunden an.Number Wenn Sound abgespielt wird, zeigt die Positionseigenschaft die aktuelle Stelle, die in der Sounddatei abgespielt wird, in Millisekunden an. Wenn Sound beendet oder angehalten wurde, zeigt die Positionseigenschaft die zuletzt abgespielte Stelle in der Sounddatei an.

Häufig wird der Wert der Eigenschaft position gespeichert, wenn der Sound gestoppt wird. Sie können die Wiedergabe später fortsetzen, indem Sie sie an der gespeicherten Position starten.

Wenn der Sound in einer Schleife wiedergegeben wird, wird position am Anfang jeder Schleife auf 0 zurückgesetzt.

rightPeak Die aktuelle Amplitude (Lautstärke) des rechten Kanals von 0 (stumm) bis 1 (volle Amplitude).Number Die aktuelle Amplitude (Lautstärke) des rechten Kanals von 0 (stumm) bis 1 (volle Amplitude). soundTransform Das SoundTransform-Objekt, das dem Soundkanal zugewiesen wurde.flash.media:SoundTransform Das SoundTransform-Objekt, das dem Soundkanal zugewiesen wurde. Ein SoundTransform-Objekt enthält Eigenschaften zum Festlegen von Lautstärke, Schwenkung sowie Zuordnung von linkem und rechtem Lautsprecher. SoundTransform
SoundMixer Die SoundMixer-Klasse enthält statische Eigenschaften und Methoden für globale Soundsteuerung innerhalb der Anwendung.Object Die SoundMixer-Klasse enthält statische Eigenschaften und Methoden für globale Soundsteuerung innerhalb der Anwendung. Die SoundMixer-Klasse steuert eingebetteten und Streamingsound in der Anwendung. Sie steuert keine dynamisch erzeugten Sounds (also Sounds, die als Antwort auf Soundobjekte generiert wurden, die ein sampleData-Ereignis auslösen). areSoundsInaccessible Gibt an, ob aufgrund der Sicherheitsbeschränkungen nicht auf Sound zugegriffen werden darf.Die Stringdarstellung des booleschen Werts. Boolean Gibt an, ob aufgrund der Sicherheitsbeschränkungen nicht auf Sound zugegriffen werden darf. Beispielsweise kann auf Sound, der von einer anderen Domäne als der des Inhalts, der diese Methode aufruft, geladen wird, nicht zugegriffen werden, wenn der Server für den Sound keine URL-Richtliniendatei hat, die Zugriff auf diese Domäne gewährt. Sound kann zwar geladen und wiedergegeben werden, Methoden auf niedriger Ebene, z. B. Abrufen von ID3-Metadaten für Sound, können jedoch nicht durchgeführt werden.

Bei Inhalten von AIR-Anwendungen in der Sicherheitssandbox der Anwendung wird beim Aufrufen dieser Methode immer false zurückgegeben. Alle Sounds, einschließlich der aus anderen Domänen geladenen, sind für Inhalte in der Sicherheitssandbox der Anwendung zugänglich.

computeSpectrum()
computeSpectrum Erstellt einen Schnappschuss der aktuellen Schallwelle und legt ihn im angegebenen ByteArray-Objekt ab.outputArrayflash.utils:ByteArrayEin ByteArray-Objekt mit den Werten, die mit dem Sound verknüpft sind. Wenn auf Sound aufgrund von Sicherheitsbeschränkungen nicht zugegriffen werden kann (areSoundsInaccessible == true), bleibt das outputArray-Objekt unverändert. Wenn sämtlicher Sound gestoppt wird, ist das outputArray-Objekt mit Nullen gefüllt. FFTModeBooleanfalseEin boolescher Wert, der angibt, ob für die Sounddaten zunächst eine Fourier-Transformation durchgeführt wird. Wenn Sie diesen Parameter auf true setzen, gibt die Methode statt der unformatierten Schallwelle ein Frequenzspektrum zurück. Im Frequenzspektrum sind niedrige Frequenzen im linken Bereich und hohe Frequenzen im rechten Bereich dargestellt. stretchFactorint0Die Auflösung der Soundsamples. Wenn Sie den stretchFactor-Wert auf 0 setzen, werden die Daten mit 44,1 KHz gesampelt, beim Wert 1 mit 22,05 KHz, beim Wert 2 mit 11,025 KHz usw. Erstellt einen Schnappschuss der aktuellen Schallwelle und legt ihn im angegebenen ByteArray-Objekt ab. Die Werte werden als normalisierte Gleitkommawerte im Bereich zwischen -1,0 und 1,0 formatiert. Das für den outputArray-Parameter übergebene ByteArray-Objekt wird mit den neuen Werten überschrieben. Die Größe des erstellten ByteArray-Objekts ist auf 512 Gleitkommawerte festgelegt, wobei die ersten 256 Werte den linken Kanal darstellen und die restlichen 256 Werte den rechten Kanal.

Hinweis: Diese Methode unterliegt den Sicherheitsbeschränkungen für lokale Dateien und den Beschränkungen für Cross-Domain-Ladevorgänge. Bei Verwendung lokaler Dateien oder von Sound, der über einen Server in einer anderen Domäne als die des aufrufenden Inhalts geladen wurde, müssen Sie die Sandbox-Beschränkungen möglicherweise durch eine Cross-Domain-Richtliniendatei umgehen. Weitere Informationen finden Sie in der Beschreibung zur Soundklasse. Darüber hinaus können mit dieser Methode keine Daten aus RTMP-Streams extrahiert werden, auch wenn die Methode über Inhalt aufgerufen wird, die sich in der gleichen Domäne wie der RTMP-Server befinden.

Diese Methode wird über RTMP in Flash Player 9.0.115.0 und höher und in Adobe AIR unterstützt. Sie können den Zugriff auf Streams auf Flash Media Server in einem serverseitigen Skript steuern. Weitere Informationen finden Sie in den Abschnitten zu den Eigenschaften Client.audioSampleAccess und Client.videoSampleAccess in Server-Side ActionScript Language Reference for Adobe Flash Media Server.

Im folgenden Beispiel wird mit der computeSpectrum()-Methode eine grafische Darstellung der Soundwellendaten erzeugt.

Im Konstruktor wird eine Sounddatei geladen und für die Wiedergabe eingerichtet. (In diesem Beispiel wird keine Fehlerverarbeitung verwendet, und es wird davon ausgegangen, dass sich die Sounddatei im selben Verzeichnis befindet wie die SWF-Datei.) Im Beispiel wird auf das Ereignis Event.ENTER_FRAME gewartet, während der Sound abgespielt wird. Dabei wird wiederholt die Methode onEnterFrame() aufgerufen, um eine Kurve mit den Werten der Sounddaten zu zeichnen. Wenn die Wiedergabe beendet ist, stoppt die onPlaybackComplete()-Methode das Zeichnen, indem sie den Listener für das Event.ENTER_FRAME-Ereignis entfernt.

In der onEnterFrame()-Methode speichert die computeSpectrum()-Methode den unformatierten Sound im Bytearray-Objekt bytes. Die Daten werden mit 44,1 KHz gesampelt. Der Bytearray enthält 512 Byte Daten, die jeweils einen Gleitkommawert zwischen -1 und 1 aufweisen. Die ersten 256 Werte repräsentieren den linken Kanal, die zweiten 256 den rechten Kanal. Die erste for-Schleife liest die ersten 256 Datenwerte (den linken Stereokanal) und zeichnet mithilfe der Graphics.lineTo()-Methode eine Linie von jedem Punkt zum nächsten. (Die Vektorgrafikanzeige der Soundwelle wird direkt in das Sprite-Objekt der Klasse geschrieben.) Die Soundbyte werden als 32-Bit-Gleitkommazahl vom Bytestream gelesen und mit der Plothöhe multipliziert, um den vertikalen Bereich der Kurve aufzunehmen. Die Breite wird auf das Doppelte der Breite der Kanallänge festgelegt. Die zweite for-Schleife liest die nächsten 256 Werte (den rechten Stereokanal) und plottet die Linien in umgekehrter Reihenfolge. Die Methoden g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); und g.lineTo(0, PLOT_HEIGHT); zeichnen die Grundlinien für die Wellen. Die resultierende Wellenform produziert einen Spiegelbildeffekt.

package { import flash.display.Sprite; import flash.display.Graphics; import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.net.URLRequest; import flash.utils.ByteArray; import flash.text.TextField; public class SoundMixer_computeSpectrumExample extends Sprite { public function SoundMixer_computeSpectrumExample() { var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("Song1.mp3"); snd.load(req); var channel:SoundChannel; channel = snd.play(); addEventListener(Event.ENTER_FRAME, onEnterFrame); channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); } private function onEnterFrame(event:Event):void { var bytes:ByteArray = new ByteArray(); const PLOT_HEIGHT:int = 200; const CHANNEL_LENGTH:int = 256; SoundMixer.computeSpectrum(bytes, false, 0); var g:Graphics = this.graphics; g.clear(); g.lineStyle(0, 0x6600CC); g.beginFill(0x6600CC); g.moveTo(0, PLOT_HEIGHT); var n:Number = 0; for (var i:int = 0; i < CHANNEL_LENGTH; i++) { n = (bytes.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); } g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); g.endFill(); g.lineStyle(0, 0xCC0066); g.beginFill(0xCC0066, 0.5); g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); for (i = CHANNEL_LENGTH; i > 0; i--) { n = (bytes.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); } g.lineTo(0, PLOT_HEIGHT); g.endFill(); } private function onPlaybackComplete(event:Event):void { removeEventListener(Event.ENTER_FRAME, onEnterFrame); } } }
areSoundsInaccessible()flash.utils.ByteArrayflash.media.Soundflash.media.SoundLoaderContext.checkPolicyFile
stopAll Stoppt sämtlichen derzeit wiedergegebenen Sound. Stoppt sämtlichen derzeit wiedergegebenen Sound.

>In Flash Professional stoppt diese Methode den Abspielkopf nicht. Wenn der Abspielkopf Bilder erreicht, in denen Streamingsound enthalten ist, wird die Wiedergabe dieses Sounds fortgesetzt.

Beachten Sie bei Verwendung dieser Eigenschaft das folgende Sicherheitsmodell von:

  • In der Standardeinstellung wird durch Aufrufen der soundMixer.stopAll()-Methode nur der Sound gestoppt, der sich in der gleichen Sicherheitssandbox wie das Objekt befindet, das die Methode aufruft. Sound, dessen Wiedergabe nicht über die gleiche Sandbox wie die des aufrufenden Objekts gestartet wurde, wird nicht gestoppt.
  • Wenn Sie Sound mithilfe der load()-Methode der Soundklasse 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, wird in Flash Player oder AIR auf dem Server eine Cross-Domain-Richtliniendatei gesucht, über die der Sound geladen wird. Wenn der Server über eine Cross-Domain-Richtliniendatei verfügt und die Datei die Domäne des aufrufenden Inhalts zulässt, kann die Datei den geladenen Sound über die soundMixer.stopAll()-Methode stoppen. Andernfalls ist dies nicht möglich.

In Adobe AIR unterliegt Inhalt in der Sicherheitssandbox der Anwendung (Inhalt, der mit der AIR-Anwendung installiert wird) nicht diesen Sicherheitseinschränkungen.

Weitere Informationen zum Thema Sicherheit finden Sie im Flash Player Developer Center im Abschnitt Sicherheit.

Im folgenden Beispiel werden mit der Methode stopAll() zwei Sounds stummgeschaltet, die gleichzeitig abgespielt werden.

Im Konstruktor werden zwei unterschiedliche Sounddateien geladen und für das Abspielen eingestellt. Der erste Sound wird lokal geladen und einem Soundkanal zugewiesen. (Es wird davon ausgegangen, dass sich die Datei im selben Verzeichnis wie die SWF-Datei befindet.) Die zweite Datei wird von der Adobe-Site geladen und gestreamt. Damit die Methode SoundMixer.stopAll() verwendet werden kann, müssen alle Sounds zugänglich sein. (Für Überprüfung der domänenübergreifenden Richtliniendatei kann ein SoundLoaderContext-Objekt verwendet werden.) Jeder Sound verfügt auch über einen Ereignis-Listener, der aufgerufen wird, wenn beim Laden der Sounddatei ein IO-Fehler auftritt. Des Weiteren wird ein Textfeld muteButton erstellt. Es wartet auf ein Klickereignis, das die Methode muteButtonClickHandler() aufruft.

Wenn in der muteButtonClickHandler()-Methode der Inhalt des Textfelds „MUTE“ ist, überprüft die areSoundsInaccessible()-Methode, ob der Soundmischer Zugriff auf die Dateien hat. Wenn auf die Dateien zugegriffen werden kann, stoppt die stopAll()-Methode die Sounds. Bei der erneuten Auswahl des Textfelds beginnt die Wiedergabe der ersten Sounddatei, und der Inhalt des Textfelds ändert sich zu „MUTE“. Dieses Mal schaltet die Methode stopAll() die einzige Sounddatei, die abgespielt wird, stumm. Die stop()-Methode des Soundkanals kann auch dazu verwendet werden, einen bestimmten Sound, der dem Kanal zugewiesen ist, zu stoppen. (Dazu muss der Sound dem Kanal jedes Mal neu zugewiesen werden, wenn die play()-Methode aufgerufen wird.)

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundLoaderContext; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.events.IOErrorEvent; public class SoundMixer_stopAllExample extends Sprite { private var firstSound:Sound = new Sound(); private var secondSound:Sound = new Sound(); private var muteButton:TextField = new TextField(); private var channel1:SoundChannel = new SoundChannel(); public function SoundMixer_stopAllExample() { firstSound.load(new URLRequest("mySound.mp3")); secondSound.load(new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3")); firstSound.addEventListener(IOErrorEvent.IO_ERROR, firstSoundErrorHandler); secondSound.addEventListener(IOErrorEvent.IO_ERROR, secondSoundErrorHandler); channel1 = firstSound.play(); secondSound.play(); muteButton.autoSize = TextFieldAutoSize.LEFT; muteButton.border = true; muteButton.background = true; muteButton.text = "MUTE"; muteButton.addEventListener(MouseEvent.CLICK, muteButtonClickHandler); this.addChild(muteButton); } private function muteButtonClickHandler(event:MouseEvent):void { if(muteButton.text == "MUTE") { if(SoundMixer.areSoundsInaccessible() == false) { SoundMixer.stopAll(); muteButton.text = "click to play only one of sound."; } else { muteButton.text = "The sounds are not accessible."; } } else { firstSound.play(); muteButton.text = "MUTE"; } } private function firstSoundErrorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } private function secondSoundErrorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } } }
bufferTime Die Anzahl der Sekunden zum Laden eines eingebetteten Streamingsounds in einen Puffer vor dem Streaming.int Die Anzahl der Sekunden zum Laden eines eingebetteten Streamingsounds in einen Puffer vor dem Streaming. Auf die Daten in einem geladenen Sound, einschließlich der Zwischenspeicherzeit, kann nicht von einer SWF-Datei, die sich in einer anderen Domäne befindet, zugegriffen werden, es sei denn, Sie implementieren eine Cross-Domain-Richtliniendatei. Weitere Informationen zu Sicherheit und Sound finden Sie in der Beschreibung zur Soundklasse. Auf die Daten in einem geladenen Sound, einschließlich der Zwischenspeicherzeit, kann über Code in einer anderen Domäne nur zugegriffen werden, wenn eine Cross-Domain-Richtliniendatei implementiert ist. In der Anwendungssandbox einer AIR-Anwendung kann Code jedoch auf Daten in Sounddateien aus jeder Quelle zugreifen. Weitere Informationen zu Sicherheit und Sound finden Sie in der Beschreibung zur Soundklasse.

Die SoundMixer.bufferTime-Eigenschaft wirkt sich nur auf die Zwischenspeicherzeit für eingebetteten Streamingsound in einer SWF-Datei aus und hängt nicht von dynamisch erstellten Soundobjekten (d. h. den in ActionScript erstellten Soundobjekten) ab. Durch den Wert von SoundMixer.bufferTime kann der Standardwert für die Zwischenspeicherzeit nicht überschrieben oder festgelegt werden, die in dem für die Sound.load()-Methode übergebenen SoundLoaderContext-Objekt angegeben ist.

Sound
soundTransform Das SoundTransform-Objekt, über das die globalen Soundeigenschaften gesteuert werden.flash.media:SoundTransform Das SoundTransform-Objekt, über das die globalen Soundeigenschaften gesteuert werden. Ein SoundTransform-Objekt enthält Eigenschaften zum Festlegen von Lautstärke, Schwenkung sowie Zuordnung von linkem und rechtem Lautsprecher. Das in dieser Eigenschaft verwendete SoundTransform-Objekt enthält endgültige Soundeinstellungen, die nach dem Anwenden der einzelnen Soundeinstellungen auf sämtliche Sounds angewendet werden. SoundTransform
CameraUI Die CameraUI-Klasse ermöglicht Ihnen, ein Standbild oder Video mit der Standardkameraanwendung des Geräts zu erfassen.flash.events:EventDispatcher Die CameraUI-Klasse ermöglicht Ihnen, ein Standbild oder Video mit der Standardkameraanwendung des Geräts zu erfassen.

Die launch()-Methode fordert an, dass das Gerät die standardmäßige Kameraanwendung öffnet. Das erfasste Bild oder Video ist im MediaEvent-Objekt verfügbar, das für das complete-Ereignis abgesetzt wird. Da die standardmäßige Kameraanwendung das Bild oder Video in verschiedenen Formaten speichern kann, gibt es keine Garantie dafür, dass das zurückgegebene Medienobjekt von der AIR-Laufzeitumgebung geladen und angezeigt werden kann.

Bei einigen Plattformen ist das Medienobjekt, das von der Kamera zurückgegeben wird, als dateibasierte Medienzusage zugänglich. Bei anderen Plattformen ist die Medienzusage nicht dateibasiert und die file- und relativePath-Eigenschaften des MediaPromise-Objekts sind null. Verwenden Sie diese Eigenschaften deshalb nicht in Code, der auf mehreren Plattformen verwendet wird.

Bei einigen Plattformen wird das Medienobjekt automatisch in der Medienbibliothek des Geräts gespeichert. Bei Plattformen, auf denen Bilder und Video nicht automatisch von der Kamerastandardanwendung gespeichert werden, können Sie die CameraRoll-addBitmapData()-Funktion verwenden, um das Medienobjekt zu speichern.

Unter Android wird die standardmäßige Kameraanwendung nicht geöffnet, wenn die externe Speicherkarte nicht verfügbar ist (zum Beispiel, wenn der Benutzer die Karte als USB-Massenspeichergerät gemountet hat). Außerdem verliert die AIR-Anwendung, die die Kamera aufgerufen hat, den Fokus. Wenn auf dem Gerät nur noch wenige Ressourcen verfügbar sin, kann die AIR-Anwendung vom Betriebssystem beendet werden, bevor die Medienerfassung abgeschlossen ist.

Unterstützung von AIR-Profilen: Diese Funktion wird auf mobilen Geräten unterstützt, nicht jedoch auf Desktopbetriebssystemen oder Geräten mit AIR für TV. Mit der CameraUI.isSupported-Eigenschaft können Sie testen, ob zur Laufzeit Unterstützung gegeben ist. Weitere Informationen zum AIR-Support über mehrere Profile finden Sie unter Unterstützung von AIR-Profilen.

Im folgenden Beispiel wird die CameraUI-Klasse verwendet, um die standardmäßige Kameraanwendung des Geräts zu öffnen. Wenn der Benutzer ein Foto aufnimmt, wird das Bild der Anzeigeliste hinzugefügt. package { import flash.desktop.NativeApplication; import flash.display.Loader; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.ErrorEvent; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.MediaEvent; import flash.media.CameraUI; import flash.media.MediaPromise; import flash.media.MediaType; public class CameraUIStillImage extends MovieClip{ private var deviceCameraApp:CameraUI = new CameraUI(); private var imageLoader:Loader; public function CameraUIStillImage() { this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; if( CameraUI.isSupported ) { trace( "Initializing camera..." ); deviceCameraApp.addEventListener( MediaEvent.COMPLETE, imageCaptured ); deviceCameraApp.addEventListener( Event.CANCEL, captureCanceled ); deviceCameraApp.addEventListener( ErrorEvent.ERROR, cameraError ); deviceCameraApp.launch( MediaType.IMAGE ); } else { trace( "Camera interface is not supported."); } } private function imageCaptured( event:MediaEvent ):void { trace( "Media captured..." ); var imagePromise:MediaPromise = event.data; if( imagePromise.isAsync ) { trace( "Asynchronous media promise." ); imageLoader = new Loader(); imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, asyncImageLoaded ); imageLoader.addEventListener( IOErrorEvent.IO_ERROR, cameraError ); imageLoader.loadFilePromise( imagePromise ); } else { trace( "Synchronous media promise." ); imageLoader.loadFilePromise( imagePromise ); showMedia( imageLoader ); } } private function captureCanceled( event:Event ):void { trace( "Media capture canceled." ); NativeApplication.nativeApplication.exit(); } private function asyncImageLoaded( event:Event ):void { trace( "Media loaded in memory." ); showMedia( imageLoader ); } private function showMedia( loader:Loader ):void { this.addChild( loader ); } private function cameraError( error:ErrorEvent ):void { trace( "Error:" + error.text ); NativeApplication.nativeApplication.exit(); } } }
Michael Chaize: Android, AIR, and the Cameracancel Das cancel-Ereignis wird abgesetzt, wenn der Benutzer die Camera UI schließt, ohne ein Bild oder Video aufzunehmen.flash.events.Event.CANCELflash.events.Event Das cancel-Ereignis wird abgesetzt, wenn der Benutzer die Camera UI schließt, ohne ein Bild oder Video aufzunehmen. error Das error-Ereignis wird abgesetzt, wenn die standardmäßige Kameraanwendung nicht geöffnet werden kann.flash.events.ErrorEvent.ERRORflash.events.ErrorEvent Das error-Ereignis wird abgesetzt, wenn die standardmäßige Kameraanwendung nicht geöffnet werden kann. complete Das complete-Ereignis wird abgesetzt, wenn der Benutzer ein Standbild oder Video in der Kameraanwendung aufnimmt.flash.events.MediaEvent.COMPLETEflash.events.MediaEvent Das complete-Ereignis wird abgesetzt, wenn der Benutzer ein Standbild oder Video in der Kameraanwendung aufnimmt. CameraUI Erstellt ein CameraUI-Objekt. Erstellt ein CameraUI-Objekt. launch Startet die standardmäßige Kameraanwendung des Geräts.requestedMediaTypeStringDer zu erfassende Medienobjekttyp. Die gültigen Werte für diesen Parameter werden in der MediaType-Klasse definiert:
  • MediaType.IMAGE
  • MediaType.VIDEO
Startet die standardmäßige Kameraanwendung des Geräts.

Mit dieser Klassen können Sie Standbilder oder Videos erfassen. Die Videoerfassung erfolgt mit dem Camcorderprofil „Niedrige Qualität“ des Geräts.

Beim Aufrufen der launch()-Methode wird die standardmäßige Kameraanwendung des Geräts aufgerufen. Die AIR-Anwendung verliert den Fokus und wartet darauf, dass der Benutzer ein Standbild aufnimmt oder das Erfassen des Videos beendet. Nachdem der Benutzer das gewünschte Medium erfasst hat, erhält die AIR-Anwendung wieder den Fokus und dieses CameraUI-Objekt setzt ein complete-Ereignis ab. Wenn der Benutzer den Vorgang abbricht, setzt dieses CameraUI-Objekt stattdessen ein cancel-Ereignis ab.

Hinweis: Es ist möglich, dass die AIR-Anwendung vom Android-Betriebssystem beendet wird, während sie im Hintergrund darauf wartet, dass der Benutzer ein Bild oder ein Video aufnimmt. In diesem Fall muss der Benutzer die Anwendung neu starten. Die AIR-Anwendung setzt kein Medienereignis für die vorherige Bilderfassung ab.

Sie können mit der data-Eigenschaft des MediaEvent-Objekts, das für das complete-Ereignis abgesetzt wurde, auf die erfasste Mediendatei zugreifen. Diese Eigenschaft ist eine Instanz der MediaPromise-Klasse, die Sie mithilfe der loadFilePromise()-Methode der Loader-Klasse in eine Anwendung laden können. Beachten Sie, dass die Gerätekamera erfasste Medien in verschiedenen Formaten speichern kann. Video ist in diese Hinsicht besonders problematisch. Es ist unter Umständen nicht möglich, die erfassten Medien in AIR anzuzeigen.

MediaTypeMediaPromiseLoader.loadFilePromise()completeflash.events:MediaEventWird abgesetzt, wenn ein Medienobjekt erfasst wird. Wird abgesetzt, wenn ein Medienobjekt erfasst wird.cancelflash.events:EventWird abgesetzt, wenn der Benutzer die native Kameraanwendung beendet, ohne ein Medienobjekt zu erfassen. Wird abgesetzt, wenn der Benutzer die native Kameraanwendung beendet, ohne ein Medienobjekt zu erfassen.errorflash.events:ErrorEventWird abgesetzt, wenn die standardmäßige Kameraanwendung bereits verwendet wird. Wird abgesetzt, wenn die standardmäßige Kameraanwendung bereits verwendet wird.errorflash.events:ErrorEventWird abgesetzt, wenn sich die AIR-Anwendung beim Aufrufen dieser Funktion im Hintergrund befindet. Wird abgesetzt, wenn sich die AIR-Anwendung beim Aufrufen dieser Funktion im Hintergrund befindet.
isSupported Gibt an, ob die CameraUI-Klasse auf dem aktuellen Gerät unterstützt wird.Boolean Gibt an, ob die CameraUI-Klasse auf dem aktuellen Gerät unterstützt wird.
SoundCodec Die SoundCodec-Klasse ist eine Zusammenfassung von Konstantenwerten, die zur Einstellung der codec-Eigenschaft in der Microphone-Klasse verwendet werden.Object Die SoundCodec-Klasse ist eine Zusammenfassung von Konstantenwerten, die zur Einstellung der codec-Eigenschaft in der Microphone-Klasse verwendet werden. NELLYMOSER Gibt an, dass der Nellymoser-Codec zur Komprimierung von Audiodaten verwendet werden soll.NellyMoserString Gibt an, dass der Nellymoser-Codec zur Komprimierung von Audiodaten verwendet werden soll. Diese Konstante ist der Standardwert für die Microphone.codec-Eigenschaft. SPEEX Gibt an, dass der Speex-Codec zur Komprimierung von Audiodaten verwendet werden soll.SpeexString Gibt an, dass der Speex-Codec zur Komprimierung von Audiodaten verwendet werden soll. CameraRoll Die CameraRoll-Klasse ermöglicht Ihnen, auf Bilddaten in der Medienbibliothek oder „Camera Roll“ des Systems zuzugreifen. Unterstützung von AIR-Profilen: Diese Funktion wird auf mobilen Geräten unterstützt, nicht jedoch auf Desktopbetriebssystemen oder Geräten mit AIR für TV.flash.events:EventDispatcher Die CameraRoll-Klasse ermöglicht Ihnen, auf Bilddaten in der Medienbibliothek oder „Camera Roll“ des Systems zuzugreifen.

Unterstützung von AIR-Profilen: Diese Funktion wird auf mobilen Geräten unterstützt, nicht jedoch auf Desktopbetriebssystemen oder Geräten mit AIR für TV. Weitere Informationen zum AIR-Support über mehrere Profile finden Sie unter Unterstützung von AIR-Profilen.

Die CameraRoll.addBitmapData()-Methode fügt ein Bild dem dedizierten Medienarchiv des Geräts hinzu. Um zur Laufzeit festzustellen, ob Ihre Anwendung die CameraRoll.addBitmapData()-Methode unterstützt, überprüfen Sie die CameraRoll.supportsAddImage-Eigenschaft.

Die CameraRoll.browseForImage()-Methode öffnet ein Dialogfeld zur Bildauswahl, in dem ein Benutzer ein Bild aus der Medienbibliothek auswählen kann. Wenn der Benutzer ein Bild auswählt, setzt das CameraRoll-Objekt ein select-Ereignis ab. Verwenden Sie das MediaEvent-Objekt, das für dieses Ereignis abgesetzt wird, um auf das ausgewählte Bild zuzugreifen. Um zur Laufzeit festzustellen, ob Ihre Anwendung die CameraRoll.browseForImage()-Methode unterstützt, überprüfen Sie die CameraRoll.supportsBrowseForImage-Eigenschaft.

cancel Wird abgesetzt, wenn ein Benutzer einen Bildauswahlvorgang abbricht, ohne ein Bild auszuwählen.flash.events.Event.CANCELflash.events.Event Wird abgesetzt, wenn ein Benutzer einen Bildauswahlvorgang abbricht, ohne ein Bild auszuwählen. select Wird abgesetzt, wenn ein Benutzer ein Bild aus der Medienbibliothek des Geräts auswählt.flash.events.MediaEvent.SELECTflash.events.MediaEvent Wird abgesetzt, wenn ein Benutzer ein Bild aus der Medienbibliothek des Geräts auswählt.

Das MediaEvent-Objekt, das für dieses Ereignis abgesetzt wird, ermöglicht den Zugriff auf das ausgewählten Medium.

error Das error-Ereignis wird abgesetzt, wenn ein Fehler auftritt. flash.events.ErrorEvent.ERRORflash.events.ErrorEvent Das error-Ereignis wird abgesetzt, wenn ein Fehler auftritt.

Mögliche Fehlerquellen:

  • Es kann kein Bildauswahldialog geöffnet werden.
  • Es wird bereits ein Bildauswahldialogfeld verwendet.
  • Die AIR-Anwendung versucht, nach einem Bild zu suchen, während sie sich im Hintergrund befindet.
  • Ein Bild lässt sich nicht der Medienbibliothek hinzufügen.
  • Es wird eine Methode aufgerufen, die vom Gerät nicht unterstützt wird.
complete Zeigt an, dass ein addBitmapData()-Vorgang erfolgreich abgeschlossen wurde.flash.events.Event.COMPLETEflash.events.Event Zeigt an, dass ein addBitmapData()-Vorgang erfolgreich abgeschlossen wurde. CameraRoll Erstellt ein CameraRoll-Objekt. Erstellt ein CameraRoll-Objekt.

Von ActionScript wird nur eine Medienbibliothek unterstützt. Alle CameraRoll-Objekte speichern in demselben Bildrepository.

addBitmapData Fügt ein Bild der Camera Roll des Geräts hinzu.bitmapDataflash.display:BitmapDataein BitmapData-Objekt, das das Bild enthält, das an die Camera Roll gesendet werden soll. Fügt ein Bild der Camera Roll des Geräts hinzu.

Um zur Laufzeit festzustellen, ob Ihre Anwendung die CameraRoll.addBitmapData()-Methode unterstützt, überprüfen Sie die CameraRoll.supportsAddImage-Eigenschaft.

browseForImage Öffnet ein Dialogfeld zur Bildauswahl, in dem der Benutzer ein vorhandenes Bild aus der Camera Roll des Geräts auswählen kann. Öffnet ein Dialogfeld zur Bildauswahl, in dem der Benutzer ein vorhandenes Bild aus der Camera Roll des Geräts auswählen kann.

Wenn der Benutzer ein Bild auswählt, setzt diese CameraRoll-Instanz ein select-Ereignis ab, das ein MediaEvent-Objekt enthält. Mit der data-Eigenschaft des MediaEvent-Objekts können Sie das Bild laden. Die data-Eigenschaft ist ein MediaPromise-Objekt, das Sie mit der loadFilePromise()-Methode der Loader-Klasse laden können.

Um zur Laufzeit festzustellen, ob Ihre Anwendung die CameraRoll.browseForImage()-Methode unterstützt, überprüfen Sie die CameraRoll.supportsBrowseForImage-Eigenschaft.

package flash.media.examples { import flash.media.CameraRoll; import flash.media.MediaPromise; import flash.media.MediaType; import flash.events.MediaEvent; import flash.events.Event; import flash.display.Loader; import flash.display.Sprite; import flash.events.IOErrorEvent; import flash.display.StageAlign; import flash.display.StageScaleMode; public class CameraRollTest extends Sprite{ private var mediaSource:CameraRoll = new CameraRoll(); public function CameraRollTest() { this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; if( CameraRoll.supportsBrowseForImage ) { log( "Browsing for image..." ); mediaSource.addEventListener( MediaEvent.SELECT, imageSelected ); mediaSource.addEventListener( Event.CANCEL, browseCanceled ); mediaSource.browseForImage(); } else { log( "Browsing in camera roll is not supported."); } } private var imageLoader:Loader; private function imageSelected( event:MediaEvent ):void { log( "Image selected..." ); var imagePromise:MediaPromise = event.data; imageLoader = new Loader(); if( imagePromise.isAsync ) { log( "Asynchronous media promise." ); imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, imageLoaded ); imageLoader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, imageLoadFailed ); imageLoader.loadFilePromise( imagePromise ); } else { log( "Synchronous media promise." ); imageLoader.loadFilePromise( imagePromise ); this.addChild( imageLoader ); } } private function browseCanceled( event:Event ):void { log( "Image browse canceled." ); } private function imageLoaded( event:Event ):void { log( "Image loaded asynchronously." ); this.addChild( imageLoader ); } private function imageLoadFailed( event:Event ):void { log( "Image load failed." ); } private function log( text:String ):void { trace( text ); } } }
MediaEventMediaPromiseLoader.loadFilePromise()selectflash.events:MediaEventWird abgesetzt, wenn der Benutzer ein Bild auswählt. Wird abgesetzt, wenn der Benutzer ein Bild auswählt.cancelflash.events:EventWird abgesetzt, wenn der Benutzer den Bildauswahlvorgang abbricht. Wird abgesetzt, wenn der Benutzer den Bildauswahlvorgang abbricht.errorflash.events:ErrorEventWird abgesetzt, wenn die standardmäßige Bildauswahlanwendung bereits verwendet wird. Wird abgesetzt, wenn die standardmäßige Bildauswahlanwendung bereits verwendet wird.errorflash.events:ErrorEventWird abgesetzt, wenn sich die AIR-Anwendung beim Aufrufen dieser Funktion im Hintergrund befindet. Wird abgesetzt, wenn sich die AIR-Anwendung beim Aufrufen dieser Funktion im Hintergrund befindet.
supportsAddBitmapData Ob die CameraRoll.addBitmapData()-Methode unterstützt wird.Boolean Ob die CameraRoll.addBitmapData()-Methode unterstützt wird. Zurzeit wird diese Funktion nur in AIR-Anwendungen auf mobilen Geräten unterstützt. supportsBrowseForImage Gibt an, ob die CameraRoll.browseForImage()-Methode unterstützt wird.BooleanGibt an, ob die CameraRoll.browseForImage()-Methode unterstützt wird. Gibt an, ob die CameraRoll.browseForImage()-Methode unterstützt wird. Zurzeit wird diese Funktion nur in AIR-Anwendungen auf mobilen Geräten unterstützt.
Microphone Mit der Microphone-Klasse überwachen oder erfassen Sie Audio von einem Mikrofon.flash.events:EventDispatcher Mit der Microphone-Klasse überwachen oder erfassen Sie Audio von einem Mikrofon.

Um einen Verweis auf eine Microphone-Instanz abzurufen, verwenden Sie die Microphone.getMicrophone()-Methode oder die Microphone.getEnhancedMicrophone()-Methode. Eine erweiterte Mikrofoninstanz kann akustische Echokompensation ausführen. Verwenden Sie die akustische Echokompensation, um Echtzeit-Audio/Video-Anwendungen zu erstellen, für die keine Headsets erforderlich sind.

Erstellen einer Echtzeit-Chat-Anwendung

Um eine Echtzeit-Chat-Anwendung zu erstellen, erfassen Sie Audio und senden Sie es an Flash Media Server. Senden Sie den Audiostream mithilfe der NetConnection- und NetStream-Klassen an Flash Media Server. Flash Media Server kann das Audio an andere Clients senden. Um eine Chat-Anwendung zu erstellen, für die keine Headsets erforderlich sind, verwenden Sie die akustische Echokompensation. Die akustische Echokompensation verhindert die Rückkopplung, die auftritt, wenn Audio vom Mikrofon aufgenommen, über die Lautsprecher ausgegeben und wieder vom Mikrofon aufgenommen wird. Um die akustische Echokompensation zu verwenden, rufen Sie die Microphone.getEnhancedMicrophone()-Methode zum Abrufen eines Verweises auf eine Microphone-Instanz auf. Legen Sie Microphone.enhancedOptions auf eine Instanz der MicrophoneEnhancedOptions-Klasse fest, um Einstellungen zu konfigurieren.

Lokales Abspielen des Mikrofonaudios

Rufen Sie die Microphone-setLoopback()-Methode auf, um das Mikrofonaudio direkt an den lokalen Computer oder an das Audiogerät zu leiten. Es besteht immer die Gefahr einer unkontrollierten Rückkopplung, die besonders dann auftritt, wenn die Audioausgabe vom Mikrofon aufgenommen werden kann. Die setUseEchoSuppression()-Methode kann das Risiko einer Rückkopplung verringern, aber nicht eliminieren.

Erfassen des Mikrofonaudios zur lokalen Aufnahme oder Verarbeitung

Um Mikrofonaudiodaten aufzunehmen, verwenden Sie einen Listener für sampleData-Ereignisse, die von einer Microphone-Instanz abgesetzt werden. Das SampleDataEvent-Objekt, das für dieses Ereignis abgesetzt wird, enthält die Audiodaten.

Informationen zum Aufzeichnen von Video finden Sie in der Beschreibung der Camera-Klasse.

Mikrofonunterstützung zur Laufzeit

Die Microphone-Klasse wird in Flash Player nicht unterstützt, wenn dieser in einem mobilen Browser ausgeführt wird.

Unterstützung von AIR-Profilen: Die Microphone-Klasse wird unter Desktopbetriebssystemen unterstützt, aber nicht auf allen mobilen Geräten. Bei Geräten mit AIR für TV wird sie nicht unterstützt. Weitere Informationen zum AIR-Support über mehrere Profile finden Sie unter Unterstützung von AIR-Profilen.

Mit der Microphone.isSupported-Eigenschaft können Sie testen, ob zur Laufzeit Unterstützung gegeben ist. Beachten Sie, dass bei Geräten mit AIR für TV Microphone.isSupported den Wert true hat, Microphone.getMicrophone() jedoch immer null zurückgibt.

Datenschutzsteuerungen

Flash Player zeigt ein Zugriffsschutz-Dialogfeld an, in dem der Benutzer den Zugriff auf das Mikrofon zulassen oder verweigern kann. Das Anwendungsfenster muss mindestens 215 x 138 Pixel groß sein; dies ist die Mindestgröße, die für die Anzeige des Dialogfelds erforderlich ist. Andernfalls wird der Zugriff automatisch verweigert.

Inhalt, der in der AIR-Anwendungssandbox ausgeführt wird, braucht keine Berechtigung für den Zugriff auf das Mikrofon; es wird kein Dialogfeld angezeigt. Inhalt, der außerhalb der AIR-Anwendungssandbox ausgeführt wird, benötigt eine Berechtigung; das Datenschutz-Dialogfeld wird angezeigt.

Im folgenden Beispiel wird Sound mit einem Mikrofon bei aktivierter Echounterdrückung aufgenommen, nachdem der Benutzer den Zugriff auf das Mikrofon des Computers gewährt hat. Mithilfe der Methode Security.showSettings() wird das Dialogfeld „Flash Player“ angezeigt, mit dem die Berechtigung für den Zugriff auf das Mikrofon des Benutzers angefordert wird. Durch das Aufrufen von setLoopBack(true) wird der Input an die lokalen Lautsprecher umgeleitet, sodass Sie den Sound hören können, während das Beispiel ausgeführt wird.

Zwei Listener reagieren auf activity- und status-Ereignisse. Das activity-Ereignis wird am Anfang und Ende (falls vorhanden) der Sitzung ausgelöst und von der Methode activityHandler() erfasst, die Ereignisverarbeitungsinformationen verfolgt. Das Ereignis status wird ausgelöst, wenn Statusinformationen vom verknüpften Microphone-Objekt übermittelt werden; es wird mithilfe der statusHandler()-Methode erfasst und verfolgt.

Hinweis: Dieses Beispiel kann nur dann korrekt nachvollzogen werden, wenn ein Mikrofon mit dem Computer verbunden ist.

package { import flash.display.Sprite; import flash.events.*; import flash.media.Microphone; import flash.system.Security; public class MicrophoneExample extends Sprite { public function MicrophoneExample() { var mic:Microphone = Microphone.getMicrophone(); Security.showSettings("2"); mic.setLoopBack(true); if (mic != null) { mic.setUseEchoSuppression(true); mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler); mic.addEventListener(StatusEvent.STATUS, statusHandler); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } private function statusHandler(event:StatusEvent):void { trace("statusHandler: " + event); } } }
flash.media.Cameraflash.media.MicrophoneEnhancedModeflash.media.MicrophoneEnhancedOptionsaYo Binitie: Implementing Acoustic Echo Suppression in Flash/Flex applicationsCristophe Coenraets: Voice Notes for AndroidMichael Chaize: AIR, Android, and the Microphonestatus Wird ausgelöst, wenn der Status eines Mikrofons gemeldet wird.flash.events.StatusEvent.STATUSflash.events.StatusEvent Wird ausgelöst, wenn der Status eines Mikrofons gemeldet wird. Wenn der Wert der code-Eigenschaft auf "Microphone.Muted" gesetzt ist, hat der Benutzer den Zugriff der SWF-Datei auf das Mikrofon verweigert. Wenn der Wert der code-Eigenschaft auf "Microphone.Unmuted" gesetzt ist, hat der Benutzer den Zugriff der SWF-Datei auf das Mikrofon gewährt.

Status-Ereignisse werden in Adobe AIR-Anwendungen nicht abgesetzt, der Zugriff auf das Mikrofon kann nicht dynamisch geändert werden. Auf den meisten Plattformen können AIR-Anwendungen immer auf das Mikrofon zugreifen. Unter Android muss eine Anwendung die Android-Berechtigung RECORD_AUDIO im Anwendungsdeskriptor spezifizieren. Andernfalls verweigert Android den Zugriff auf das Mikrofon.

Microphone.getMicrophone()
sampleData Wird abgesetzt, wenn das Mikrofon Audiodaten im Puffer hat.flash.events.SampleDataEvent.SAMPLE_DATAflash.events.SampleDataEvent Wird abgesetzt, wenn das Mikrofon Audiodaten im Puffer hat.

Die Microphone.rate-Eigenschaft bestimmt die Anzahl der Samples, die pro Sekunde generiert werden. Die Anzahl der Samples pro Ereignis ist ein Faktor aus der Anzahl der Samples pro Sekunde und der Verzögerung zwischen Ereignisaufrufen.

Im folgenden Beispiel werden 4 Sekunden Audiosamples vom Standardmikrofon erfasst und das Audio wird dann wiedergegeben. Vergewissern Sie sich, dass ein Mikrofon angeschlossen ist. micSampleDataHandler() ist der Ereignis-Listener für das sampleData-Ereignis des Microphone-Objekts. Die micSampleDataHandler()-Methode ruft die Samples ab, wenn sie verfügbar sind, und hängt ihre Werte an ein ByteArray-Objekt an. Es wird ein Timer-Objekt für 4 Sekunden eingerichtet. Der Timer entfernt das sampleData-Ereignis vom Ereignis-Listener des Microphone-Objekts, erstellt ein Sound-Objekt und fügt einen sampleData-Ereignis-Listener für das Sound-Objekt hinzu. Der sampleData-Ereignis-Listener für das Sound-Objekt, die playbackSampleHandler()-Methode, stellt Audiosamples bereit, die das Sound-Objekt abspielt. Diese Audiosamples werden vom ByteArray-Objekt abgerufen, in dem die Microphone-Samples gespeichert wurden. Die Samples werden zweimal in das Sound-Objekt geschrieben, da die Microphone-Samples mono aufgenommen werden, das Sound-Objekt jedoch Stereosamplepaare benötigt. Die rate-Eigenschaft des Microphone-Objekts wird auf 44 gesetzt, um der von Sound-Objekten verwendeten Abtastrate von 44 kHz zu entsprechen. const DELAY_LENGTH:int = 4000; var mic:Microphone = Microphone.getMicrophone(); mic.setSilenceLevel(0, DELAY_LENGTH); mic.gain = 100; mic.rate = 44; mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); var timer:Timer = new Timer(DELAY_LENGTH); timer.addEventListener(TimerEvent.TIMER, timerHandler); timer.start(); var soundBytes:ByteArray = new ByteArray(); function micSampleDataHandler(event:SampleDataEvent):void { while(event.data.bytesAvailable) { var sample:Number = event.data.readFloat(); soundBytes.writeFloat(sample); } } function timerHandler(event:TimerEvent):void { mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); timer.stop(); soundBytes.position = 0; var sound:Sound = new Sound(); sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler); sound.play(); } function playbackSampleHandler(event:SampleDataEvent):void { for (var i:int = 0; i < 8192 && soundBytes.bytesAvailable > 0; i++) { var sample:Number = soundBytes.readFloat(); event.data.writeFloat(sample); event.data.writeFloat(sample); } } Im folgenden Beispiel wird Sound mit einem Mikrofon bei aktivierter Echounterdrückung aufgenommen, nachdem der Benutzer den Zugriff auf das Mikrofon des Computers gewährt hat. Mithilfe der Methode Security.showSettings() wird das Dialogfeld „Flash Player“ angezeigt, mit dem die Berechtigung für den Zugriff auf das Mikrofon des Benutzers angefordert wird. Durch das Aufrufen von setLoopBack(true) wird der Input an die lokalen Lautsprecher umgeleitet, sodass Sie den Sound hören können, während das Beispiel ausgeführt wird.

Zwei Listener reagieren auf activity- und status-Ereignisse. Das activity-Ereignis wird am Anfang und Ende (falls vorhanden) der Sitzung ausgelöst und von der Methode activityHandler() erfasst, die Ereignisverarbeitungsinformationen verfolgt. Das Ereignis status wird ausgelöst, wenn Statusinformationen vom verknüpften Microphone-Objekt übermittelt werden; es wird mithilfe der statusHandler()-Methode erfasst und verfolgt.

Hinweis: Dieses Beispiel kann nur dann korrekt nachvollzogen werden, wenn ein Mikrofon mit dem Computer verbunden ist.

package { import flash.display.Sprite; import flash.events.*; import flash.media.Microphone; import flash.system.Security; public class MicrophoneExample extends Sprite { public function MicrophoneExample() { var mic:Microphone = Microphone.getMicrophone(); Security.showSettings("2"); mic.setLoopBack(true); if (mic != null) { mic.setUseEchoSuppression(true); mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler); mic.addEventListener(StatusEvent.STATUS, statusHandler); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } private function statusHandler(event:StatusEvent):void { trace("statusHandler: " + event); } } }
flash.events.SampleDataEvent
activity Wird abgesetzt, wenn ein Mikrofon die Aufnahmen wegen einer erkannten Stille (Sprechpause) startet oder beendet.flash.events.ActivityEvent.ACTIVITYflash.events.ActivityEvent Wird abgesetzt, wenn ein Mikrofon die Aufnahmen wegen einer erkannten Stille (Sprechpause) startet oder beendet.

Um festzulegen, welche Soundmenge erforderlich ist, um dieses Ereignis mit einer activating-Eigenschaft mit dem Wert true auszulösen, oder welcher Zeitraum ohne Sound verstreichen muss, damit dieses Ereignis mit einer activating-Eigenschaft mit dem Wert false ausgelöst wird, verwenden Sie Microphone.setSilenceLevel().

Damit ein Microphone-Objekt activity-Ereignisse absetzen kann, muss die Anwendung den Eingang überwachen, entweder durch Aufruf von setLoopback( true ), durch die Verwendung eines Listeners für sampleData-Ereignisse oder durch das Anhängen eines Mikrofons an ein NetStream-Objekt.

setSilenceLevel()
getEnhancedMicrophone Gibt einen Verweis auf ein erweitertes Microphone-Objekt zurück, das akustische Echokompensation ausführen kann.Ein Verweis auf ein Mikrofon-Objekt zur Aufnahme von Audiodaten. Wenn das erweiterte Audio nicht initialisiert werden kann, wird null zurückgegeben. flash.media:Microphoneindexint-1Der Indexwert des Mikrofons. Gibt einen Verweis auf ein erweitertes Microphone-Objekt zurück, das akustische Echokompensation ausführen kann. Verwenden Sie die akustische Echokompensation, um Audio/Video-Chat-Anwendungen zu erstellen, für die keine Headsets erforderlich sind.

Der index-Parameter für die Microphone.getEnhancedMicrophone()-Methode und die Microphone.getMicrophone()-Methode arbeitet auf identische Weise.

Wichtig: Zu jedem beliebigen Zeitpunkt haben Sie immer nur eine einzelne Instanz eines erweiterten Mikrofongeräts. Alle anderen Microphone-Instanzen beenden die Bereitstellung von Audiodaten und erhalten ein StatusEvent-Objekt mit der code-Eigenschaft Microphone.Unavailable. Wenn das erweiterte Audio nicht initialisiert werden kann, geben Aufrufe dieser Methode null zurück, das Festlegen eines Werts für Microphone.enhancedOptions hat keine Auswirkungen und alle vorhandenen Microphone-Instanzen funktionieren wie zuvor.

Um ein erweitertes Microphone-Objekt zu konfigurieren, legen Sie die Microphone.enhancedOptions-Eigenschaft fest. Der folgende Code verwendet ein erweitertes Microphone-Objekt und Vollduplex-Echokompensation in einem lokalen Test:

	     var mic:Microphone = Microphone.getEnhancedMicrophone();
	     var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
	     options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
	     mic.enhancedOptions = options;
	     mic.setLoopBack(true);
	 

Die setUseEchoSuppression()-Methode wird ignoriert, wenn die akustische Echokompensation verwendet wird.

Wenn eine SWF-Datei versucht, auf das von Microphone.getEnhancedMicrophone() zurückgegebene Objekt zuzugreifen – zum Beispiel, wenn Sie NetStream.attachAudio() aufrufen – zeigt Flash Player ein Dialogfeld zum Datenschutz an, in dem der Benutzer den Zugriff auf das Mikrofon zulassen oder verweigern kann. (Achten Sie darauf, dass die Bühnengröße mindestens 215 x 138 Pixel beträgt. Dies ist die Mindestgröße, die Flash Player für die Anzeige des Dialogfelds benötigt.)

Microphone.getMicrophone()Microphone.enhancedOptionsMicrophone.status
getMicrophone Gibt einen Verweis auf ein Mikrofon-Objekt zur Aufnahme von Audiodaten zurück.Ein Verweis auf ein Mikrofon-Objekt zur Aufnahme von Audiodaten. flash.media:Microphoneindexint-1Der Indexwert des Mikrofons. Gibt einen Verweis auf ein Mikrofon-Objekt zur Aufnahme von Audiodaten zurück. Um mit dem Aufzeichnen des Audios zu beginnen, müssen Sie das Microphone-Objekt mit einem NetStream-Objekt verknüpfen (siehe NetStream.attachAudio()).

Mehrere Aufrufe von Microphone.getMicrophone() verweisen auf dasselbe Mikrofon. Falls ein Programmcode also die Zeilen mic1 = Microphone.getMicrophone() und mic2 = Microphone.getMicrophone() enthält, verweisen mic1 und mic2 auf dasselbe (Standard-)Mikrofon.

Im Allgemeinen sollten Sie keinen Wert für index übergeben. Verwenden Sie einfach air.Microphone.getMicrophone(), um einen Verweis auf das Standardmikrofon zurückzugeben. Im Abschnitt „Mikrofoneinstellungen“ im Einstellungsbedienfeld von Flash Player kann der Benutzer das Standardmikrofon angeben, das die Anwendung verwenden soll. (Der Benutzer ruft die Einstellungen von Flash Player auf, indem er mit der rechten Maustaste auf den im Webbrowser ausgeführten Flash Player-Inhalt klickt.) Wenn Sie einen Wert für index übergeben, können Sie auf ein anderes als das vom Benutzer gewählte Mikrofon verweisen. In seltenen Fällen können Sie index verwenden, beispielsweise wenn Ihre Anwendung Audiodaten von zwei Mikrofonen gleichzeitig aufnimmt. Inhalt, der in Adobe AIR ausgeführt wird, verwendet ebenfalls die Flash Player-Einstellung für das Standardmikrofon.

Verwenden Sie die Microphone.index-Eigenschaft, um den Indexwert des aktuellen Microphone-Objekts abzurufen. Sie können diesen Wert dann an andere Methoden der Microphone-Klasse übergeben.

Wenn eine SWF-Datei versucht, auf das von Microphone.getMicrophone() zurückgegebene Objekt zuzugreifen (wenn Sie beispielsweise NetStream.attachAudio() aufrufen), wird in Flash Player ein Zugriffsschutz-Dialogfeld angezeigt, in dem der Benutzer den Zugriff auf das Mikrofon zulassen oder verweigern kann. (Achten Sie darauf, dass die Bühnengröße mindestens 215 x 138 Pixel beträgt. Dies ist die Mindestgröße, die Flash Player für die Anzeige des Dialogfelds benötigt.)

Wenn der Benutzer auf dieses Dialogfeld reagiert, wird ein status-Ereignis ausgelöst, das die Antwort des Benutzers anzeigt. Sie können auch die Microphone.muted-Eigenschaft überprüfen, um festzustellen, ob der Benutzer den Zugriff auf das Mikrofon zugelassen oder verweigert hat.

Wenn Microphone.getMicrophone() den Wert null zurückgibt, wird das Mikrofon entweder von einer anderen Anwendung genutzt oder im System sind keine Mikrofone installiert. Mit Microphones.names.length können Sie feststellen, ob Mikrofone installiert sind. Mit Security.showSettings() zeigen Sie das Flash Player-Bedienfeld für Mikrofoneinstellungen an, in dem der Benutzer das Mikrofon auswählen kann, auf das von Microphone.getMicrophone() verwiesen wird.

Das folgende Beispiel zeigt, wie Sie Zugriff auf das Mikrofon des Benutzers anfordern, indem Sie die statische Microphone.getMicrophone()-Methode und einen Listener für das Statusereignis verwenden. Beispiel bereitgestellt von ActionScriptExamples.com. var mic:Microphone = Microphone.getMicrophone(); mic.setLoopBack(); mic.addEventListener(StatusEvent.STATUS, mic_status); var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.text = "Detecting microphone..."; addChild(tf); function mic_status(evt:StatusEvent):void { tf.text = "Microphone is muted?: " + mic.muted; switch (evt.code) { case "Microphone.Unmuted": tf.appendText("\n" + "Microphone access was allowed."); break; case "Microphone.Muted": tf.appendText("\n" + "Microphone access was denied."); break; } }
Microphone.statusflash.net.NetStream.attachAudio()flash.system.Security.showSettings()statusflash.events:StatusEventWird ausgelöst, wenn der Status eines Mikrofons gemeldet wird. Wenn der Wert der code-Eigenschaft auf "Microphone.Muted" gesetzt ist, hat der Benutzer den Zugriff der SWF-Datei auf das Mikrofon verweigert. Wenn der Wert der code-Eigenschaft auf "Microphone.Unmuted" gesetzt ist, hat der Benutzer den Zugriff der SWF-Datei auf das Mikrofon gewährt. Wird ausgelöst, wenn der Status eines Mikrofons gemeldet wird.
setLoopBack Leitet von einem Mikrofon aufgezeichnetes Audio an die lokalen Lautsprecher.stateBooleantrue Leitet von einem Mikrofon aufgezeichnetes Audio an die lokalen Lautsprecher. setSilenceLevel Legt die minimale Eingangslautstärke fest, bei der Sound als solcher eingestuft wird und (optional) die Länge der lautlosen Zeit bis zum Erkennen von Stille.silenceLevelNumberDie erforderliche Soundmenge zum Aktivieren des Mikrofons und zum Auslösen des activity-Ereignisses. Die zulässigen Werte liegen zwischen 0 und 100. timeoutint-1Die Zeit in Millisekunden, die ohne Aktivität vergehen muss, bevor in Flash Player oder Adobe AIR kein Sound mehr festgestellt und das dispatch-Ereignis ausgelöst wird. Der Standardwert ist 2000 (2 Sekunden). (Hinweis: Der in der Syntax angezeigte Standardwert -1 ist ein interner Wert in Flash Player oder Adobe AIR zur Verwendung des Werts 2000.) Legt die minimale Eingangslautstärke fest, bei der Sound als solcher eingestuft wird und (optional) die Länge der lautlosen Zeit bis zum Erkennen von Stille.
  • Wenn das Mikrofon überhaupt keinen Sound feststellen soll, legen Sie für silenceLevel einen Wert von 100 fest. Das activity-Ereignis wird nicht ausgelöst.
  • Mithilfe von Microphone.activityLevel können Sie die Soundmenge ermitteln, die mit dem Mikrofon derzeit erkannt wird.

Speex enthält eine Sprachaktivitätserkennung (VAD) und reduziert die Bandbreite automatisch, wenn keine Sprache erkannt wird. Wenn Sie den Speex-Codec verwenden, empfiehlt Adobe, die Abschaltschwelle (Silence-Level) auf 0 zu setzen.

Aktivitätserkennung ist die Fähigkeit, anhand der Lautstärkepegel zu erkennen, dass jemand spricht. Wenn nicht gesprochen wird, kann Bandbreite gespart werden, da der zugehörige Audiostream nicht übertragen werden muss. Diese Daten können auch für visuelles Feedback verwendet werden, sodass Benutzer erkennen, dass sie (oder andere) derzeit stumm sind.

Stillewerte entsprechen unmittelbar den Aktivitätswerten. Völlige Stille entspricht dem Aktivitätswert 0. Konstante, laute Geräusche (so laut wie bei der momentanen Einstellung für die Lautstärke erfasst werden kann) entspricht einem Wert von 100. Wenn die Lautstärke genau angepasst ist, ist Ihr Aktivitätswert geringer als der Stillewert, wenn Sie nicht sprechen. Wenn Sie sprechen, ist der Aktivitätswert höher als der Stillewert.

Diese Methode ähnelt Camera.setMotionLevel(). Mit beiden Methoden wird angegeben, zu welchem Zeitpunkt das activity-Ereignis ausgelöst werden soll. Diese Methoden haben jedoch deutlich unterschiedliche Auswirkungen auf das Veröffentlichen von Streams:

  • Camera.setMotionLevel() ist dazu bestimmt, Bewegung festzustellen und hat keinen Einfluss auf die Bandbreitenauslastung. Auch wenn ein Videostream keine Bewegung feststellt, werden weiterhin Videodaten gesendet.
  • Microphone.setSilenceLevel() dient zur Optimierung der Bandbreite. Wenn ein Audiostream als lautlos eingestuft wird, werden keine Audiodaten gesendet. Stattdessen wird eine Meldung gesendet, um den Beginn der Inaktivität (Stille) anzuzeigen.
flash.media.Camera.setMotionLevel()flash.media.Microphone.activityLevelflash.media.Microphone.activityflash.media.Microphone.gainflash.media.Microphone.silenceLevelflash.media.Microphone.silenceTimeout
setUseEchoSuppression Gibt an, ob die Audio-Codec-Funktion zur Echounterdrückung verwendet werden soll.useEchoSuppressionBooleanEin boolescher Wert, der angibt, ob Echokompensation verwendet werden soll (true) oder nicht (false). Gibt an, ob die Audio-Codec-Funktion zur Echounterdrückung verwendet werden soll. Der Standardwert ist false, es sei denn, der Benutzer hat im Flash Player-Bedienfeld für die Mikrofoneinstellungen die Option „Echo reduzieren“ gewählt.

Durch die Echounterdrückung sollen die Auswirkungen von Rückkopplungen unterdrückt werden, die hervorgerufen werden, wenn Sounds aus dem Lautsprecher über das Mikrofon im selben System empfangen werden. (Dies unterscheidet sich von der akustischen Echokompensation, bei der die Rückkopplungen vollständig entfernt werden. Die setUseEchoSuppression()-Methode wird ignoriert, wenn Sie die getEnhancedMicrophone()-Methode aufrufen, um die akustische Echokompensation zu verwenden.)

Generell empfiehlt sich die Echounterdrückung, wenn der erfasste Sound über Lautsprecher und nicht über Kopfhörer wiedergegeben wird. Wenn Benutzer bei einer SWF-Datei das Soundausgabegerät angeben können, sollten Sie Microphone.setUseEchoSuppression(true) aufrufen, wenn angegeben wird, dass Lautsprecher und das Mikrofon verwendet werden sollen.

Benutzer können diese Einstellungen auch im Flash Player-Bedienfeld für die Mikrofoneinstellungen anpassen.

flash.media.Microphone.setUseEchoSuppression()flash.media.Microphone.useEchoSuppression
activityLevel Die über das Mikrofon ermittelte Soundmenge.Number Die über das Mikrofon ermittelte Soundmenge. Die Werte liegen zwischen 0 (kein Sound) und 100 (sehr lauter Sound). Mithilfe des Werts dieser Eigenschaft können Sie einen geeigneten Wert zum Übergeben für die Methode Microphone.setSilenceLevel() ermitteln.

Wenn die muted-Eigenschaft des Mikrofons den Wert true hat, ist der Wert dieser Eigenschaft immer -1.

flash.media.Microphone.getMicrophone()flash.media.Microphone.setSilenceLevel()flash.media.Microphone.gain
codec Der für die Audiokomprimierung zu verwendende Codec.String Der für die Audiokomprimierung zu verwendende Codec. Verfügbare Codecs sind Nellymoser (Standardeinstellung) und Speex. Die Enum-Klasse SoundCodec enthält die verschiedenen Werte, die für die codec-Eigenschaft gültig sind.

Wenn Sie den Nellymoser-Codec verwenden, können Sie die Samplerate über Microphone.rate() festlegen. Wenn Sie den Speex-Codec verwenden, ist die Samplerate auf 16 kHz eingestellt.

Speex enthält eine Sprachaktivitätserkennung (VAD) und reduziert die Bandbreite automatisch, wenn keine Sprache erkannt wird. Wenn Sie den Speex-Codec verwenden, empfiehlt Adobe, die Abschaltschwelle (Silence-Level) auf 0 zu setzen. Verwenden Sie zum Einstellen der Abschaltschwelle die Microphone.setSilenceLevel()-Methode.

setSilenceLevel()
enableVAD Aktiviert die Speex-Sprechpausenerkennung.Boolean Aktiviert die Speex-Sprechpausenerkennung. encodeQuality Die kodierte Sprachqualität, wenn der Speex-Codec verwendet wird.int Die kodierte Sprachqualität, wenn der Speex-Codec verwendet wird. Mögliche Werte sind 0 bis 10. Der Standardwert ist 6. Höhere Werte bedeuten eine höhere Qualität, erfordern aber auch mehr Bandbreite (wie in der folgenden Tabelle gezeigt). Die aufgelisteten Bitratenwerte sind Nettobitraten und enthalten keinen Paketierungsaufwand.

QualitätswertErforderliche Bitrate (Kilobit pro Sekunde)0 3,9515,7527,7539,80412,8516,8620,6723,8827,8934,21042,2

Codec
enhancedOptions Steuert erweiterte Mikrofonoptionen.flash.media:MicrophoneEnhancedOptions Steuert erweiterte Mikrofonoptionen. Weitere Informationen finden Sie in der Beschreibung der MicrophoneEnhancedOptions-Klasse. Diese Eigenschaft wird für nicht erweiterte Microphone-Instanzen ignoriert. flash.media.MicrophoneEnhancedOptionsframesPerPacket Anzahl der Speex-Sprachframes, die in einem Paket (Meldung) übertragen werden.int Anzahl der Speex-Sprachframes, die in einem Paket (Meldung) übertragen werden . Jeder Frame hat eine Länge von 20 ms. Der Standardwert ist zwei Frames pro Paket.

Je mehr Speex-Frames in einer Meldung enthalten sind, desto niedriger ist die erforderliche Bandbreite, aber desto länger ist die Verzögerung beim Senden der Meldung. Weniger Speex-Frames erhöhen die erforderliche Bandbreite, reduzieren aber Verzögerungen.

gain Betrag, um den das Mikrofon das Signal verstärkt.Number Betrag, um den das Mikrofon das Signal verstärkt. Die zulässigen Werte liegen zwischen 0 und 100. Der Standardwert ist 50. flash.media.Microphone.gainindex Der Index des Mikrofons, der in dem durch „Microphone.names“ zurückgegebenen Array angegeben ist.int Der Index des Mikrofons, der in dem durch Microphone.names zurückgegebenen Array angegeben ist. flash.media.Microphone.getMicrophone()flash.media.Microphone.namesisSupported Die isSupported-Eigenschaft hat den Wert „true“, wenn die Microphone-Klasse von der aktuellen Plattform unterstützt wird, andernfalls hat sie den Wert „false“.Boolean Die isSupported-Eigenschaft hat den Wert true, wenn die Microphone-Klasse von der aktuellen Plattform unterstützt wird, andernfalls hat sie den Wert false. muted Gibt an, ob der Benutzer den Zugriff auf das Mikrofon verweigert (true) oder gewährt hat (false).Boolean Gibt an, ob der Benutzer den Zugriff auf das Mikrofon verweigert (true) oder gewährt hat (false). Wenn sich dieser Wert ändert, wird ein status-Ereignis ausgelöst. Weitere Informationen finden Sie unter Microphone.getMicrophone(). flash.media.Microphone.getMicrophone()flash.media.Microphone.statusname Der Name des aktuellen Soundaufnahmegeräts, der von der Soundaufnahmehardware zurückgegeben wurde.String Der Name des aktuellen Soundaufnahmegeräts, der von der Soundaufnahmehardware zurückgegeben wurde. flash.media.Microphone.getMicrophone()flash.media.Microphone.namesnames Ein Array mit den Namen aller verfügbaren Soundaufnahmegeräte.Array Ein Array mit den Namen aller verfügbaren Soundaufnahmegeräte. Die Namen werden zurückgegeben, ohne dass das Flash Player-Bedienfeld für die Zugriffsschutzeinstellungen für Benutzer angezeigt werden muss. Mit diesem Array wird über die Microphone.names.length-Eigenschaft der auf null basierende Index jedes Soundaufnahmegeräts sowie die Anzahl der Soundaufnahmegeräte im System angegeben. Weitere Informationen finden Sie im Abschnitt zur Array-Klasse.

Zum Aufrufen der Microphone.names-Eigenschaft ist eine genaue Überprüfung der Hardware erforderlich; daher kann das Erstellen des Arrays einige Sekunden dauern. In den meisten Fällen können Sie das Standardmikrofon verwenden.

Hinweis: Um den Namen des aktuellen Mikrofons festzustellen, verwenden Sie die name-Eigenschaft.

Arrayflash.media.Microphone.nameflash.media.Microphone.getMicrophone()
noiseSuppressionLevel Maximale Dämpfung des Rauschens in dB (negative Zahl), die für den Speex-Encoder verwendet wird.int Maximale Dämpfung des Rauschens in dB (negative Zahl), die für den Speex-Encoder verwendet wird. Wenn aktiviert, wird Rauschunterdrückung auf den durch das Mikrofon erfassten Ton angewendet, bevor die Speex-Komprimierung erfolgt. Mit der Einstellung 0 wird die Rauschunterdrückung deaktiviert. Rauschunterdrückung ist standardmäßig mit einer maximalen Dämpfung von -30 dB aktiviert. Wird bei Auswahl des Nellymoser-Codecs ignoriert. rate Die Abtastrate (in kHz), mit der das Mikrofon Sound aufnimmt.int Die Abtastrate (in kHz), mit der das Mikrofon Sound aufnimmt. Akzeptable Werte sind 5, 8, 11, 22 und 44. Der Standardwert ist 8 kHz, sofern das Soundaufnahmegerät diesen Wert unterstützt. Andernfalls gilt als Standardwert die nächste verfügbare Aufnahmestufe über 8 kHz, die auf dem Soundaufnahmegerät unterstützt wird, gewöhnlich 11 kHz.

Hinweis: Die tatsächliche Rate unterscheidet sich etwas vom rate-Wert, wie in der folgenden Tabelle zu sehen ist:

rate-WertTatsächliche Frequenz4444.100 Hz2222.050 Hz1111.025 Hz88.000 Hz55.512 Hz
flash.media.Microphone.rate
silenceLevel Die erforderliche Soundmenge zum Aktivieren des Mikrofons und zum Auslösen des activity-Ereignisses.Number Die erforderliche Soundmenge zum Aktivieren des Mikrofons und zum Auslösen des activity-Ereignisses. Der Standardwert ist 10. flash.media.Microphone.gainflash.media.Microphone.setSilenceLevel()silenceTimeout Die Zeit in Millisekunden zwischen dem Zeitpunkt, zu dem mit dem Mikrofon kein Sound mehr erfasst wird, und dem Zeitpunkt, zu dem das activity-Ereignis ausgelöst wird.int Die Zeit in Millisekunden zwischen dem Zeitpunkt, zu dem mit dem Mikrofon kein Sound mehr erfasst wird, und dem Zeitpunkt, zu dem das activity-Ereignis ausgelöst wird. Der Standardwert ist 2000 (2 Sekunden).

Um diesen Wert einzustellen, verwenden Sie die Microphone.setSilenceLevel()-Methode.

flash.media.Microphone.setSilenceLevel()
soundTransform Steuert den Sound dieses Microphone-Objekts im Loopback-Modus.flash.media:SoundTransform Steuert den Sound dieses Microphone-Objekts im Loopback-Modus. useEchoSuppression Weist den Wert „true“ auf, wenn die Echounterdrückung aktiviert ist, andernfalls „false“.Boolean Weist den Wert true auf, wenn die Echounterdrückung aktiviert ist, andernfalls false. Der Standardwert ist false, es sei denn, der Benutzer hat im Flash Player-Bedienfeld für die Mikrofoneinstellungen die Option „Echo reduzieren“ gewählt. flash.media.Microphone.setUseEchoSuppression()
StageVideo Das StageVideo-Objekt verwendet die Hardwarebeschleunigungsfunktionen des Geräts, falls verfügbar, um Live-Video oder aufgenommenes Video in einer Anwendung anzuzeigen.flash.events:EventDispatcher Das StageVideo-Objekt verwendet die Hardwarebeschleunigungsfunktionen des Geräts, falls verfügbar, um Live-Video oder aufgenommenes Video in einer Anwendung anzuzeigen. Hardwarebeschleunigungsfunktionen sind bei den meisten Geräten verfügbar. Das StageVideo-Objekt unterstützt dieselben Videoformate wie das Video-Objekt. Weitere Informationen zu diesen Formaten finden Sie im Abschnitt zur flash.net.NetStream-Klasse.

Unterstützung von AIR-Profilen: Unter AIR 2.5 wird diese Funktion nur auf Geräten unterstützt, die AIR für TV ausführen. Weitere Informationen zum AIR-Support über mehrere Profile finden Sie unter Unterstützung von AIR-Profilen.

Das vom StageVideo-Objekt angezeigte Video erscheint immer in einem rechteckigen Bereich auf der Bühne hinter allen Flash-Anzeigelistenobjekten. Deshalb nutzt das StageVideo-Objekt die Hardwarebeschleunigung, während der häufigste Fall bei Videoanzeigen unterstützt wird: ein rechteckiger Anzeigebereich, auf dem Videosteuerungen eingeblendet sind.

Die Vorteile der Verwendung eines StageVideo-Objekts anstelle des Video-Objekts sind:

  • Optimale Videowiedergabeleistung aufgrund der Verwendung der Hardwarebeschleunigung.
  • Verringerte Prozessor- und Energiebeanspruchung.
  • Flexibilität und Kreativität bei der Entwicklung von Inhalten, zum Beispiel Videosteuerungen, die vor dem StageVideo-Objekt angezeigt werden.

Da das StageVideo-Objekt Hardwarefähigkeiten des Geräts nutzt, gelten für StageVideo-Objekte die folgenden Einschränkungen gegenüber einem Video-Objekt:

  • Der Videoanzeigebereich kann nur ein Rechteck sein. Kompliziertere Anzeigebereiche, zum Beispiel Ellipsen oder unregelmäßige Formen, können nicht verwendet werden.
  • Sie können ein StageVideo-Objekt nicht drehen.
  • Sie können ein StageVideo-Objekt nicht als Bitmap zwischenspeichern.
  • Sie können nicht mit BitmapData auf die Videodaten zugreifen.
  • Sie können das Video nicht in die SWF-Datei einbetten. Sie können ein StageVideo-Objekt nur mit dem NetStream-Objekt verwenden.
  • Sie können keine Filter, Mischmodi oder Alphawerte auf ein StageVideo-Objekt anwenden.
  • Sie können keine Farbtransformationen, 3D-Transformationen oder Matrixtransformationen auf ein anwenden.
  • Sie können keine Masken oder 9-teiliges Segmentraster auf ein StageVideo-Objekt anwenden.
  • Mischmodi, die Sie auf Anzeigeobjekte anwenden, die sich vor dem StageVideo-Objekt befinden, werden nicht auf das StageVideo-Objekt angewendet.
  • Sie können ein StageVideo-Objekt nur auf vollen Pixelgrenzen platzieren.
  • Für jede SWF-Datei beschränkt Flash Player die Anzahl der StageVideo-Objekte, die gleichzeitig angezeigt werden können, auf vier. Die tatsächliche Höchstzahl kann jedoch darunter liegen; dies ist von den Hardwareressourcen des Geräts abhängig. Bei Geräten mit AIR für TV kann jeweils nur ein StageVideo-Objekt ein Video anzeigen.
  • Die Videozeitgebung ist nicht mit der Zeitgebung von Flash-Inhalten, die die Laufzeitumgebung anzeigt, synchronisiert.
  • Obwohl die Videodarstellung die jeweils beste für ein gegebenes Gerät verfügbare ist, ist sie nicht 100% „pixel-identisch“ auf allen Geräten. Es treten geringfügige Abweichungen auf, die auf Unterschiede bei den Treibern und der Hardware zurückzuführen sind.
  • Einige Geräte unterstützen nicht alle erforderlichen Farbräume. So unterstützen bestimmte Geräte zum Beispiel nicht BT.709, den H.264-Standard. In diesen Fällen können Sie für die schnelle Anzeige BT.601 verwenden.
  • Sie können kein Bühnenvideo mit WMODE-Einstellungen wie normal, opaque oder transparent verwenden. Bühnenvideo unterstützt nur WMODE=direct, wenn nicht der Vollbildmodus verwendet wird. WMODE hat in Safari 4 oder höher, IE 9 oder höher und in AIR für TV keine Auswirkungen.

In den folgenden Schritte ist das Abspielen eines Videos mit einem StageVideo-Objekt zusammengefasst:

  1. Verwenden Sie einen Listener für das StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY-Ereignis, um festzustellen, wenn sich der Stage.stageVideos-Vektor geändert hat. (Nicht unterstützt für AIR 2.5 für TV.)
  2. Wenn das StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY-Ereignis meldet, dass Bühnenvideo verfügbar ist, greifen Sie mit dem Stage.stageVideos-Vektorobjekt in dieser Ereignisprozedur auf ein StageVideo-Objekt zu. In AIR 2.5 für TV greifen Sie auf Stage.stageVideos zu, nachdem das erste Bild der SWF-Datei gerendert wurde. Hinweis: Sie können kein StageVideo-Objekt erstellen.
  3. Hängen Sie ein NetStream-Objekt an, indem Sie StageVideo.attachNetStream() verwenden.
  4. Spielen Sie das Video mit NetStream.play() ab.
  5. Verwenden Sie einen Listener für das StageVideoEvent.RENDER_STATE-Ereignis des StageVideo-Objekts, um den Wiedergabestatus des Videos festzustellen. Der Empfang dieses Ereignisses gibt auch an, dass die width- und height-Eigenschaften (Breite und Höhe) des Videos initialisiert oder geändert wurden.
  6. Verwenden Sie einen Listener für das VideoEvent.RENDER_STATE-Ereignis des Video-Objekts. Dieses Ereignis stellt dieselben Status bereit wie StageVideoEvent.RENDER_STATE, sodass Sie damit ebenfalls feststellen können, ob GPU-Beschleunigung verfügbar ist. Der Empfang dieses Ereignisses gibt auch an, dass die width- und height-Eigenschaften (Breite und Höhe) des Videos initialisiert oder geändert wurden. (Nicht unterstützt für AIR 2.5 für TV.)

Wenn ein StageVideoEvent.RENDER_STATE-Ereignis angibt, dass das Video nicht abgespielt werden kann, können Sie wieder ein Video-Objekt anstelle eines StageVideo-Objekts verwenden. Dieses Ereignis wird abgesetzt, nachdem das Video an ein NetStream-Objekt angehängt wurde und abgespielt wird. Je nach Plattform können außerdem Änderungen am Wiedergabestatus zum Absetzen des Ereignisses führen. Verarbeiten Sie das StageVideoEvent.RENDER_STATE-Ereignis, um sicherzustellen, dass die Anwendung das Video abspielt oder geregelt nicht abspielt.

Wenn ein laufendes Video aus einem WMODE, der kein Bühnenvideo unterstützt, in den Vollbildmodus wechselt, kann Bühnenvideo verfügbar werden. Umgekehrt kann Bühnenvideo nicht länger verfügbar sein, wenn der Benutzer den Vollbildmodus beendet. In diesen Fällen ändert sich der Stage.stageVideos-Vektor. Um über diese Änderung informiert zu werden, verwenden Sie einen Listener für das StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABITY-Ereignis. HINWEIS: Diese Benachrichtigung ist in AIR 2.5 für TV nicht verfügbar.

flash.events.StageVideoEventflash.events.StageVideoAvailabilityEventflash.events.VideoEventflash.display.Stage.stageVideosflash.media.Videoflash.net.NetStreamVerwenden der StageVideo-Klasse für hardwarebeschleunigtes RenderingrenderState Wird vom StageVideo-Objekt abgesetzt, wenn sich der Renderstatus des StageVideo-Objekts ändert.flash.events.StageVideoEvent.RENDER_STATEflash.events.StageVideoEvent Wird vom StageVideo-Objekt abgesetzt, wenn sich der Renderstatus des StageVideo-Objekts ändert. attachNetStream Definiert einen Video-Stream, der innerhalb des StageVideo-Objekts im Anwendungsfenster angezeigt werden soll.netStreamflash.net:NetStreamEin NetStream-Objekt. Wenn Sie die Verbindung mit dem StageVideo-Objekt beenden möchten, übergeben Sie den Wert null. Definiert einen Video-Stream, der innerhalb des StageVideo-Objekts im Anwendungsfenster angezeigt werden soll. Der Videostream ist entweder eine Videodatei, die mit NetStream.play() abgespielt wird, oder null. Eine Videodatei kann im lokalen Dateisystem oder auf Flash Media Server gespeichert werden. Wenn der Wert des netStream-Arguments auf null gesetzt ist, wird das Video nicht mehr im StageVideo-Objekt wiedergegeben.

Bevor Sie attachNetStream() ein zweites Mal aufrufen, rufen Sie die close()-Methode des zurzeit angehängten NetStream-Objekts an. Mit dem Aufruf von close() werden alle Ressourcen freigegeben, die zum Abspielen des Videos benötigt werden, einschließlich des Hardwaredecoders. Sie können dann attachNetStream() mit einem anderen NetStream-Objekt oder null aufrufen.

Sie müssen diese Methode nicht verwenden, wenn eine Videodatei nur Audiodaten enthält. Die Audiodaten von Videodateien werden automatisch wiedergegeben, wenn Sie NetStream.play() aufrufen. Um die mit einer Videodatei verknüpften Audiodaten zu steuern, verwenden Sie die soundTransform-Eigenschaft des NetStream-Objekts, das die Videodatei wiedergibt.

colorSpaces Gibt die Namen der verfügbaren Farbräume für diese Videooberfläche zurück. Gibt die Namen der verfügbaren Farbräume für diese Videooberfläche zurück. Normalerweise enthält diese Liste „BT.601“ und „BT.709“. Bei einigen Konfigurationen wird nur „BT.601“ unterstützt, was bedeutet, dass ein Video möglicherweise nicht im richtigen Farbraum dargestellt wird.

Hinweis: Bei Geräten mit AIR für TV gibt der Wert „BT.601“ die Softwarewiedergabe an, während der Wert „BT.709“ die Hardwarewiedergabe anzeigt.

depth Die Tiefenebene eines StageVideo-Objekts in Relation zu anderen StageVideo-Objekten.intDie Tiefe eines StageVideo-Objekts in Relation zu anderen StageVideo-Objekten. Die Tiefenebene eines StageVideo-Objekts in Relation zu anderen StageVideo-Objekten.

StageVideo-Objekte werden immer hinter anderen Objekten auf der Bühne angezeigt. Wenn eine Plattform mehrere StageVideo-Objekte unterstützt, zeigt die depth-Eigenschaft die Tiefenebene eines StageVideo-Objekts an. Die depth-Eigenschaft des untersten StageVideo-Objekts hat den kleinsten Wert. Wenn mehrere StageVideo-Objekte dieselbe Tiefeneinstellung haben, bestimmt die Reihenfolge, in der sie im stage,stageVideos-Vektor auftauchen, ihre relative Tiefe.

Hinweis: Geräte mit AIR für TV unterstützen nur ein StageVideo-Objekt. Deshalb gilt diese Eigenschaft für diese Geräte nicht. Es ist ein Platzhalter für die zukünftige Unterstützung auf anderen Geräten.

flash.display.Stage.stageVideos
pan Die Ausschnitteinstellung für die Anzeige des Videos, als Point-Objekt angegeben.flash.geom:PointDer Point-Wert ist nicht gültig. RangeErrorRangeErrorGibt an, welches Rechteck eines gezoomten (vergrößerten) Videos angezeigt wird. Die Ausschnitteinstellung für die Anzeige des Videos, als Point-Objekt angegeben.

Standardmäßig hat pan den Wert (0,0). Mit diesem Standardwert wird das Video in dem Rechteck zentriert, das von StageVideo.viewPort spezifiziert wird.

Der pan-Wert ist nur dann von Bedeutung, wenn die zoom-Eigenschaft nicht den Standardwert (1.0, 1.0) hat. Wenn ein Video im StageVideo.viewPort-Rechteck mit dem zoom-Standardwert angezeigt wird, passt die Plattform das Video genau in das Rechteck ein. Somit ist das gesamte Video sichtbar. Wenn jedoch ein Zoomfaktor angegeben wurde, ist nicht das gesamte Video sichtbar. In diesem Fall können Sie den pan-Wert festlegen, um anzugeben, welches Teilrechteck des Videos im StageVideo.viewPort-Rechteck angezeigt werden soll.

Die gültigen Werte der pan-Eigenschaft liegen im Bereich (-1.0, -1.0) bis (1.0, 1.0). Insbesondere:

  • Der pan-Wert (-1.0, -1.0) platziert das obere linke Pixel des Videos in der oberen linken Ecke des StageVideo.viewPort-Rechtecks.
  • Der pan-Wert (1.0, 1.0) platziert das untere rechte Pixel des Videos in der unteren rechten Ecke des StageVideo.viewPort-Rechtecks.
  • Der pan-Wert (1.0, -1.0) platziert das obere rechte Pixel des Videos in der oberen rechten Ecke des StageVideo.viewPort-Rechtecks.
  • Der pan-Wert (-1.0, 1.0) platziert das untere linke Pixel des Videos in der unteren linken Ecke des StageVideo.viewPort-Rechtecks.

Werte zwischen -1.0 und 1.0 ergeben entsprechende Ausschnitte.

Wenn Sie die pan-Eigenschaft auf einen Wert außerhalb des gültigen Bereichs RangeError setzen, wird eine Ausnahme ausgegeben. Die Laufzeitumgebung setzt den Wert auf den letzten gültigen Wert zurück.

Ziehen Sie auch in Erwägung, zur Verwendung eines StageVideo-Objekts ein Element des Stage.stageVideos-Vector-Objekts einer StageVideo-Variablen zuzuweisen. Wenn Sie die pan-Eigenschaft der StageVideo-Variablen festlegen, ändert sich auch das zugrunde liegende Stage.stageVideos-Vector-Element. Wenn Sie dieses Element später einer anderen StageVideo-Variablen zuweisen, setzen Sie die pan-Eigenschaft zurück.

Zoom
videoHeight Eine Ganzzahl, die die Höhe des Videostreams in Pixeln angibt.int Eine Ganzzahl, die die Höhe des Videostreams in Pixeln angibt.

Diese Eigenschaft können Sie zum Beispiel verwenden, um sicherzustellen, dass der Benutzer das Video in derselben Höhe sieht, mit der es erfasst wurde, unabhängig von der Größe des StageVideo.viewPort-Rechtecks.

videoWidth Eine Ganzzahl, die die Breite des Videostreams in Pixeln angibt.int Eine Ganzzahl, die die Breite des Videostreams in Pixeln angibt.

Diese Eigenschaft können Sie zum Beispiel verwenden, um sicherzustellen, dass der Benutzer das Video in derselben Breite sieht, mit der es erfasst wurde, unabhängig von der Größe des StageVideo.viewPort-Rechtecks.

viewPort Die absolute Position und Größe der Videooberfläche in Pixel.flash.geom:RectangleDer Rectangle-Wert ist nicht gültig. RangeErrorRangeError Die absolute Position und Größe der Videooberfläche in Pixel.

Die Position des Videos ist relativ zur oberen linken Ecke der Bühne.

Der gültige Bereich der x- und y-Eigenschaften des viewPort-Rectangle-Objekts ist -8192 bis 8191. Deshalb können Sie das Video vollständig oder teilweise außerhalb der Bühne positionieren. Sie können das Video auch größer als die Bühne machen, wenn Sie die width- und height-Eigenschaften der viewPort-Eigenschaft größer als die Bühne einstellen.

zoom Die Zoom-Einstellung für das Video, als Point-Objekt angegeben.flash.geom:PointDer Point-Wert ist nicht gültig. RangeErrorRangeErrorDie Zoom-Einstellung des Videos. Die Zoom-Einstellung für das Video, als Point-Objekt angegeben.

Der Zoom-Punkt ist ein Skalierungsfaktor. Standardmäßig hat zoom den Wert (1.0, 1.0). Mit diesem Standardwert wird das gesamte Video imStageVideo.viewPort-Rechteck angezeigt.

Die gültigen Werte der zoom-Eigenschaft liegen im Bereich (1.0, 1.0) bis (16.0, 16.0). Die x-Eigenschaft des zoom-Point-Objekts gibt den Zoomwert für die horizontalen Pixel an und die y-Eigenschaft gibt den Zoom-Wert für die vertikalen Pixel an.

Ein zoom-Wert von (2.0, 2.0) zeigt zum Beispiel nur die Hälfte der horizontalen und die Hälfte der vertikalen Pixel im StageVideo.viewPort-Rechteck an. Das bedeutet, dass das Video zwar immer noch das StageVideo.viewPort-Rechteck ausfüllt, es ist jedoch nur die Hälfte des Videos sichtbar, sodass ein 2-facher Vergrößerungseffekt entsteh. Dementsprechend wird bei einem zoom-Wert von (16.0, 16.0) nur 1/16 der horizontalen Pixel und ein 1/16 der vertikalen Pixel im StageVideo.viewPort-Rechteck angezeigt, sodass ein 16-facher Vergrößerungseffekt entsteht.

Wenn Sie die zoom-Eigenschaft festlegen, stellen Sie die pan-Eigenschaft so ein, dass das StageVideo.viewPort-Rechteck das gewünschte Teilrechteck des Videos anzeigt.

Betrachten Sie die folgende Situation, bei der es hilfreich ist, einen anderen Wert für die x- und y-Eigenschaften des zoom-Point-Objekts festzulegen. Beachten Sie zunächst, dass wenn ein Video im StageVideo.viewPort-Rechteck mit dem zoom-Standardwert angezeigt wird, die Plattform das Video genau in das Rechteck einpasst. Wenn das Rechteck des Videos nicht gleichmäßig in das StageVideo.viewPort-Rechteck skaliert wird, kann die Videoanzeige verzerrt sein. Das heißt, dass die Seitenverhältnisse des Videos und des StageVideo.viewPort-Rechteck nicht gleich sind. Dieser Fall kann zum Beispiel eintreten, wenn das Video eine andere Breite als Höhe hat, die StageVideo.viewPort-Eigenschaft jedoch ein Quadrat spezifiziert. Um die Verzerrung zu beheben, stellen Sie unterschiedliche Werte für die x- und y-Eigenschaften des zoom-Point-Objekts ein. Stellen Sie dann die pan-Eigenschaft ein, um sicherzustellen, dass das StageVideo.viewPort-Rechteck das richtige Teilrechteck des Videos zeigt.

Wenn Sie die zoom-Eigenschaft auf einen Wert außerhalb des gültigen Bereichs RangeError setzen, wird eine Ausnahme ausgegeben. Die Laufzeitumgebung setzt den Wert auf den letzten gültigen Wert zurück.

Ziehen Sie auch in Erwägung, zur Verwendung eines StageVideo-Objekts ein Element des Stage.stageVideos-Vector-Objekts einer StageVideo-Variablen zuzuweisen. Wenn Sie die zoom-Eigenschaft der StageVideo-Variablen festlegen, ändert sich auch das zugrunde liegende Stage.stageVideos-Vector-Element. Wenn Sie dieses Element später einer anderen StageVideo-Variablen zuweisen, setzen Sie die zoom-Eigenschaft zurück.

pan
MicrophoneEnhancedOptions Die MicrophoneEnhancedOptions-Klasse stellt Konfigurationsoptionen für erweitertes Audio (akustische Echokompensation) bereit.Object Die MicrophoneEnhancedOptions-Klasse stellt Konfigurationsoptionen für erweitertes Audio (akustische Echokompensation) bereit. Die akustische Echokompensation ermöglicht es, dass mehrere Teilnehmer ohne Headsets in einer Audio/Video-Chat-Anwendung miteinander kommunizieren können.

Um die akustische Echokompensation zu verwenden, rufen Sie Microphone.getEnhancedMicrophone() auf, um einen Verweis auf ein erweitertes Microphone-Objekt abzurufen. Legen Sie die Microphone.enhancedOptions-Eigenschaft auf eine Instanz der MicrophoneEnhancedOptions-Klasse fest.

flash.media.Microphone.enhancedOptionsflash.media.Microphone.getEnhancedMicrophone()autoGain Aktivieren Sie die automatische Verstärkungssteuerung.Boolean Aktivieren Sie die automatische Verstärkungssteuerung. Ein Zeitbereichalgorithmus zur automatischen Verstärkungssteuerung wird mit der Rauschunterdrückung verwendet. Der Standardwert ist „aus“. echoPath Gibt den Echopfad (in Sekunden) an, der zur akustischen Echokompensation verwendet wird.int Gibt den Echopfad (in Sekunden) an, der zur akustischen Echokompensation verwendet wird. Ein längerer Echopfad führt zu einer besseren Echokompensation. Ein längerer Echopfad verursacht auch eine längere Verzögerung und erfordert komplexere Rechenleistung. Der Standardwert ist 128 (empfohlen). Der andere mögliche Wert ist 256. isVoiceDetected Gibt an, ob der Mikrofoneingang Sprache erkannt hat.int Gibt an, ob der Mikrofoneingang Sprache erkannt hat.

Mögliche Werte sind: -1, nicht aktiviert; 0, es wird keine Sprache erkannt; 1, es wird Sprache erkannt.

mode Steuert den erweiterten Mikrofonmodus.String Steuert den erweiterten Mikrofonmodus. Der Standardwert ist FULL_DUPLEX für alle Mikrofone, die keine USB-Mikrofone sind. Der Standardwert für USB-Mikrofone ist HALF_DUPLEX. Mögliche Werte und Beschreibungen finden Sie unter MicrophoneEnhancedMode. flash.media.MicrophoneEnhancedModenonLinearProcessing Aktiviert die nicht-lineare Verarbeitung.Boolean Aktiviert die nicht-lineare Verarbeitung. Die nicht-lineare Verarbeitung unterdrückt das Restecho, das auftritt, wenn eine Person spricht. Es wird die nicht-lineare Verarbeitungstechnik des Zeitbereichs verwendet. Schalten Sie die nicht-lineare Verarbeitung für Musikquellen aus. Der Standardwert ist true, womit die nicht-lineare Verarbeitung eingeschaltet wird.
Sound Über die Soundklasse können Sie Sound in einer Anwendung bearbeiten.flash.events:EventDispatcher Über die Soundklasse können Sie Sound in einer Anwendung bearbeiten. Mit der Soundklasse können Sie Soundobjekte erstellen, externe MP3-Dateien in diese Objekte laden und abspielen, Soundstreams schließen und auf Sounddaten wie z. B. Informationen zur Byteanzahl im Stream und zu ID3-Metadaten zugreifen. Eine umfassendere Steuerung des Sounds kann über die Soundquelle, d. h. das SoundChannel- oder Microphone-Objekt für den Sound, und über die Eigenschaften der SoundTransform-Klasse durchgeführt werden, die die Ausgabe des Sounds über die Lautsprecher des Computers steuern.

In Flash Player 10 und höher und AIR 1.5 und höher können Sie diese Klasse auch verwenden, um mit Sound zu arbeiten, der dynamisch generiert wird. In diesem Fall verwendet das Soundobjekt die Funktion, die Sie einer sampleData-Ereignisprozedur zuweisen, um Sounddaten abzurufen. Der Sound wird abgespielt, während er von einem ByteArray-Objekt abgerufen wird, das Sie mit Sounddaten füllen. Sie können Sound.extract() verwenden, um Sounddaten aus einem Soundobjekt zu extrahieren. Anschließend können Sie die Daten bearbeiten, bevor Sie sie wieder zurück in den Stream zum Abspielen schreiben.

Den in einer SWF-Datei eingebetteten Sound können Sie über die Eigenschaften in der SoundMixer-Klasse steuern.

Hinweis: Die Sound-API in ActionScript 3.0 unterscheidet sich von der in ActionScript 2.0. In ActionScript 3.0 können Sie Soundobjekte zum Steuern der zugehörigen Eigenschaften nicht in einer Hierarchie anordnen.

Beachten Sie bei Verwendung dieser Klasse das folgende Sicherheitsmodell:

  • Sounddaten können nicht geladen und wiedergegeben werden, wenn sich die aufrufende Datei in einer Netzwerk-Sandbox befindet und die zu ladende Sounddatei lokal gespeichert ist.
  • In der Standardeinstellung ist ein Laden und Abspielen von Sound nicht erlaubt, wenn die aufrufende Datei lokal ist und versucht, Sound remote zu laden und abzuspielen. Ein Benutzer muss explizit Zugriffsrechte gewähren, um diese Art des Zugriffs zu erlauben.
  • Für bestimmte Vorgänge bei Sounddaten liegen Beschränkungen vor. Auf die Daten in einem geladenen Sound kann nur über eine Datei in einer anderen Domäne zugegriffen werden, wenn eine Cross-Domain-Richtliniendatei implementiert ist. Zu den soundbezogenen APIs, die unter diese Beschränkung fallen, zählen die Sound.id3-Eigenschaft sowie die Methoden SoundMixer.computeSpectrum(), SoundMixer.bufferTime und die SoundTransform()-Klasse.

In Adobe AIR unterliegt Inhalt in der Sicherheitssandbox der Anwendung (Inhalt, der mit der AIR-Anwendung installiert wird) nicht diesen Sicherheitseinschränkungen.

Weitere Informationen zum Thema Sicherheit finden Sie im Flash Player Developer Center im Abschnitt Sicherheit.

Im folgenden Beispiel werden Informationen über Soundereignisse angezeigt, die beim Öffnen und Abspielen einer MP3-Datei auftreten. Legen Sie zur Ausführung dieses Beispiels eine Datei mit dem Namen „MySound.mp3“ in dem Verzeichnis ab, in dem sich die SWF-Datei befindet. package { import flash.display.Sprite; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; public class SoundExample extends Sprite { private var url:String = "MySound.mp3"; private var song:SoundChannel; public function SoundExample() { var request:URLRequest = new URLRequest(url); var soundFactory:Sound = new Sound(); soundFactory.addEventListener(Event.COMPLETE, completeHandler); soundFactory.addEventListener(Event.ID3, id3Handler); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler); soundFactory.load(request); song = soundFactory.play(); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function id3Handler(event:Event):void { trace("id3Handler: " + event); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler: " + event); } } }
flash.net.NetStreamMicrophoneSoundChannelSoundMixerSoundTransformprogress Wird ausgelöst, wenn während eines Ladevorgangs Daten empfangen werden.flash.events.ProgressEvent.PROGRESSflash.events.ProgressEvent Wird ausgelöst, wenn während eines Ladevorgangs Daten empfangen werden. load()open Wird beim Start eines Ladevorgangs ausgelöst.flash.events.Event.OPENflash.events.Event Wird beim Start eines Ladevorgangs ausgelöst. load()ioError Wird beim Auftreten eines I/O-Fehlers ausgelöst, durch den der Ladevorgang fehlschlägt.flash.events.IOErrorEvent.IO_ERRORflash.events.IOErrorEvent Wird beim Auftreten eines I/O-Fehlers ausgelöst, durch den der Ladevorgang fehlschlägt. load()id3 Wird durch ein Soundobjekt ausgelöst, wenn ID3-Daten für MP3-Sound verfügbar sind.flash.events.Event.ID3flash.events.Event Wird durch ein Soundobjekt ausgelöst, wenn ID3-Daten für MP3-Sound verfügbar sind. Sound.id3complete Wird nach dem erfolgreichen Laden von Daten ausgelöst.flash.events.Event.COMPLETEflash.events.Event Wird nach dem erfolgreichen Laden von Daten ausgelöst. load()sampleData Wird abgesetzt, wenn die Laufzeitumgebung neue Audiodaten anfordert.flash.events.SampleDataEvent.SAMPLE_DATAflash.events.SampleDataEvent Wird abgesetzt, wenn die Laufzeitumgebung neue Audiodaten anfordert. Das folgende Beispiel spielt eine einfache Sinuswelle ab. var mySound:Sound = new Sound(); function sineWaveGenerator(event:SampleDataEvent):void { for ( var c:int=0; c<8192; c++ ) { event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); } } mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator); mySound.play(); extract()play()flash.events.SampleDataEventSound Erstellt ein neues Soundobjekt.streamflash.net:URLRequestnull Die URL, die auf eine externe MP3-Datei verweist. contextflash.media:SoundLoaderContextnull Ein optionales SoundLoader-Kontextobjekt, das die Pufferzeit (die Mindestanzahl Millisekunden, die MP3-Daten im Puffer des Soundobjekts gehalten werden) definieren kann und festlegen kann, ob die Anwendung vor dem Laden von Sound nach einer domänenübergreifenden Richtliniendatei suchen soll. Erstellt ein neues Soundobjekt. Wenn Sie ein gültiges URLRequest-Objekt für den Soundkonstruktor übergeben, ruft der Konstruktor automatisch die load()-Funktion für das Soundobjekt auf. Wenn Sie kein gültiges URLRequest-Objekt für den Soundkonstruktor übergeben, müssen Sie die load()-Funktion für das Soundobjekt selbst aufrufen, da der Stream andernfalls nicht geladen wird.

Sobald load() für ein Soundobjekt aufgerufen wurde, kann später keine andere Sounddatei mehr in dieses Soundobjekt geladen werden. Erstellen Sie ein neues Soundobjekt, wenn Sie eine andere Sounddatei laden möchten.

In Flash Player 10 und höher und AIR 1.5 und höher können Sie statt load() die sampleData-Ereignisprozedur verwenden, um Sound dynamisch in das Soundobjekt zu laden.
close Schließt den Stream. Dadurch werden eventuelle Downloads von Daten beendet.Der Stream konnte nicht geschlossen werden, oder der Stream war nicht geöffnet. IOErrorflash.errors:IOError Schließt den Stream. Dadurch werden eventuelle Downloads von Daten beendet. Nach dem Aufrufen der close()-Methode können möglicherweise keine Daten aus dem Stream gelesen werden. Im folgenden Beispiel wird die Sound.close()-Methode aufgerufen, wenn der Benutzer auf die Stopp-Schaltfläche klickt, und das Streaming von Sound wird gestoppt.

Im Konstruktor wird ein Textfeld für die Start- und Stopp-Schaltfläche erstellt. Wenn der Benutzer auf das Textfeld klickt, wird die Methode clickHandler() aufgerufen. Sie verwaltet das Starten und Beenden der Sounddatei. Beachten Sie, dass abhängig von der Netzwerkgeschwindigkeit oder vom Zeitpunkt des Klicks auf die Stopp-Schaltfläche möglicherweise ein Großteil der Datei bereits geladen wurde, sodass es einen Moment dauern kann, bis die Wiedergabe beendet wird. Es wird ein try...catch-Block verwendet, um etwaige IO-Fehler, die beim Schließen des Streams auftreten können, abzufangen. Wenn Sound zum Beispiel aus einem lokalen Verzeichnis geladen und nicht gestreamt wird, wird Fehler 2029 (Dieses URLStream-Objekt verfügt nicht über einen geöffneten Stream) erfasst.

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.errors.IOError; import flash.events.IOErrorEvent; public class Sound_closeExample extends Sprite { private var snd:Sound = new Sound(); private var button:TextField = new TextField(); private var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); public function Sound_closeExample() { button.x = 10; button.y = 10; button.text = "START"; button.border = true; button.background = true; button.selectable = false; button.autoSize = TextFieldAutoSize.LEFT; button.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(button); } private function clickHandler(e:MouseEvent):void { if(button.text == "START") { snd.load(req); snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); button.text = "STOP"; } else if(button.text == "STOP") { try { snd.close(); button.text = "Wait for loaded stream to finish."; } catch (error:IOError) { button.text = "Couldn't close stream " + error.message; } } } private function errorHandler(event:IOErrorEvent):void { button.text = "Couldn't load the file " + event.text; } } }
extract Extrahiert unformatierte Sounddaten aus einem Soundobjekt.Die Anzahl der Samples, die in das ByteArray geschrieben werden, das im target-Parameter angegeben ist. Numbertargetflash.utils:ByteArrayEin ByteArray-Objekt, in das die extrahierten Soundsamples platziert werden. lengthNumberDie Anzahl der zu extrahierenden Soundsample. Ein Sample enthält sowohl den linken als auch den rechten Kanal, d. h. zwei 32-Bit-Gleitkommawerte. startPositionNumber-1Das Sample, bei dem die Extrahierung beginnt. Wenn Sie keinen Wert angeben, beginnt der erste Aufruf für Sound.extract() am Anfang des Sounds und anschließende Aufrufe ohne Wert für startPosition erfolgen sequenziell durch die Datei. Extrahiert unformatierte Sounddaten aus einem Soundobjekt.

Diese Methode ist für Situationen gedacht, in denen Sie mit dynamisch generiertem Sound arbeiten und eine Funktion zum sampleData-Ereignis für ein anderes Soundobjekt zuweisen. Sie können diese Methode also verwenden, um Sounddaten aus einem Soundobjekt zu extrahieren. Anschließend können Sie die Daten in das Bytearray schreiben, das ein anderes Soundobjekt zum Streamen von dynamischem Audio verwendet.

Die Audiodaten werden im Zielbytearray beginnend mit der aktuellen Position des Bytearrays abgelegt. Die Audiodaten werden immer als 44100 Hz Stereo wiedergegeben. Der Sampletyp ist ein 32-Bit-Gleitkommawert, der über ByteArray.readFloat() in eine Zahl umgewandelt werden kann.

Im folgenden Beispiel wird eine mp3-Datei geladen und die extract()-Methode der Soundklasse verwendet, um auf die Audiodaten zuzugreifen.

Die mp3-Daten werden in das sourceSnd-Soundobjekt geladen. Wenn die Anwendung die mp3-Daten lädt, ruft sie die loaded()-Funktion (die Ereignisprozedur für das complete-Ereignis des sourceSnd-Objekts) auf. Ein zweites Soundobjekt (outputSound) wird verwendet, um das modifizierte Audio abzuspielen. Das outputSound-Objekt hat einen sampleData-Ereignis-Listener. Das Objekt löst also periodische sampleData-Ereignisse aus, sobald Sie die play()-Methode des Objekts aufrufen. Die upOctave()-Methode gibt ein Bytearray mit auf den Quellaudiodaten basierenden modifizierten Audiodaten zurück. Sie gibt Audio zurück, das eine Oktave höher ist, indem sie jedes zweite Audiosample in den Quelldaten überspringt. Die Ereignisprozedur für das sampleData-Ereignis schreibt das zurückgegebene Bytearray in die data-Eigenschaft des outputSound-Objekts. Das data-Bytearray wird an die ausgegebenen Audiodaten für das outputSound-Objekt angehängt.

Fügen Sie zum Testen dieses Beispiels eine text.mp3-Datei in das gleiche Verzeichnis ein, in dem sich die SWF-Datei befindet.

var sourceSnd:Sound = new Sound(); var outputSnd:Sound = new Sound(); var urlReq:URLRequest = new URLRequest("test.mp3"); sourceSnd.load(urlReq); sourceSnd.addEventListener(Event.COMPLETE, loaded); function loaded(event:Event):void { outputSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound); outputSnd.play(); } function processSound(event:SampleDataEvent):void { var bytes:ByteArray = new ByteArray(); sourceSnd.extract(bytes, 4096); event.data.writeBytes(upOctave(bytes)); } function upOctave(bytes:ByteArray):ByteArray { var returnBytes:ByteArray = new ByteArray(); bytes.position = 0; while(bytes.bytesAvailable > 0) { returnBytes.writeFloat(bytes.readFloat()); returnBytes.writeFloat(bytes.readFloat()); if (bytes.bytesAvailable > 0) { bytes.position += 8; } } return returnBytes; }
play()sampleData
load Initiiert den Ladevorgang einer externen MP3-Datei von der angegebenen URL.Der Ladevorgang ist aufgrund eines Netzwerkfehlers fehlgeschlagen. IOErrorflash.errors:IOErrorÜber lokale nicht vertrauenswürdige Dateien kann keine Verbindung mit dem Internet hergestellt werden. Sie können dies umgehen, indem Sie diese Datei als lokal mit Netzwerkzugang oder als vertrauenswürdig klassifizieren. SecurityErrorSecurityErrorEine Verbindung mit normalerweise reservierten Ports ist nicht möglich. Eine vollständige Liste der gesperrten Ports finden Sie unter „Beschränken von Netzwerk-APIs“ im ActionScript 3.0 Entwicklerhandbuch. SecurityErrorSecurityErrorDie digest-Eigenschaft des stream-Objekts ist nicht null. Sie sollten die digest-Eigenschaft eines URLRequest-Objekts nur setzen, wenn Sie beim Laden einer SWZ-Datei (einer Adobe-Plattformkomponente) die URLLoader.load()-Methode aufrufen. IOErrorflash.errors:IOErrorstreamflash.net:URLRequest Eine URL, die auf eine externe MP3-Datei verweist. contextflash.media:SoundLoaderContextnull Ein optionales SoundLoader-Kontextobjekt, das die Pufferzeit (die Mindestanzahl Millisekunden, die MP3-Daten im Puffer des Soundobjekts gehalten werden) definieren kann und festlegen kann, ob die Anwendung vor dem Laden von Sound nach einer domänenübergreifenden Richtliniendatei suchen soll. Initiiert den Ladevorgang einer externen MP3-Datei von der angegebenen URL. Wenn Sie ein gültiges URLRequest-Objekt für den Soundkonstruktor übergeben, wird Sound.load() automatisch aufgerufen. Sie müssen Sound.load() nur aufrufen, wenn Sie kein gültiges URLRequest-Objekt oder den Wert null für den Soundkonstruktor übergeben.

Sobald load() für ein Soundobjekt aufgerufen wurde, kann später keine andere Sounddatei mehr in dieses Soundobjekt geladen werden. Erstellen Sie ein neues Soundobjekt, wenn Sie eine andere Sounddatei laden möchten.

Beachten Sie bei Verwendung dieser Methode das folgende Sicherheitsmodell von:

  • Der Aufruf von Sound.load() ist nicht zulässig, wenn sich die aufrufende Datei in der lokalen Sandbox des Dateisystems und sich der Sound in einer Netzwerk-Sandbox befindet.
  • Zum Aufrufen der lokal vertrauenswürdigen Sandbox oder der lokalen Sandbox mit Netzwerkzugang sind Zugriffsrechte von einer Website über eine URL-Richtliniendatei erforderlich.
  • Eine Verbindung mit normalerweise reservierten Ports ist nicht möglich. Eine vollständige Liste der gesperrten Ports finden Sie unter „Beschränken von Netzwerk-APIs“ im ActionScript 3.0 Entwicklerhandbuch.
  • Sie können eine SWF-Datei daran hindern, diese Methode aufzurufen, indem Sie auf der HTML-Seite, die den SWF-Inhalt enthält, den Parameter allowNetworking der object- und embed-Tags festlegen.

Wenn Sie in Flash Player 10 oder höher einen Multipart-Content-Type verwenden (z. B. „multipart/form-data“), der einen Upload enthält (gekennzeichnet durch einen „filename“-Parameter in einem „content-disposition“-Header innerhalb des POST-Body), so unterliegt die POST-Methode den Sicherheitsregeln für Uploads:

  • Der POST-Vorgang muss als Reaktion auf eine durch den Benutzer initiierte Aktion, z. B. Mausklick oder Tastendruck, erfolgen.
  • Ist die POST-Methode domänenübergreifend (das POST-Ziel befindet sich auf einem anderen Server als die SWF-Datei, die die POST-Anforderung sendet), so muss der Zielserver eine URL-Richtliniendatei bereitstellen, die den domänenübergreifenden Zugriff erlaubt.

Für alle mehrteiligen Content-Typen muss ebenfalls die Syntax nach Standard RFC2046 gültig sein. Scheint die Syntax ungültig zu sein, so unterliegt die POST-Methode den Sicherheitsregeln für Uploads.

In Adobe AIR unterliegt Inhalt in der Sicherheitssandbox der Anwendung (Inhalt, der mit der AIR-Anwendung installiert wird) jedoch nicht diesen Sicherheitseinschränkungen.

Weitere Informationen zum Thema Sicherheit finden Sie im Flash Player Developer Center im Abschnitt Sicherheit.

Im folgenden Beispiel wird der Ladeprozess einer Sounddatei dargestellt.

Im Konstruktor wird ein URLRequest-Objekt erstellt, um den Speicherort der Sounddatei, eines Podcasts von Adobe, zu bestimmen. Die Datei wird in einen try...catch-Block geladen, um Fehler abzufangen, die möglicherweise beim Laden der Datei auftreten. Wenn ein IO-Fehler auftritt, wird die errorHandler()-Methode ebenfalls aufgerufen, und die Fehlermeldung wird in das Textfeld geschrieben, das für den Fortschrittsbericht vorgesehen ist. Während des Ladevorgangs wird ein ProgressEvent.PROGRESS-Ereignis ausgelöst und die progressHandler()-Methode wird aufgerufen. Hier wird das ProgressEvent.PROGRESS-Ereignis als Timer für die Berechnung des Ladevorgangs verwendet.

Die progressHandler()-Methode teilt den bytesLoaded-Wert, der mit dem ProgressEvent-Objekt übergeben wird, durch den bytesTotal-Wert, um den Prozentwert der bereits geladenen Sounddaten zu ermitteln. Danach werden diese Werte im Textfeld angezeigt. (Beachten Sie, dass für den Fall, dass die Datei klein ist, im Cache gespeichert ist oder sich im lokalen Verzeichnis befindet, der Fortschritt möglicherweise nicht bemerkbar ist.)

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.ProgressEvent; import flash.events.IOErrorEvent; public class Sound_loadExample extends Sprite { private var snd:Sound = new Sound(); private var statusTextField:TextField = new TextField(); public function Sound_loadExample(){ statusTextField.autoSize = TextFieldAutoSize.LEFT; var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); try { snd.load(req); snd.play(); } catch (err:Error) { trace(err.message); } snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); snd.addEventListener(ProgressEvent.PROGRESS, progressHandler); this.addChild(statusTextField); } private function progressHandler(event:ProgressEvent):void { var loadTime:Number = event.bytesLoaded / event.bytesTotal; var LoadPercent:uint = Math.round(100 * loadTime); statusTextField.text = "Sound file's size in bytes: " + event.bytesTotal + "\n" + "Bytes being loaded: " + event.bytesLoaded + "\n" + "Percentage of sound file that is loaded " + LoadPercent + "%.\n"; } private function errorHandler(errorEvent:IOErrorEvent):void { statusTextField.text = "The sound could not be loaded: " + errorEvent.text; } } }
play Erstellt ein neues SoundChannel-Objekt zur Wiedergabe von Sound.Ein SoundChannel-Objekt, über das der Sound gesteuert werden kann. Wenn Sie über keine Soundkarte verfügen oder keine Soundkanäle mehr vorhanden sind, gibt diese Methode null zurück. Die maximale Anzahl der gleichzeitig verfügbaren Soundkanäle ist 32. flash.media:SoundChannelstartTimeNumber0Die ursprüngliche Position in Millisekunden, ab der die Wiedergabe gestartet werden soll. loopsint0Definiert, wie oft Sound als Schleife vom Wert startTime aus wiedergegeben wird, bevor die Wiedergabe im Soundkanal beendet wird. sndTransformflash.media:SoundTransformnullDas ursprüngliche SoundTransform-Objekt, das dem Soundkanal zugewiesen wurde. Erstellt ein neues SoundChannel-Objekt zur Wiedergabe von Sound. Diese Methode gibt ein SoundChannel-Objekt zurück, auf das Sie zum Beenden von Sound und zum Überwachen der Lautstärke zugreifen können. (Greifen Sie zum Steuern von Lautstärke, Schwenkung und Balance auf das SoundTransform-Objekt zu, das dem Soundkanal zugewiesen ist.) Im folgenden Beispiel kann der Benutzer nach dem Laden der Datei in einem grafischen Balken die Position (Startzeit) auswählen, ab der die Sounddatei abgespielt wird.

Der Konstruktor ruft die Sound.load()-Methode auf, mit dem Laden der Sounddaten zu beginnen. Als Nächstes wird die Sound.play()-Methode aufgerufen, die mit dem Abspielen von Sound beginnt, sobald genügend Daten geladen wurden. Die Sound.play()-Methode gibt ein SoundChannel-Objekt zurück, das zur Steuerung der Soundwiedergabe verwendet werden kann. Im Textfeld werden die Anweisungen angezeigt. Um sicherzustellen, dass der Inhalt bis zu dem Punkt, ab dem der Benutzer den Sound abspielen möchte, bereits geladen wurde, wird das Sprite-Objekt bar erstellt und angezeigt, nachdem die Datei geladen wurde. Wenn die Datei erfolgreich geladen wurde, wird ein Event.COMPLETE-Ereignis ausgelöst, welches die Methode completeHandler() auslöst. Die completeHandler()-Methode erstellt dann den Balken und fügt ihn der Anzeigeliste hinzu. (Anstelle eines Shape-Objekts wird ein Sprite-Objekt verwendet, um Interaktivität zu unterstützen.) Wenn der Benutzer auf den Balken klickt, wird die clickHandler()-Methode ausgelöst.

In der clickHandler()-Methode wird die Position der x-Koordinate des Benutzerklicks, event.localX, verwendet, um festzustellen, an welcher Stelle der Benutzer mit dem Abspielen der Datei beginnen möchte. Da der Balken 100 Pixel groß ist und bei der x-Koordinate 100 Pixel beginnt, ist es einfach, den Prozentwert der Position festzustellen. Da die Datei geladen wurde, hat der Wert der length-Eigenschaft der Sounddatei die Länge der gesamten Datei in Millisekunden. Anhand der Länge der Sounddatei und der Position in der Linie wird eine Startposition der Sounddatei bestimmt. Nach dem Stoppen des Sounds wird die Sounddatei an der ausgewählten Startposition neu gestartet, die als startTime-Parameter an die play()-Methode übergeben wird.

package { import flash.display.Sprite; import flash.display.Graphics; import flash.events.MouseEvent; import flash.media.Sound;; import flash.net.URLRequest; import flash.media.SoundChannel; import flash.events.ProgressEvent; import flash.events.Event; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.IOErrorEvent; public class Sound_playExample1 extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel = new SoundChannel(); private var infoTextField:TextField = new TextField(); public function Sound_playExample1() { var req:URLRequest = new URLRequest("MySound.mp3"); infoTextField.autoSize = TextFieldAutoSize.LEFT; infoTextField.text = "Please wait for the file to be loaded.\n" + "Then select from the bar to decide where the file should start."; snd.load(req); channel = snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); snd.addEventListener(Event.COMPLETE, completeHandler); this.addChild(infoTextField); } private function completeHandler(event:Event):void { infoTextField.text = "File is ready."; var bar:Sprite = new Sprite(); bar.graphics.lineStyle(5, 0xFF0000); bar.graphics.moveTo(100, 100); bar.graphics.lineTo(200, 100); bar.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(bar); } private function clickHandler(event:MouseEvent):void { var position:uint = event.localX; var percent:uint = Math.round(position) - 100; var cue:uint = (percent / 100) * snd.length; channel.stop(); channel = snd.play(cue); } private function errorHandler(errorEvent:IOErrorEvent):void { infoTextField.text = "The sound could not be loaded: " + errorEvent.text; } } }
Im folgenden Beispiel wird der Sound ein oder zwei Mal abgespielt, je nachdem, ob der Benutzer auf eine Schaltfläche klickt oder doppelklickt.

Im Konstruktor wird der Sound geladen und es wird ein einfaches rechteckiges Sprite-Objekt, button, erstellt. (Anstelle eines Shape-Objekts wird ein Sprite-Objekt verwendet, um Interaktivität zu unterstützen.) (Hier wird davon ausgegangen, dass sich die Sounddatei im selben Verzeichnis wie die SWF-Datei befindet). (Für dieses Beispiel wurde keine Fehlerverarbeitung geschrieben.)

Zwei Ereignis-Listener werden eingerichtet, um auf einfache Mausklicks und auf Doppelklicks zu warten. Wenn der Benutzer ein Mal klickt, wird die clickHandler()-Methode, die den Sound abspielt, aufgerufen. Wenn der Benutzer auf die Schaltfläche doppelklickt, wird die doubleClickHandler()-Methode, die die Sounddatei zwei Mal abspielt, aufgerufen. Das zweite Argument der play()-Methode wird auf 1 gesetzt, was bedeutet, dass die Wiedergabe nach dem ersten Abspielen bei der Startzeit des Sounds erneut beginnt. Die Startzeit, das erste Argument, wird auf 0 gesetzt, was bedeutet, dass die Datei ab dem Anfang abgespielt wird.

package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.media.Sound; import flash.net.URLRequest; public class Sound_playExample2 extends Sprite { private var button:Sprite = new Sprite(); private var snd:Sound = new Sound(); public function Sound_playExample2() { var req:URLRequest = new URLRequest("click.mp3"); snd.load(req); button.graphics.beginFill(0x00FF00); button.graphics.drawRect(10, 10, 50, 30); button.graphics.endFill(); button.addEventListener(MouseEvent.CLICK, clickHandler); button.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickHandler); this.addChild(button); } private function clickHandler(event:MouseEvent):void { snd.play(); } private function doubleClickHandler(event:MouseEvent):void { snd.play(0, 2); } } }
Im folgenden Beispiel wird der Lade- und Abspielprozess einer Sounddatei dargestellt.

Die Datei wird im Konstruktor in einen try...catch-Block geladen, um Fehler abzufangen, die möglicherweise beim Laden der Datei auftreten. Dem Soundobjekt wird ein Listener hinzugefügt, der auf ein IOErrorEvent-Ereignis reagiert, indem die errorHandler()-Methode aufgerufen wird. Für die Hauptanwendung wird ein weiterer Listener hinzugefügt, der auf ein Event.ENTER_FRAME-Ereignis reagiert, das als Zeitgeber für die Anzeige des Abspielfortschritts verwendet wird. Schließlich wird ein dritter Listener für den Soundkanal hinzugefügt, der auf ein iEvent.SOUND_COMPLETE-Ereignis reagiert (wenn die Sounddatei vollständig abgespielt wurde), indem er die soundCompleteHandler()-Methode aufruft. Die soundCompleteHandler()-Methode entfernt auch den Ereignis-Listener für das Event.ENTER_FRAME-Ereignis.

Die enterFrameHandler()-Methode teilt den bytesLoaded-Wert, der mit dem ProgressEvent-Objekt übergeben wird, durch den bytesTotal-Wert, um den Prozentwert der Sounddaten, die geladen wurden, zu bestimmen. Der Prozentwert der Sounddaten, die abgespielt wurden, kann ermittelt werden, indem der Wert der position-Eigenschaft des Soundkanals durch die Länge der Sounddaten geteilt wird. Wenn die Sounddaten jedoch nicht vollständig geladen wurden, zeigt die length-Eigenschaft des Soundobjekts nur die Größe der zurzeit geladenen Daten an. Eine Schätzung der endgültigen Größe der Sounddatei wird berechnet, indem der Wert der length-Eigenschaft des aktuellen Soundobjekts durch den Wert der bytesLoaded-Eigenschaft geteilt durch den Wert der bytesTotal-Eigenschaft geteilt wird.

Beachten Sie, dass für den Fall, dass die Datei klein ist, im Cache gespeichert ist oder sich im lokalen Verzeichnis befindet, der Ladefortschritt möglicherweise nicht bemerkbar ist. Die Verzögerung zwischen dem Beginn des Ladevorgangs der Sounddaten und dem Beginn der Wiedergabe der geladenen Daten wird bestimmt durch den Wert der SoundLoaderContext.buffertime-Eigenschaft, der standardmäßig 1000 Millisekunden beträgt und zurückgesetzt werden kann.

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundChannel; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.Event; import flash.events.IOErrorEvent; public class Sound_playExample3 extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel; private var statusTextField:TextField = new TextField(); public function Sound_playExample3(){ statusTextField.autoSize = TextFieldAutoSize.LEFT; var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); try { snd.load(req); channel = snd.play(); } catch (err:Error) { trace(err.message); } snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); addEventListener(Event.ENTER_FRAME, enterFrameHandler); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); this.addChild(statusTextField); } private function enterFrameHandler(event:Event):void { var loadTime:Number = snd.bytesLoaded / snd.bytesTotal; var loadPercent:uint = Math.round(100 * loadTime); var estimatedLength:int = Math.ceil(snd.length / (loadTime)); var playbackPercent:uint = Math.round(100 * (channel.position / estimatedLength)); statusTextField.text = "Sound file's size is " + snd.bytesTotal + " bytes.\n" + "Bytes being loaded: " + snd.bytesLoaded + "\n" + "Percentage of sound file that is loaded " + loadPercent + "%.\n" + "Sound playback is " + playbackPercent + "% complete."; } private function errorHandler(errorEvent:IOErrorEvent):void { statusTextField.text = "The sound could not be loaded: " + errorEvent.text; } private function soundCompleteHandler(event:Event):void { statusTextField.text = "The sound has finished playing."; removeEventListener(Event.ENTER_FRAME, enterFrameHandler); } } }
SoundChannel.stop()SoundMixer.stopAll()
bytesLoaded Gibt die derzeit verfügbare Anzahl der Byte in diesem Soundobjekt zurück.uint Gibt die derzeit verfügbare Anzahl der Byte in diesem Soundobjekt zurück. Diese Eigenschaft ist in der Regel nur für extern geladene Dateien nützlich. bytesTotal Gibt die Gesamtanzahl der Byte in diesem Soundobjekt zurück.int Gibt die Gesamtanzahl der Byte in diesem Soundobjekt zurück. id3 Bietet Zugriff auf die Metadaten, die in MP3-Dateien enthalten sind.flash.media:ID3Info Bietet Zugriff auf die Metadaten, die in MP3-Dateien enthalten sind.

MP3-Sounddateien können ID3-Tags mit Metadaten zur Datei enthalten. Wenn MP3-Sound, der mit der Sound.load()-Methode geladen wurde, ID3-Tags enthält, können Sie diese Eigenschaften abfragen. Es werden nur ID3-Tags unterstützt, die den UTF-8-Zeichensatz verwenden.

Flash Player 9 und höher sowie AIR unterstützen ID3 2.0-Tags, im Speziellen 2.3 und 2.4. In der folgenden Tabelle sind die ID3 2.0-Standardtags und der Inhaltstyp der einzelnen Tags aufgeführt. Mit der Sound.id3-Eigenschaft kann über das Format my_sound.id3.COMM, my_sound.id3.TIME usw. auf diese Tags zugegriffen werden. Die erste Tabelle beschreibt Tags, auf die entweder über den ID3 2.0- oder den ActionScript-Eigenschaftennamen zugegriffen werden kann. Die zweite Tabelle beschreibt ID3-Tags, die unterstützt werden, aber keine vordefinierten Eigenschaften in ActionScript haben.

ID3 2.0-TagEntsprechende SoundklasseneigenschaftCOMMSound.id3.commentTALBSound.id3.album TCONSound.id3.genreTIT2Sound.id3.songName TPE1Sound.id3.artistTRCKSound.id3.track TYERSound.id3.year

In der folgenden Tabelle sind ID3-Tags beschrieben, die unterstützt werden, jedoch in der Soundklasse über keine vordefinierten Eigenschaften verfügen. Auf diese Tags kann durch Aufrufen von mySound.id3.TFLT, mySound.id3.TIME usw. zugegriffen werden. HINWEIS: Keines dieser Tags wird in Flash Lite 4 unterstützt.

EigenschaftBeschreibungTFLTDateitypTIMEZeitTIT1Beschreibung der InhaltsgruppeTIT2Titel/Liedtitel/InhaltsbeschreibungTIT3Untertitel/Detaillierte BeschreibungTKEYErster TonTLANSprachenTLENLängeTMEDMedientypTOALOriginalalbum-/Film-/PräsentationstitelTOFNOriginaldateinameTOLYOriginalautor/SongwriterTOPEOriginalkünstlerTORYJahr der ErstveröffentlichungTOWNEigentümer/LizenznehmerTPE1Hauptkünstler/SolokünstlerTPE2Band/Orchester/BegleitungTPE3Leitung/Detaillierte Auflistung der KünstlerTPE4Interpretation, Remix oder sonstige Bearbeitung durchTPOSTeil eines SatzesTPUBPublisherTRCKTitelnummer/Position in SatzTRDAAufnahmedatenTRSNName des Internet-RadiosendersTRSOEigentümer des Internet-RadiosendersTSIZGrößeTSRCISRC (International Standard Recording Code)TSSESoftware/Hardware und Einstellungen für die KodierungTYERJahrWXXXURL-Verknüpfung

Bedenken Sie bei Verwendung dieser Eigenschaft das Flash Player-Sicherheitsmodell:

  • Die id3-Eigenschaft eines Soundobjekts ist immer für SWF-Dateien erlaubt, die in der gleichen Sicherheitssandbox wie die Sounddatei sind. Bei Dateien in anderen Sandboxen werden Sicherheitsprüfungen durchgeführt.
  • Wenn Sie Sound mithilfe der load()-Methode der Soundklasse 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 existiert und diese den Zugriff von der Domäne der ladenden SWF-Datei erlaubt, darf die Datei auf die id3-Eigenschaft des Soundobjekts zugreifen; andernfalls darf sie es nicht.

In Adobe AIR unterliegt Inhalt in der Sicherheitssandbox der Anwendung (Inhalt, der mit der AIR-Anwendung installiert wird) nicht diesen Sicherheitseinschränkungen.

Weitere Informationen zum Thema Sicherheit finden Sie im Flash Player Developer Center im Abschnitt Sicherheit.

Im folgenden Beispiel werden die ID3-Informationen aus einer Sounddatei gelesen und in einem Textfeld angezeigt.

Im Konstruktor wird die Sounddatei geladen, ist jedoch nicht auf das Abspielen eingestellt. Hier wird davon ausgegangen, dass sich die Datei im SWF-Verzeichnis befindet. Das System muss über die Berechtigung zum Lesen der ID3-Tags einer geladenen Sounddatei verfügen. Wenn die Datei ID3-Informationen enthält und das Programm berechtigt ist, diese zu lesen, wird ein Event.ID3-Ereignis ausgelöst und die Eigenschaft id3 der Sounddatei wird gefüllt. Die id3-Eigenschaft enthält ein ID3Info-Objekt mit allen ID3-Informationen.

In der id3Handler()-Methode werden die ID3-Tags der Datei in id3, einem ID3Info-Klassenobjekt, gespeichert. Es wird ein Textfeld instanziiert, um die Liste der ID3-Tags anzuzeigen. Die for-Schleife durchläuft alle ID3 2.0-Tags und hängt den Namen und den Wert an den Inhalt des Textfelds an. Mithilfe der ID3-Info-Eigenschaften (ID3Info) werden der Interpret, der Titelname und das Album ebenfalls angehängt. ActionScript 3.0 sowie Flash Player 9 und höher unterstützen ID3 2.0-Tags, speziell 2.3 und 2.4. Wenn Sie Eigenschaften durchlaufen wie in der for-Schleife, werden nur ID3 2.0-Tags angezeigt. Die Daten aus den früheren Versionen werden jedoch ebenfalls in der id3-Eigenschaft des Titels gespeichert und können mithilfe der Eigenschaften der ID3-Info-Klasse abgerufen werden. Die Tags für ID3 1.0 befinden sich am Ende der Datei, während die ID3 2.0-Tags am Anfang der Datei stehen. (In einigen Fällen weisen Dateien sowohl die Tags der früheren als auch die der älteren Versionen an derselben Stelle auf.) Wenn eine Datei sowohl am Anfang als auch am Ende der Datei Tags beider Versionen, 1.0 und 2.0, aufweist, wird die id3Handler()-Methode zwei Mal aufgerufen. Zuerst wird die 2.0-Version und dann die 1.0-Version gelesen. Wenn nur ein ID3 1.0-Tag verfügbar ist, kann über die ID3-Eigenschaften wie id3.songname darauf zugegriffen werden. Für ID3 2.0 ruft die id3.TITS-Eigenschaft den Namen des Titels mithilfe des neuen Tags (TITS) ab.

Beachten Sie, dass für dieses Beispiel keine Fehlerverarbeitung geschrieben wurde, und wenn der ID3-Inhalt umfangreich ist, geht das Ergebnis möglicherweise über den anzeigbaren Bereich hinaus.

package { import flash.display.Sprite; import flash.media.Sound; import flash.net.URLRequest; import flash.media.ID3Info; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.Event; public class Sound_id3Example extends Sprite { private var snd:Sound = new Sound(); private var myTextField:TextField = new TextField(); public function Sound_id3Example() { snd.addEventListener(Event.ID3, id3Handler); snd.load(new URLRequest("mySound.mp3")); } private function id3Handler(event:Event):void { var id3:ID3Info = snd.id3; myTextField.autoSize = TextFieldAutoSize.LEFT; myTextField.border = true; myTextField.appendText("Received ID3 Info: \n"); for (var propName:String in id3) { myTextField.appendText(propName + " = " + id3[propName] + "\n"); } myTextField.appendText("\n" + "Artist: " + id3.artist + "\n"); myTextField.appendText("Song name: " + id3.songName + "\n"); myTextField.appendText("Album: " + id3.album + "\n\n"); this.addChild(myTextField); } } }
SoundLoaderContext.checkPolicyFile
isBuffering Gibt den Zwischenspeicherstatus externer MP3-Dateien zurück.Boolean Gibt den Zwischenspeicherstatus externer MP3-Dateien zurück. Wenn der Wert auf true gesetzt ist, wird die Wiedergabe unterbrochen, während das Objekt auf weitere Daten wartet. isURLInaccessible Gibt an, ob die Sound.url-Eigenschaft gekürzt wurde.Boolean Gibt an, ob die Sound.url-Eigenschaft gekürzt wurde. Wenn isURLInaccessible den Wert true hat, ist der Sound.url-Wert nur die Domäne der endgültigen URL, von der der Sound geladen wird. Die Eigenschaft wird zum Beispiel gekürzt, wenn der Sound aus http://www.adobe.com/assets/hello.mp3 geladen wird und die Sound.url-Eigenschaft den Wert http://www.adobe.com hat. Der Wert von isURLInaccessible ist nur dann true, wenn auch Folgendes zutrifft:
  • Beim Laden der Sounddatei ist eine HTTP-Umleitung aufgetreten.
  • Die SWF-Datei, die Sound.load() aufruft, stammt aus einer anderen Domäne als die endgültige URL der Sounddatei.
  • Die SWF-Datei, die Sound.load() aufruft, hat keine Zugriffsberechtigung für die Sounddatei. Zugriffsberechtigungen für die Sounddatei werden auf die gleiche Weise gewährt wie für die Sound.id3-Eigenschaft: Richten Sie eine Richtliniendatei ein und verwenden Sie die SoundLoaderContext.checkPolicyFile-Eigenschaft.

Hinweis: Die isURLInaccessible-Eigenschaft wurde für Flash Player 10.1 und AIR 2.0 hinzugefügt. Diese Eigenschaft steht jedoch SWF-Dateien aller Versionen zur Verfügung, wenn die Flash-Laufzeitumgebung dies unterstützt. Die Verwendung einiger Authoring-Tools im „strikten Modus“ führt also zu einem Kompilierungsfehler. Um diesen Fehler zu umgehen, verwenden Sie die indirekte Syntax mySound["isURLInaccessible"] oder deaktivieren Sie den strikten Modus. Wenn Sie Flash Professional CS5 oder Flex SDK 4.1 verwenden, können Sie diese API für Laufzeitumgebungen verwenden und kompilieren, die vor Flash Player 10.1 und AIR 2 veröffentlicht wurden.

Für Anwendungsinhalte in AIR ist der Wert dieser Eigenschaft immer false.

urlid3flash.media.SoundLoaderContext.checkPolicyFile
length Die Länge des aktuellen Sounds in Millisekunden.Number Die Länge des aktuellen Sounds in Millisekunden. url Die URL, von der der Sound geladen wurde.String Die URL, von der der Sound geladen wurde. Diese Eigenschaft kann nur auf Soundobjekte angewendet werden, die mit der Sound.load()-Methode geladen wurden. Bei Soundobjekten, die mit einem Soundelement in der Bibliothek einer SWF-Datei verknüpft sind, ist der Wert der url-Eigenschaft null.

Da die endgültige URL noch nicht bekannt ist, hat die url-Eigenschaft beim ersten Aufrufen von Sound.load() anfänglich den Wert null. Sobald ein open-Ereignis über das Soundobjekt ausgelöst wurde, nimmt die url-Eigenschaft einen anderen Wert an.

Die url-Eigenschaft enthält die endgültige, absolute URL, von der Sound geladen wurde. Der Wert von url entspricht in der Regel dem Wert, der an den stream-Parameter von Sound.load() übergeben wurde. Wenn Sie allerdings eine relative URL an Sound.load() übergeben haben, ist der Wert der url-Eigenschaft die absolute URL. Wird die ursprüngliche URL-Anforderung zusätzlich über einen HTTP-Server umgeleitet, entspricht der Wert der url-Eigenschaft der endgültigen URL, über die die Sounddatei tatsächlich heruntergeladen wurde. Diese Protokollierung einer absoluten, endgültigen URL entspricht dem Verhalten von LoaderInfo.url.

In einigen Fällen ist der Wert der url-Eigenschaft gekürzt; weitere Informationen finden Sie im Eintrag zur isURLInaccessible-Eigenschaft.

load()flash.display.LoaderInfo.urlisURLInaccessible
MicrophoneEnhancedMode Die MicrophoneEnhancedMode-Klasse ist eine Aufzählung von Konstantenwerten, die zur Einstellung der mode-Eigenschaft in der MicrophoneEnhancedOptions-Klasse verwendet werden.Object Die MicrophoneEnhancedMode-Klasse ist eine Aufzählung von Konstantenwerten, die zur Einstellung der mode-Eigenschaft in der MicrophoneEnhancedOptions-Klasse verwendet werden. flash.media.MicrophoneEnhancedOptionsFULL_DUPLEX Verwenden Sie diesen Modus, damit beide Teilnehmer gleichzeitig sprechen können.fullDuplexString Verwenden Sie diesen Modus, damit beide Teilnehmer gleichzeitig sprechen können. Die akustische Echokompensation wird im Vollduplexmodus ausgeführt. Der Vollduplexmodus bietet die höchste Qualität bei der Echokompensation. Dieser Modus erfordert hochwertige Mikrofone und Lautsprecher sowie die meiste Rechenleistung. Verwenden Sie diesen Modus nicht mit einem USB-Mikrofon. HALF_DUPLEX Verwenden Sie diesen Modus für ältere und weniger hochwertige Lautsprecher und Mikrofone.halfDuplexString Verwenden Sie diesen Modus für ältere und weniger hochwertige Lautsprecher und Mikrofone. Die akustische Echokompensation wird im Halbduplexmodus ausgeführt. Im Halbduplexmodus kann jeweils nur ein Teilnehmer sprechen. Der Halbduplexmodus erfordert weniger Verarbeitung als der Vollduplexmodus. Der Halbduplexmodus ist der Standardmodus für USB-Mikrofone.

Wenn die Anwendung die standardmäßige enhancedOptions-Einstellung und ein USB-Mikrofon verwendet, wechselt Flash Player automatisch in den halfDuplex-Modus. Wenn die Anwendung die standardmäßige enhancedOptions-Einstellung und das eingebaute Mikrofon verwendet, verwendet Flash Player den fullDuplex-Modus.

HEADSET Verwenden Sie diesen Modus, wenn beide Teilnehmer Headsets benutzen.headsetString Verwenden Sie diesen Modus, wenn beide Teilnehmer Headsets benutzen. Die akustische Echokompensation wird im Niedrigechomodus ausgeführt. Dieser Modus benötigt am wenigsten Rechenleistung. OFF Alle erweiterten Audiofunktionen sind deaktiviert.offString Alle erweiterten Audiofunktionen sind deaktiviert. SPEAKER_MUTE Verwenden Sie diesen Modus, wenn der Lautsprecher stummgeschaltet ist.speakerMuteString Verwenden Sie diesen Modus, wenn der Lautsprecher stummgeschaltet ist. Die akustische Echokompensation ist ausgeschaltet. Erweitertes Audio führt Rauschunterdrückung oder automatische Verstärkung aus (falls dies aktiviert ist). flash.media.MicrophoneEnhancedOptions.autoGain
Video Die Videoklasse zeigt Livevideo oder aufgezeichnetes Video in einer Anwendung an, ohne dass das Video in die SWF-Datei eingebettet ist.flash.display:DisplayObject Die Videoklasse zeigt Livevideo oder aufgezeichnetes Video in einer Anwendung an, ohne dass das Video in die SWF-Datei eingebettet ist. Diese Klasse erstellt ein Video-Objekt, das jede der folgenden Videotypen abspielt: aufgenommene Videodateien, die auf einem Server oder lokal gespeichert sind, oder vom Benutzer erfasstes Live-Video. Ein Videoobjekt ist ein Anzeigeobjekt in der Anzeigeliste der Anwendung und stellt den visuellen Raum dar, in dem das Video in einer Benutzeroberfläche abgespielt wird.

Bei der Verwendung mit Flash Media Server ermöglicht Ihnen das Videoobjekt, vom Benutzer erfasstes Live-Video an den Server zu senden und dann vom Server an andere Benutzer zu übertragen. Mithilfe dieser Funktionen können Sie Medienanwendungen wie einfache Videoplayer, Videoplayer mit Multipoint-Veröffentlichung von einem Server zum anderen oder eine Anwendung für den Videoaustausch in einer Community erstellen.

Flash Player 9 und höher unterstützt das Veröffentlichen und Wiedergeben von mit dem Sorenson Spark-Codec oder dem On2 VP6-Codec kodierten FLV-Dateien und zudem einen Alphakanal. Der Video-Codec On2 VP6 belegt eine geringere Bandbreite als ältere Technologien und enthält zusätzliche Deblocking- und Deringing-Filter. Weitere Informationen zur Videowiedergabe und zu unterstützten Formaten finden Sie im Abschnitt zur flash.net.NetStream-Klasse.

Flash Player 9.0.115.0 und höher unterstützt MIP-Mapping, um die Wiedergabequalität und -leistung zur Laufzeit zu optimieren. Für die Videowiedergabe verwendet Flash Player MIP-Mapping-Optimierung, wenn Sie die Eigenschaft smoothing des Videoobjekts auf true einstellen.

Wie bei anderen Anzeigeobjekten in der Anzeigeliste können Sie die verschiedenen Eigenschaften von Videoobjekten steuern. Sie können das Videoobjekt beispielsweise mithilfe seiner x- und y-Eigenschaften auf der Bühne verschieben, seine Größe mit den Eigenschaften height und width ändern usw.

Um einen Videostream abzuspielen, verwenden Sie attachCamera() oder attachNetStream(), um das Video an das Videoobjekt anzuhängen. Fügen Sie das Videoobjekt dann mithilfe von addChild() der Anzeigeliste hinzu.

Wenn Sie Flash Professional verwenden, können Sie das Video-Objekt auch auf der Bühne platzieren, anstatt es mit addChild() hinzuzufügen:

  1. Ist das Bibliothekbedienfeld nicht sichtbar, wählen Sie „Fenster“ > „Bibliothek“ aus.
  2. Fügen Sie der Bibliothek ein eingebettetes Videoobjekt hinzu, indem Sie auf der rechten Seite der Titelleiste im Bibliothekbedienfeld auf das Optionsmenü klicken und die Option „Neues Video“ auswählen.
  3. Benennen Sie das eingebettete Videoobjekt für die Verwendung in der Bibliothek im Dialogfeld für die Videoeigenschaften und klicken Sie auf „OK“.
  4. Ziehen Sie das Videoobjekt auf die Bühne und geben Sie ihm im Eigenschafteninspektor einen eindeutigen Namen, zum Beispiel my_video. (Verwenden Sie nicht den Namen „Video“.)

In AIR-Anwendungen auf dem Desktop werden beim Abspielen von Video im Vollbildmodus alle Energiesparfunktionen und Bildschirmschoner deaktiviert (sofern dies vom Betriebssystem zugelassen wird).

Hinweis: Die Videoklasse ist keine Unterklasse der InteractiveObject-Klasse, sodass keine Mausereignisse ausgelöst werden können. Sie können jedoch die addEventListener()-Methode für den Anzeigeobjekt-Container aufrufen, der das Videoobjekt enthält.

Im folgenden Beispiel wird ein Videoobjekt mit den Klassen NetConnection und NetStream verwendet, um eine FLV-Datei zu laden und abzuspielen. Zur Ausführung dieses Beispiels benötigen Sie eine FLV-Datei, deren Name und Speicherort mit der an videoURL übergebenen Variablen übereinstimmt. In diesem Fall ist das eine FLV-Datei mit dem Namen „Video.flv“, die in dem Verzeichnis abgelegt ist, in dem sich die SWF-Datei befindet.

In diesem Fall wird der Code zur Erstellung des Video- und NetStream-Objekts und zum Aufrufen der Methoden Video.attachNetStream() und NetStream.play() in eine Prozedurfunktion eingefügt. Die Prozedur wird nur aufgerufen, wenn die Verbindung mit dem NetConnection-Objekt erfolgreich hergestellt werden kann, d. h. wenn das Ereignis netStatus ein info-Objekt mit einer code-Eigenschaft zurückgibt, die Erfolg angibt. Es wird empfohlen, die erfolgreiche Verbindungsherstellung abzuwarten, bevor Sie NetStream.play() aufrufen.

package { import flash.display.Sprite; import flash.events.*; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; public class VideoExample extends Sprite { private var videoURL:String = "Video.flv"; private var connection:NetConnection; private var stream:NetStream; public function VideoExample() { connection = new NetConnection(); connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); connection.connect(null); } private function netStatusHandler(event:NetStatusEvent):void { switch (event.info.code) { case "NetConnection.Connect.Success": connectStream(); break; case "NetStream.Play.StreamNotFound": trace("Unable to locate video: " + videoURL); break; } } private function connectStream():void { stream = new NetStream(connection); stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); var video:Video = new Video(); video.attachNetStream(stream); stream.play(videoURL); addChild(video); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function asyncErrorHandler(event:AsyncErrorEvent):void { // ignore AsyncErrorEvent events. } } }
attachCamera()attachNetStream()flash.media.Camera.getCamera()flash.net.NetConnectionflash.net.NetStreamflash.display.DisplayObjectContainer.addChild()flash.display.Stage.addChild()Arbeiten mit VideosVideo Erstellt eine neue Video-Instanz.widthint320Die Breite des Videos in Pixel. heightint240Die Höhe des Videos in Pixel. Erstellt eine neue Video-Instanz. Wenn für die Parameter width und height keine Werte angegeben sind, werden die Standardwerte verwendet. Mithilfe von Video.width und Video.height können Sie die width- und height-Eigenschaften des Videoobjekts auch nach der Erstellung des Objekts festlegen. Beim Erstellen eines neuen Videoobjekts ist der Wert 0 für die Höhe und Breite nicht zulässig. Wenn Sie den Wert 0 übergeben, werden die Standardwerte verwendet.

Rufen Sie nach dem Erstellen des Videos die Methode DisplayObjectContainer.addChild() oder DisplayObjectContainer.addChildAt() auf, um das Videoobjekt einem übergeordneten DisplayObjectContainer-Objekt hinzuzufügen.

Im folgenden Beispiel wird gezeigt, wie eine externe FLV-Datei geladen wird: var MyVideo:Video = new Video(); addChild(MyVideo); var MyNC:NetConnection = new NetConnection(); MyNC.connect(null); var MyNS:NetStream = new NetStream(MyNC); MyNS.play("http://www.helpexamples.com/flash/video/clouds.flv"); MyVideo.attachNetStream(MyNS); //the clouds.flv video has metadata we're not using, so create //an error handler to ignore the message generated by the runtime //about the metadata MyNS.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); function asyncErrorHandler(event:AsyncErrorEvent):void { //ignore metadata error message }
attachCamera Gibt einen Videostream von einer Kamera an, der innerhalb des Videoobjekts in der Anwendung angezeigt werden soll.cameraflash.media:CameraEin Camera-Objekt, das Videodaten erfasst. Wenn Sie die Verbindung mit dem Videoobjekt beenden möchten, übergeben Sie den Wert null. Gibt einen Videostream von einer Kamera an, der innerhalb des Videoobjekts in der Anwendung angezeigt werden soll.

Verwenden Sie diese Methode, um vom Benutzer erfasstes Live-Video an das Video-Objekt anzuhängen. Sie können das Live-Video lokal auf demselben Computer oder Gerät, auf dem es aufgezeichnet wurde, abspielen, oder es an Flash Media Server senden und es mithilfe des Servers an andere Benutzer streamen.

Hinweis: In einer iOS-AIR-Anwendung kann kein Kameravideo angezeigt werden, wenn die Anwendung den GPU-Renderingmodus verwendet.

Die Verwendung dieser Methode wird im Beispiel für die Camera.getCamera()-Methode veranschaulicht.
Video.attachNetStream()flash.media.Camera
attachNetStream Gibt einen Videostream an, der innerhalb des Videoobjekts in der Anwendung angezeigt werden soll.netStreamflash.net:NetStreamEin NetStream-Objekt. Wenn Sie die Verbindung mit dem Videoobjekt beenden möchten, übergeben Sie den Wert null. Gibt einen Videostream an, der innerhalb des Videoobjekts in der Anwendung angezeigt werden soll. Der Videostream ist entweder eine Videodatei, die mit NetStream.play() abgespielt wird, ein Camera-Objekt oder null. Wenn Sie eine Videodatei verwenden, kann sie im lokalen Dateisystem oder auf Flash Media Server gespeichert werden. Wenn der Wert des netStream-Arguments auf null gesetzt ist, wird das Video nicht mehr im Videoobjekt wiedergegeben.

Sie müssen diese Methode nicht verwenden, wenn eine Videodatei nur Audiodaten enthält. Die Audiodaten von Videodateien werden automatisch wiedergegeben, wenn Sie NetStream.play() aufrufen. Um die mit einer Videodatei verknüpften Audiodaten zu steuern, verwenden Sie die soundTransform-Eigenschaft des NetStream-Objekts, das die Videodatei wiedergibt.

Am Ende des Abschnitts über diese Klasse finden Sie in Beispiel , in dem die Verwendung dieser Methode veranschaulicht wird.
Video.attachCamera()flash.net.NetStream.soundTransformflash.net.NetStream.play()SoundTransform
clear Löscht das Bild, das aktuell im Videoobjekt angezeigt wird (nicht im Videostream). Löscht das Bild, das aktuell im Videoobjekt angezeigt wird (nicht im Videostream). Diese Methode ist für das Arbeiten mit dem aktuellen Bild nützlich. Sie können beispielsweise das letzte Bild löschen oder Standbyinformationen anzeigen, ohne das Videoobjekt auszublenden. Video.attachCamera()deblocking Gibt den Typ des Filters an, der bei der Nachbearbeitung auf dekodierte Videos angewendet wird.int Gibt den Typ des Filters an, der bei der Nachbearbeitung auf dekodierte Videos angewendet wird. Mit dem Standardwert 0 kann bei der Videokomprimierung gegebenenfalls ein Deblocking-Filter angewendet werden.

Die Komprimierung von Videos kann zu unerwünschten Artefakten führen. Mithilfe der deblocking-Eigenschaft können Sie Filter setzen, mit denen Blocking-Artefakte und (bei Videokomprimierungen mit dem On2 VP6-Codec) auch Ringing-Artefakte reduziert werden.

Blocking bezieht sich auf sichtbare Fehler zwischen den Begrenzungen der einzelnen Blocks, aus denen sich jedes Videobild zusammensetzt. Ringing bezieht sich auf verzerrte Kanten der Elemente in einem Videobild.

Es stehen zwei Deblocking-Filter zur Verfügung: einer im Sorenson-Codec und ein weiterer im On2 VP6-Codec. Bei Verwendung des On2 VP6-Codecs ist zudem ein Deringing-Filter verfügbar. Verwenden Sie zum Festlegen eines Filters einen der folgenden Werte:

  • 0 – Der Deblocking-Filter wird bei der Videokomprimierung bei Bedarf angewendet.
  • 1 – Es wird kein Deblocking-Filter verwendet.
  • 2 – Es wird der Sorenson-Deblocking-Filter angewendet.
  • 3 – Nur bei der On2-Videokomprimierung wird der Deblocking-Filter von On2, jedoch kein Deringing-Filter verwendet.
  • 4 – Nur für On2-Video. Es wird der Deblocking-Filter und der Deringing-Filter von On2 verwendet.
  • 5 – Nur bei der On2-Videokomprimierung wird der Deblocking-Filter und ein leistungsstärkerer Deringing-Filter von On2 verwendet.

Wenn bei Verwendung des Sorenson-Codecs ein Wert größer als 2 angegeben wurde, wird der Sorenson-Decoder automatisch auf 2 gesetzt.

Die Verwendung eines Deblocking-Filters hat Auswirkungen auf die Gesamtleistung bei der Wiedergabe und ist bei Videos mit hoher Bandbreite normalerweise nicht erforderlich. Wenn das System eines Benutzers nicht leistungsfähig genug ist, treten bei einem aktivierten Deblocking-Filter bei der Wiedergabe von Videos möglicherweise Probleme auf.

smoothing Gibt an, ob das Video beim Skalieren geglättet (interpoliert) werden soll.Boolean Gibt an, ob das Video beim Skalieren geglättet (interpoliert) werden soll. Die Funktion zum Glätten funktioniert nur, wenn sich die Laufzeitumgebung im Modus für hohe Qualität (Standardeinstellung) befindet. Der Standardwert ist false (ohne Glättung).

Setzen Sie für die Videowiedergabe mit Flash Player 9.0.115.0 und höheren Versionen diese Eigenschaft auf true, um die Bilder durch MIP-Mapping zu optimieren.

videoHeight Eine Ganzzahl, die die Höhe des Videostreams in Pixeln angibt.int Eine Ganzzahl, die die Höhe des Videostreams in Pixeln angibt. Im Falle von Live-Streams ist der Wert mit dem der Eigenschaft Camera.height des Kamera-Objekts identisch, das den Videostream aufzeichnet. Bei aufgenommenen Videodateien ist dieser Wert die Höhe des Videos.

Sie können diese Eigenschaft beispielsweise verwenden, um sicherzustellen, dass der Benutzer das Video in der Größe sieht, in der es aufgenommen wurde (unabhängig von der eigentlichen Größe des Videoobjekts auf der Bühne).

flash.media.Camera.height
videoWidth Eine Ganzzahl, die die Breite des Videostreams in Pixeln angibt.int Eine Ganzzahl, die die Breite des Videostreams in Pixeln angibt. Im Falle von Live-Streams ist der Wert mit dem der Eigenschaft Camera.width des Camera-Objekts identisch, das den Videostream aufzeichnet. Bei aufgenommenen Videodateien ist dieser Wert die Breite des Videos.

Sie können diese Eigenschaft beispielsweise verwenden, um sicherzustellen, dass der Benutzer das Video in der Größe sieht, in der es aufgenommen wurde (unabhängig von der eigentlichen Größe des Videoobjekts auf der Bühne).

flash.media.Camera.width