Geladen media benaderen als gegevens

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Voor toegang tot geladen gegevens gebruikt u de methoden BitmapData.draw(), BitmapData.drawWithQuality() en SoundMixer.computeSpectrum(). Standaard kunt u geen pixel- of audiogegevens verkrijgen van afbeeldingen of audio-objecten die worden gerenderd of afgespeeld door media in een andere sandbox. Met de volgende methoden kunt u echter wel toegang verlenen tot dergelijke gegevens, ook al staan de gegevens in andere sandboxen.

  • In de inhoud waarmee de afbeelding wordt gerenderd of de gegevens worden afgespeeld roept u de methode Security.allowDomain() aan om gegevenstoegang te verlenen tot inhoud in andere domeinen.

  • Voeg voor geladen afbeeldingen, geluiden of video’s een URL-beleidsbestand toe op de server van het geladen bestand. In dit bestand moet toegang worden verleend aan het domein van het SWF-bestand dat via de methode BitmapData.draw(), BitmapData.drawWithQuality() of SoundMixer.computeSpectrum() gegevens wil extraheren uit het bestand. De methode drawWithQuality is beschikbaar in Flash Player 11.3 en hoger en in AIR 3.3 en hoger.

In de volgende secties wordt aandacht besteed aan het opvragen van bitmap-, geluids- en videogegevens.

Bitmapgegevens opvragen

Met de methoden draw() en drawWithQuality() (Flash Player 11.3; AIR 3.3) van een BitmapData-object kunt u de weergegeven pixels van een willekeurig weergaveobject overnemen in het BitmapData-object. Dit kunnen de pixels zijn van een object MovieClip, een object Bitmap of een weergaveobject. Deze methoden kunnen alleen worden gebruikt voor het overnemen van pixels in het object BitmapData als aan de volgende voorwaarden wordt voldaan:

  • In het geval van een bronobject dat geen geladen bitmap is, moeten het bronobject en alle onderliggende objecten (alleen voor een object Sprite of MovieClip) afkomstig zijn uit het domein van het object dat de methode draw aanroept, of ze moeten deel uitmaken van een SWF-bestand dat toegankelijk is voor de aanroeper doordat de methode Security.allowDomain() is aangeroepen.

  • In het geval van een geladen bitmapbronobject moet het bronobject deel uitmaken van het domein van het object dat de methode draw aanroept. De bewerking is ook mogelijk als de server van het bronobject een URL-beleidsbestand bevat waarin toestemming wordt verleend aan het aanroepende domein.

Als niet aan deze voorwaarden wordt voldaan, wordt een uitzondering SecurityError gegenereerd.

Wanneer u de afbeelding laadt met de methode load() van de klasse Loader, kunt u een parameter context opgeven (een object LoaderContext). Als u de eigenschap checkPolicyFile van het object LoaderContext instelt op true, controleert Flash Player of er een bestand met URL-beleid aanwezig is op de server waarvan de afbeelding wordt geladen. Als dat het geval is en in dit bestand is vastgelegd dat het domein van het ladende SWF-bestand toegang heeft, krijgt het bestand toegang tot de gegevens in het object Bitmap. In alle andere gevallen wordt de toegang geweigerd.

U kunt ook de eigenschap checkPolicyFile opgeven voor een afbeelding die wordt geladen via de tag <img> in een tekstveld. SWF-bestanden en afbeeldingen in een tekstveld laden met de tag SWF-bestanden en afbeeldingen in een tekstveld laden met de tag <img >

Geluidsgegevens opvragen

Er gelden beveiligingsbeperkingen voor de volgende API’s van ActionScript 3.0 voor geluiden:

  • De methode SoundMixer.computeSpectrum(): deze methode is altijd toegestaan voor code die wordt uitgevoerd in dezelfde beveiligingssandbox als het geluidsbestand. Voor code die in andere sandboxen wordt uitgevoerd zijn beveiligingscontroles beschikbaar.

  • De methode SoundMixer.stopAll(): deze methode is altijd toegestaan voor code die wordt uitgevoerd in dezelfde beveiligingssandbox als het geluidsbestand. Voor bestanden in andere sandboxen zijn beveiligingscontroles beschikbaar.

  • De eigenschap id3 van de klasse Sound - Deze eigenschap is altijd toegestaan voor SWF-bestanden in dezelfde beveiligingssandbox als het geluidsbestand. Voor code die in andere sandboxen wordt uitgevoerd zijn beveiligingscontroles beschikbaar.

