Accesso a file multimediali caricati come dati

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Per accedere ai dati caricati utilizzate i metodi BitmapData.draw() , BitmapData.drawWithQuality() e SoundMixer.computeSpectrum() . Per impostazione predefinita, non potete ottenere dati pixel o audio da oggetti grafici o audio di cui è stato eseguito il rendering o che sono stati riprodotti da file multimediali di un'altra sandbox. Tuttavia, potete utilizzare i metodi seguenti per concedere l'accesso a tali dati tramite i limiti sandbox:

  • Nel rendering del contenuto o la riproduzione dei dati da accedere, chiamate il metodo Security.allowDomain() per concedere l'acceso da parte di contenuto di altri domini.

  • Per immagini, audio o video caricati, aggiungete un file di criteri degli URL nel server del file caricato. Tale file di criteri concede l'accesso al dominio del file SWF che tenta di chiamare i metodi BitmapData.draw() , BitmapData.drawWithQuality() , o SoundMixer.computeSpectrum() per estrarre dati dal file. Il metodo drawWithQuality è disponibile in Flash Player 11.3 e versioni successive e in AIR 3.3 e versioni successive.

Nelle sezioni seguenti sono contenute maggiori informazioni sull'accesso a dati bitmap, audio e video.

Accesso ai dati bitmap

I metodi draw() e drawWithQuality() (Flash Player 11.3; AIR 3.3) di un oggetto BitmapData consentono di disegnare i pixel visualizzati di un qualsiasi oggetto di visualizzazione sull'oggetto BitmapData. Sono inclusi i pixel di oggetti MovieClip, Bitmap e di qualsiasi oggetto di visualizzazione. Perché questi metodi siano in grado di disegnare pixel sull'oggetto BitmapData, è necessario che siano soddisfatte le seguenti condizioni:

  • Nel caso di un oggetto di origine diverso da una bitmap caricata, l'oggetto di origine e (nel caso di un oggetto Sprite o MovieClip) tutti i suoi oggetti secondari devono provenire dallo stesso dominio dell'oggetto che chiama il metodo draw() o devono trovarsi in un file SWF accessibile al chiamante del metodo Security.allowDomain() .

  • Nel caso di un oggetto di origine bitmap caricata, l'oggetto di origine deve provenire dallo stesso dominio dell'oggetto che chiama il metodo draw() oppure il suo server di origine deve contenere un file di criteri degli URL che conceda l'autorizzazione al dominio del chiamante.

Se queste condizioni non vengono soddisfatte, viene generata un'eccezione SecurityError.

Quando caricate l'immagine mediante il metodo load() della classe Loader, potete specificare un parametro context , che è un oggetto LoaderContext. Se impostate la proprietà checkPolicyFile dell'oggetto LoaderContext su true , Flash Player verifica la presenza di un file di criteri degli URL sul server da cui viene caricata l'immagine. Se esiste un file di criteri degli URL che consente l'accesso al dominio del file SWF da caricare, il file può accedere ai dati dell'oggetto Bitmap; in caso contrario, non vi può accedere.

Potete anche specificare una proprietà checkPolicyFile in un'immagine caricata mediante il tag <img> inserito in un campo di testo. Per ulteriori informazioni, vedete Caricamento di file SWF e di immagini mediante il tag <img> in un campo di testo .

Accesso a dati audio

Le seguenti API relative all'audio di ActionScript 3.0 presentano le seguenti limitazioni di sicurezza:

  • Il metodo SoundMixer.computeSpectrum() è sempre consentito per il codice in esecuzione nella stessa sandbox di sicurezza del file audio. Per il codice in esecuzione in altre sandbox esistono invece dei controlli di sicurezza.

  • Il metodo SoundMixer.stopAll() è sempre consentito per il codice in esecuzione nella stessa sandbox di sicurezza del file audio. Per i file di altre sandbox esistono invece dei controlli di sicurezza.

  • La proprietà id3 della classe Sound è sempre consentita per i file SWF che si trovano nella stessa sandbox del file audio. Per il codice in esecuzione in altre sandbox esistono invece dei controlli di sicurezza.

