Acceso a medios cargados como datosFlash Player 9 y posterior, Adobe AIR 1.0 y posterior Para acceder a datos de carga, utilice los métodos BitmapData.draw() y SoundMixer.computeSpectrum(). De forma predeterminada, no se pueden obtener datos de píxeles o datos de audio en objetos gráficos o de audio procesados o reproducidos por medios cargados en un entorno limitado diferente. No obstante, se pueden utilizar los métodos siguientes para otorgar permiso para acceder a dichos datos en los límites del entorno limitado:
En las siguientes secciones se proporcionan detalles sobre el acceso a datos de mapa de bits, sonido y vídeo. Acceso a datos de mapa de bitsEl método draw() de un objeto BitmapData permite dibujar en el objeto BitmapData los píxeles de cualquier objeto de visualización que se están mostrando. Podrían ser los píxeles de un objeto MovieClip, un objeto Bitmap o cualquier objeto de visualización. Para que el método draw() dibuje píxeles en el objeto BitmapData, deben cumplirse las siguientes condiciones:
Si no se cumplen estas condiciones, se emite una excepción SecurityError. Cuando se carga una imagen mediante el método load() de la clase Loader, se puede especificar un parámetro context, que es un objeto LoaderContext. Si se establece la propiedad checkPolicyFile del objeto LoaderContext en true, Flash Player comprueba si hay un archivo de política entre dominios en el servidor desde el cual se carga la imagen. Si hay un archivo de política y éste admite el dominio del archivo SWF que realiza la carga, el archivo podrá acceder a los datos del objeto Bitmap; en caso contrario, se denegará el acceso. También se puede especificar una propiedad checkPolicyFile en una imagen cargada a través de una etiqueta <img> en un campo de texto. Para obtener información más detallada, consulte Carga de archivos SWF e imágenes mediante la etiqueta <img> de un campo de texto. Acceso a datos de sonidoLas siguientes API de ActionScript 3.0 relacionadas con el sonido tienen restricciones de seguridad:
Cada sonido tiene dos tipos de entornos limitados asociados, que son un entorno limitado de contenido y un entorno limitado de propietario:
Cuando se carga el sonido mediante el método load() de la clase Sound, se puede especificar un parámetro context, que es un objeto SoundLoaderContext. Si establece la propiedad checkPolicyFile del objeto SoundLoaderContext como true, el motor de ejecución comprobará la existencia de un archivo de política URL en el servidor desde el que se carga el sonido. Si hay un archivo de política y éste admite el dominio del código que realiza la carga, el código podrá acceder a la propiedad id del objeto Sound; en caso contrario, no será posible. Además, si se establece un valor de la propiedad checkPolicyFile, se puede activar el método SoundMixer.computeSpectrum() para sonidos cargados. Se puede utilizar el método SoundMixer.areSoundsInaccessible() para saber si una llamada al método SoundMixer.stopAll() no va a detener todos los sonidos porque el que realiza la llamada no puede acceder al entorno limitado de uno o varios propietarios de sonidos. Llamar al método SoundMixer.stopAll() permite detener estos sonidos cuyo entorno limitado de propietario es el mismo que el que realiza la llamada a stopAll(). También detiene los sonidos que han empezado a reproducirse porque unos archivos SWF realizaron una llamada al método Security.allowDomain() para permitir el acceso por parte del dominio del archivo SWF que realiza la llamada al método stopAll(). Los demás sonidos no se detienen y su presencia puede revelarse mediante una llamada al método SoundMixer.areSoundsInaccessible(). Para llamar al método computeSpectrum(), es necesario que cada sonido que se esté reproduciendo se encuentre en el mismo entorno limitado que el objeto que realiza la llamada al método o que proceda de un origen que haya concedido permiso al entorno limitado del que realiza la llamada; en caso contrario, se emite una excepción SecurityError. En el caso de los sonidos cargados desde sonidos incorporados en una biblioteca de un archivo SWF, el permiso se concede a través de una llamada al método Security.allowDomain() en el archivo SWF cargado. En el caso de los sonidos que no proceden de archivos SWF (procedentes de archivos MP3 cargados o archivos de vídeo) un archivo de política URL en el servidor de origen concede acceso a los datos de los medios cargados. Para obtener más información, consulte Controles de autor (desarrollador) y Controles de sitio web (archivos de política). Para acceder a datos de sonido desde flujos RTMP, debe permitir el acceso en el servidor. Utilice la propiedad Client.audioSampleAccess de ActionScript de servidor para permitir acceso a directorios específicos de Flash Media Server. Para obtener más información, consulte la referencia del lenguaje ActionScript de Flash Media Server. Acceso a datos de vídeoSe puede utilizar el método BitmapData.draw() para capturar los datos de píxeles del fotograma actual de un vídeo. Hay dos tipos distintos de vídeo:
Para utilizar el método BitmapData.draw() y extraer gráficos de flujos RTMP en tiempo de ejecución, debe permitir el acceso en el servidor. Utilice la propiedad Client.videoSampleAccess de ActionScript de servidor para permitir el acceso a directorios específicos de Flash Media Server. Para obtener más información, consulte la referencia del lenguaje ActionScript de Flash Media Server. Cuando se llama al método BitmapData.draw() con vídeo progresivo como valor del parámetro source, el que realiza la llamada a BitmapData.draw() debe encontrarse en el mismo entorno limitado que el archivo FLV, o el servidor del archivo FLV debe tener un archivo de política que conceda permiso al dominio del archivo SWF que realiza la llamada. Para solicitar la descarga del archivo de política, debe establecerse la propiedad checkPolicyFile del objeto NetStream en true. |
|