Elk geluid is gekoppeld aan twee soorten sandboxen: een inhoudssandbox en een eigenaarssandbox.

  • Het oorspronkelijke domein van het geluid is bepalend voor de inhoudssandbox. Deze sandbox bepaalt weer of uit het geluid gegevens kunnen worden geëxtraheerd via de eigenschap id3 van het geluid en de methode SoundMixer.computeSpectrum().

  • Het object dat het afspelen van het geluid heeft gestart, is bepalend voor de eigenaarssandbox. Deze sandbox bepaalt weer of het geluid kan worden gestopt via de methode SoundMixer.stopAll().

Wanneer u het geluid laadt met de methode load() van de klasse Sound, kunt u een parameter context opgeven (een object SoundLoaderContext). Als u de eigenschap checkPolicyFile van het object SoundLoaderContext instelt op true, controleert de runtime of er een bestand met URL-beleid aanwezig is op de server waarvan het geluid wordt geladen. Als dat het geval is en in dit bestand is vastgelegd dat het domein van de ladende code toegang heeft, krijgt de code toegang tot de eigenschap id van het Sound-object. In alle andere gevallen wordt de toegang geweigerd. Via de eigenschap checkPolicyFile kan ook de methode SoundMixer.computeSpectrum() worden ingeschakeld voor geladen geluiden.

U kunt de methode SoundMixer.areSoundsInaccessible() gebruiken om vast te stellen of een aanroep van de methode SoundMixer.stopAll() tot gevolg heeft dat het afspelen van alle geluiden wordt gestopt, omdat de eigenaarssandbox van een of meer geluiden niet toegankelijk is voor de aanroeper.

Het aanroepen van de methode SoundMixer.stopAll() heeft tot gevolg dat het afspelen wordt gestopt van de geluiden waarvan de eigenaarssandbox dezelfde is als die van de aanroeper van stopAll(). De aanroep heeft eveneens tot gevolg dat het afspelen wordt gestopt van de geluiden waarvan het afspelen is gestart door SWF-bestanden die de methode Security.allowDomain() hebben aangeroepen om toegang te verlenen aan het domein van het SWF-bestand dat de methode stopAll() aanroept. Het afspelen van eventuele andere geluiden wordt niet gestopt. De aanwezigheid van deze geluiden kan worden vastgesteld door de methode SoundMixer.areSoundsInaccessible() aan te roepen.

De methode computeSpectrum() kan alleen worden aangeroepen als alle geluiden die worden afgespeeld afkomstig zijn uit de sandbox van het object dat de methode aanroept of uit een bron die toegang heeft verleend aan de sandbox van de aanroeper. Als niet aan deze voorwaarden wordt voldaan, wordt een uitzondering SecurityError gegenereerd. In het geval van geluiden die zijn geladen uit ingesloten geluiden in een bibliotheek in een SWF-bestand kan toegang worden verleend met een aanroep van de methode Security.allowDomain() in het geladen SWF-bestand. Voor geluiden die zijn geladen uit andere bronnen dan SWF-bestanden (zoals uit geladen MP3-bestanden of uit videobestanden) moet in een URL-beleidsbestand op de server van het bronobject toegang worden verleend tot gegevens in geladen media.

Zie Controlemiddelen voor auteurs (ontwikkelaars) en Controlemiddelen voor websites (beleidsbestanden) voor meer informatie.

Als u toegang wilt tot geluidsgegevens van RTMP-streams, moet u toegang verlenen tot de server. Met de ActionScript-eigenschap Client.audioSampleAccess aan de serverkant kunt u toegang verlenen tot bepaalde mappen op Flash Media Server. Zie de Server-Side ActionScript Language Reference voor meer informatie.

Videogegevens opvragen

Met de methode BitmapData.draw() of BitmapData.drawWithQuality() kunt u de pixelgegevens vastleggen uit het huidige frame van een video. (De methode drawWithQuality is beschikbaar in Flash Player 11.3 en hoger en in AIR 3.3 en hoger.)

Er zijn twee verschillende soorten video:

  • Video gestreamd over RTMP van Flash Media Server

  • Progressieve video die wordt geladen van een FLV- of F4V-bestand

Als u de draw-methoden wilt gebruiken om runtimeafbeeldingen te extraheren uit RTMP-streams, moet u toegang verlenen tot de server. Met de ActionScript-eigenschap Client.videoSampleAccess aan de serverkant kunt u toegang verlenen tot bepaalde mappen op Flash Media Server. Zie de Server-Side ActionScript Language Reference voor meer informatie.

Wanneer u een draw-methode aanroept met progressieve video als waarde voor de parameter source, moet de aanroeper van de methode deel uitmaken van de sandbox van het FLV-bestand of moet op de server van het FLV-bestand een beleidsbestand bestaan waarin toegang wordt verleend aan het domein van het aanroepende SWF-bestand. U kunt aanvragen dat het beleid wordt gedownload door de eigenschap checkPolicyFile van het object NetStream in te stellen op true.