Ogni file audio presenta due tipi di sandbox associate, una per il contenuto e una per il titolare:

  • Il dominio di origine del file audio determina la sandbox del contenuto, che, a sua volta, determina se i dati audio possono essere estratti mediante la proprietà id3 e il metodo SoundMixer.computeSpectrum() .

  • L'oggetto che avvia la riproduzione audio determina la sandbox del titolare, che, a sua volta, determina se la riproduzione del file audio può essere interrotta mediante il metodo SoundMixer.stopAll() .

Quando caricate l'audio mediante il metodo load() della classe Sound, potete specificare un parametro context , che è un oggetto SoundLoaderContext. Se impostate la proprietà checkPolicyFile dell'oggetto SoundLoaderContext su true , il runtime verifica la presenza di un file di criteri degli URL sul server da cui viene caricato l'audio. Se esiste un file di criteri degli URL che consente l'accesso al dominio del codice che carica, il codice può accedere alla proprietà id dell'oggetto Sound; in caso contrario, non vi può accedere. Inoltre, l'impostazione della proprietà checkPolicyFile può attivare il metodo SoundMixer.computeSpectrum() per i file audio caricati.

Potete utilizzare il metodo SoundMixer.areSoundsInaccessible() per sapere se una chiamata al metodo SoundMixer.stopAll() non consente l'interruzione della riproduzione audio perché la sandbox di uno o più titolari non è accessibile al chiamante.

Mediante la chiamata al metodo SoundMixer.stopAll() viene interrotta la riproduzione dei file audio la cui sandbox del titolare corrisponde a quella del chiamate di stopAll() . Tale metodo consente inoltre di interrompere la riproduzione audio avviata da file SWF che hanno chiamato il metodo Security.allowDomain() per consentire l'accesso da parte del dominio del file SWF che chiama il metodo stopAll() . Tutte le altre riproduzioni audio non vengono interrotte e la presenza di tali file audio può essere rilevata chiamando il metodo SoundMixer.areSoundsInaccessible() .

Se si chiama il metodo computeSpectrum() , tutti i file audio in riproduzione devono appartenere alla stessa sandbox dell'oggetto che chiama il metodo oppure provenire da un'origine che ha acquisito l'autorizzazione di accesso alla sandbox del chiamante; in caso contrario, viene generata un'eccezione SecurityError. Per file audio caricati da audio incorporati in una libreria di un file SWF, l'autorizzazione viene concessa mediante chiamata al metodo Security.allowDomain() nel file SWF caricato. Per file audio caricati da fonti diverse dai file SWF (originati da file mp3 caricati o da file video), è necessario un file di criteri degli URL che conceda l'autorizzazione di accesso ai dati del file multimediale caricato.

Per ulteriori informazioni, vedete Controlli autore (sviluppatore) e Controlli del sito Web (file di criteri) .

Per accedere ai dati audio da flussi RTMP, dovete concedere l'accesso al server. Utilizzate la proprietà Client.audioSampleAccess ActionScript lato server per consentire l'accesso a directory specifiche su Flash Media Server. Per ulteriori informazioni, vedete la Guida di riferimento di ActionScript lato server .

Accesso a dati video

È possibile utilizzare il metodo BitmapData.draw() o BitmapData.drawWithQuality() per catturare i dati pixel del fotogramma corrente di un video. Il metodo drawWithQuality è disponibile in Flash Player 11.3 e versioni successive e in AIR 3.3 e versioni successive.

Esistono due diversi tipi di video:

  • Video eseguiti in streaming su RTMP da Flash Media Server

  • Video progressivi, caricati da un file FLV o F4V

Per utilizzare i metodi draw per estrarre la grafica in fase di runtime da flussi RTMP, dovete consentire l'accesso sul server. Utilizzate la proprietà Client.videoSampleAccess ActionScript lato server per consentire l'accesso a directory specifiche su Flash Media Server. Per ulteriori informazioni, vedete la Guida di riferimento di ActionScript lato server .

Quando chiamate un metodo draw con video progressivo come il parametro source , il chiamante di BitmapData.draw() deve appartenere alla stessa sandbox del file FLV oppure il server del file FLV deve contenere un file di criteri che conceda l'autorizzazione di accesso al dominio del file SWF chiamante. Potete richiedere che il file dei criteri venga scaricato impostando la proprietà checkPolicyFile dell'oggetto NetStream su true .