Åtkomst av inlästa medier som data

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Om du vill komma åt inläsningsdata använder du metoderna BitmapData.draw() , BitmapData.drawWithQuality() och SoundMixer.computeSpectrum() . Som standard ges inte åtkomst till pixeldata eller ljuddata från grafik- eller ljudobjekt som återges eller används av media som har lästs in i en annan sandlåda. Men du kan använda följande metoder om du vill ge åtkomst till sådana data över sandlådegränserna:

  • Anropa metoden Security.allowDomain() under återgivningen av det innehåll eller uppspelningen av de data som du vill ge åtkomst till för att ge åtkomst till innehåll i andra domäner.

  • För inläst bild, ljud eller video lägger du till en URL-principfil på servern med den inlästa filen. Den här principfilen måste ge tillgång till domänen för den SWF-fil som försöker anropa metoderna BitmapData.draw() , BitmapData.drawWithQuality() eller SoundMixer.computeSpectrum() för att extrahera data från filen. Metoden drawWithQuality är tillgänglig i Flash Player 11.3 och senare; AIR 3.3 och senare.

I följande avsnitt beskrivs hur du får åtkomst till bitmapps-, ljud- och videodata.

Åtkomst till bitmappsdata

Med metoderna draw() och drawWithQuality() (Flash Player 11.3; AIR 3.3) för ett BitmapData-objekt kan du rita de pixlar som för tillfället visas för ett visningsobjekt till BitmapData-objektet. Detta kan innehålla pixlarna från ett MovieClip-objekt, ett Bitmap-objekt eller något annat visningsobjekt. Följande villkor måste uppfyllas för de här metoderna för att pixlar ska kunna ritas till BitmapData-objektet:

  • Om det gäller ett annat källobjekt än en inläst bitmapp måste källobjektet och (om det är ett Sprite- eller MovieClip-objekt) alla underordnade objekt komma från samma domän som det objekt som anropar metoden draw eller så måste de finnas i en SWF-fil som är tillgänglig för anroparen via metoden Security.allowDomain() .

  • Om det gäller ett källobjekt av typen inläst bitmapp måste källobjektet komma från samma domän som det objekt som anropar metoden draw eller så måste källservern ha en URL-principfil som ger den anropande domänen tillgång till servern.

Om villkoren inte uppfylls genereras ett SecurityError-undantag.

Om du läser in bilden med metoden load() i klassen Loader kan du ange parametern context , som är ett LoaderContext-objekt. Om du ställer in egenskapen checkPolicyFile för LoaderContext-objektet på true söker Flash Player efter en URL-principfil på servern som bilden läses in på. Om det finns en principfil och om filen godkänner domänen för den inläsande SWF-filen, får filen åtkomst till data i Bitmap-objektet, annars får den inte åtkomst.

Du kan även ange egenskapen checkPolicyFile i en bild som lästs in via taggen <img> i ett textfält. Mer information finns i Inläsning av SWF-filer och bilder via taggen <img> i ett textfält .

Åtkomst av ljuddata

Följande ljudrelaterade API:er i ActionScript 3.0 har säkerhetsbegränsningar:

  • Metoden SoundMixer.computeSpectrum() – Tillåts alltid för kod som körs i samma säkerhetssandlåda som ljudfilen. För kod som körs i andra sandlådor används säkerhetskontroller.

  • Metoden SoundMixer.stopAll() – Tillåts alltid för kod som körs i samma säkerhetssandlåda som ljudfilen. För filer i andra sandlådor finns det säkerhetskontroller.

  • Egenskapen id3 för klassen Sound – tillåts alltid för SWF-filer som finns i samma säkerhetssandlåda som ljudfilen. För kod som körs i andra sandlådor används säkerhetskontroller.

Varje ljud har två typer av associerade sandlådor; en för innehållet och en för ägaren.

  • Den ursprungliga domänen för ljudet utgör innehållssandlådan och denna avgör om data kan extraheras från ljudet via egenskapen id3 och metoden SoundMixer.computeSpectrum() .

  • Objektet som startade ljuduppspelningen utgör ägarsandlådan och detta avgör om ljudet kan stoppas via metoden SoundMixer.stopAll() .

Om du läser in ljudet med metoden load() i klassen Sound kan du ange parametern context , som är ett SoundLoaderContext-objekt. Om du anger egenskapen checkPolicyFile för SoundLoaderContext-objektet till true söker körningen efter en URL-principfil på den server från vilken ljudet lästes in. Om det finns en principfil som godkänner domänen för den kod som ska läsas in får koden åtkomst till egenskapen id för Sound-objektet, annars får den inte åtkomst. Genom att dessutom ange egenskapen checkPolicyFile kan metoden SoundMixer.computeSpectrum() användas för inlästa ljud.

Du kan använda metoden SoundMixer.areSoundsInaccessible() för att ta reda på om ett anrop till metoden SoundMixer.stopAll() inte kommer att stoppa alla ljud, på grund av att anroparen saknar åtkomst till sandlådan för en eller flera ljudägare.

Genom anrop av metoden SoundMixer.stopAll() stoppas dessa ljud vars ägarsandlåda är densamma som för den som anropar stopAll() . Den stoppar även de ljud vars uppspelning startades med SWF-filer som har anropat metoden Security.allowDomain() för att tillåta åtkomst av domänen med SWF-filen som anropar metoden stopAll() . Några andra ljud stoppas inte och förekomsten av dessa ljud kan upptäckas genom anrop av metoden SoundMixer.areSoundsInaccessible() .

För anrop av metoden computeSpectrum() krävs att alla ljud som spelas upp antingen är från samma sandlåda som anropande objekt av metoden eller från en källa som har tilldelats behörighet till anroparens sandlåda, i annat fall genereras ett SecurityError-undantag. För ljud som lästs in från inbäddade ljud i ett bibliotek i en SWF-fil tilldelas behörighet genom ett anrop till metoden Security.allowDomain() i den inlästa SWF-filen. För ljud som lästs in från andra källor än SWF-filer (MP3-filer eller videofiler) är det en URL-principfil på källservern som beviljar tillgång till data i inlästa medier.

Mer information finns i Författarinställningar (för utvecklare) och Webbplatsinställningar (principfiler) .

För åtkomst till ljuddata från RTMP-strömmar måste du tillåta åtkomst på servern. Använd egenskapen Client.audioSampleAccess för ActionScript på serversidan om du vill tillåta åtkomst till särskilda kataloger på Flash Media Server. Mer information finns i Språkreferens för ActionScript på server .

Komma åt videodata

Du kan använda metoden BitmapData.draw() eller BitmapData.drawWithQuality() för att hämta pixeldata för den aktuella bildrutan i en video. (Metoden drawWithQuality är tillgänglig i Flash Player 11.3 och senare; AIR 3.3 och senare.)

Det finns två typer av video:

  • Direktuppspelad video via RTMP från Flash Media Server

  • Progressiv video, som läses in från en FLV- eller F4V-fil

Om du vill använda draw-metoderna för att extrahera körningsgrafik från RTMP-strömmar måste du tillåta tillgång till servern. Använd egenskapen Client.videoSampleAccess för ActionScript på serversidan om du vill tillåta åtkomst till särskilda kataloger på Flash Media Server. Mer information finns i Språkreferens för ActionScript på server .

När du anropar en draw-metod med progressiv video som source -parameter måste anroparen antingen finnas i samma sandlåda som FLV-filen eller så måste FLV-filens server ha en principfil som ger den anropande SWF-filens domän tillgång till servern. Du kan begära att principfilen ska laddas ned genom att ange egenskapen checkPolicyFile för NetStream-objektet med true .