Acesso à mídia carregada como dados

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

Para acessar dados de carregamento use os métodos BitmapData.draw() , BitmapData.drawWithQuality() e SoundMixer.computeSpectrum() . Por padrão, não é possível obter dados de pixel ou dados de áudio a partir de objetos gráficos ou de áudio renderizados ou reproduzidos por mídia carregada em uma área de segurança diferente. No entanto, é possível utilizar os métodos a seguir para conceder permissões para acessar estes dados nos limites de áreas de segurança:

  • No conteúdo renderizado ou que está reproduzindo os dados, crie uma chamada para o método Security.allowDomain() para conceder acesso de dados ao conteúdo em outros domínios.

  • Para uma imagem, som ou vídeo carregado, adicione um arquivo de política de URL no servidor do arquivo carregado. Esse arquivo de política deve conceder acesso ao domínio do arquivo SWF que está tentando chamar os métodos BitmapData.draw() , BitmapData.drawWithQuality() ou SoundMixer.computeSpectrum() para extrair dados do arquivo. O método drawWithQuality está disponível no Flash Player 11.3 e superior; AIR 3.3 e superior.

As seções a seguir fornecem detalhes sobre o acesso a dados de bitmap, som e vídeo.

Acesso a dados de bitmap

Os métodos draw() e drawWithQuality() (Flash Player 11.3; AIR 3.3) de um objeto BitmapData permite que você desenhe os pixels exibidos no momento de qualquer objeto de exibição no BitmapData. Isso pode incluir os pixels de um objeto MovieClip, de um objeto Bitmap ou de qualquer objeto de exibição. As condições a seguir devem ser atendidas para que esses métodos desenhem pixels no objeto BitmapData:

  • No caso de um objeto de origem diferente de um bitmap carregado, o objeto de origem e (no caso de um objeto Sprite ou MovieClip) todos os seus objetos filho devem vir do mesmo domínio que o objeto que está chamando o método draw(), ou devem estar em um arquivo SWF que possa ser acessado pelo chamador fazendo com que o método Security.allowDomain() seja chamado.

  • No caso de um objeto de origem de bitmap Loaded, o objeto de origem deve vir do mesmo domínio que o objeto que está chamando o método draw(), ou seu servidor de origem deve incluir um arquivo de política de URL que conceda permissão ao domínio que está fazendo a chamada.

Se essas condições não forem atendidas, uma exceção SecurityError será lançada.

Ao carregar a imagem usando o método load() da classe Loader, você pode especificar um parâmetro context que é um objeto SoundLoaderContext. Se você definir a propriedade checkPolicyFile do objeto LoaderContext como true , o Flash Player verificará se há um arquivo de política de URL no servidor do qual a imagem é carregada. Se houver um arquivo de política e o arquivo permitir que o domínio do arquivo SWF que está sendo carregado, o arquivo terá permissão para acessar os dados no objeto Bitmap. Caso contrário, o acesso será negado.

Também é possível especificar uma propriedade checkPolicyFile em uma imagem carregada por meio de uma tag <img> em um campo de texto. Para obter detalhes, consulte Carregamento de arquivos SWF e de imagens usando a tag <img> em um campo de texto

Acesso a dados de som

As seguintes APIs do ActionScript 3.0 relacionadas a som têm restrições de segurança:

  • O método SoundMixer.computeSpectrum() — sempre permitido para arquivos SWF que estão na mesma área de proteção de segurança que o arquivo de som. Existem verificações de segurança para o código executado em outras áreas de segurança.

  • O método SoundMixer.computeSpectrum() — sempre permitido para código sendo executado na mesma área de segurança que o arquivo de som. Para arquivos em outras caixas de proteção, há verificações de segurança.

  • A propriedade id3 da classe Sound — sempre permitida para arquivos SWF que estão na mesma caixa de proteção de segurança que o arquivo de som. Existem verificações de segurança para o código executado em outras áreas de segurança.

Todo evento tem dois tipos de caixas de proteção associadas a ele, uma caixa de proteção de conteúdo e uma caixa de proteção do proprietário:

  • O domínio de origem do som determina a caixa de proteção de conteúdo e isso determina se os dados podem ser extraídos do som por meio da propriedade id3 do som e do método SoundMixer.computeSpectrum() .

  • O objeto que iniciou a reprodução do som determina a caixa de proteção do proprietário e isso determina se o som pode ser parado usando o método SoundMixer.stopAll() .

Ao carregar o som usando o método load() da classe Sound, você pode especificar um parâmetro context que é um objeto SoundLoaderContext. Se você definir a propriedade checkPolicyFile do objeto SoundLoaderContext como true , o Flash Player verificará se há um arquivo de política de URL no servidor do qual o som é carregado. Se houver um arquivo de política e o arquivo permitir o domínio do código que está sendo carregado, o código receberá permissão para acessar a propriedade id do objeto Sound. Caso contrário, não terá essa permissão. Além disso, a configuração da propriedade checkPolicyFile pode ativar o método SoundMixer.computeSpectrum() para sons carregados.

É possível usar o método SoundMixer.areSoundsInaccessible() para descobrir se uma chamada para o método SoundMixer.stopAll() não parará todos os sons porque a caixa de proteção de um ou mais proprietários de som está inacessível para o chamador.

A chamada do método SoundMixer.stopAll() para esses sons cuja caixa de proteção de proprietário é a mesma que a do chamador de stopAll() . Ela também para aqueles sons cuja reprodução foi iniciada por arquivos SWF que chamaram o método Security.allowDomain() para permitir acesso pelo domínio do arquivo SWF que está chamando o método stopAll() . Qualquer outro som não é parado e a presença desses sons pode ser revelada chamando o método SoundMixer.areSoundsInaccessible() .

A chamada do método computeSpectrum() requer que todo som que esteja sendo reproduzido seja da mesma caixa de proteção que o objeto que está chamando o método ou de uma origem que recebeu permissão para a caixa de proteção do chamador. Caso contrário, uma exceção SecurityError é lançada. Para sons que foram carregados de sons incorporados em uma biblioteca em um arquivo SWF, a permissão será concedida com uma chamada para o método Security.allowDomain() no arquivo SWF carregado. Para sons carregados de origens que não sejam arquivos SWF (originários de arquivos mp3 carregados ou de arquivos de vídeo), um arquivo de política de URL no servidor de origem concede acesso a dados contidos na mídia carregada.

Para obter mais informações, consulte Controles de autor (desenvolvedor) e Controles de site (arquivos de política) .

Para acessar dados de som a partir de fluxos RTMP, é necessário conceder acesso no servidor. Utilize a propriedade ActionScript de lado do servidor Client.audioSampleAccess para permitir acesso a diretórios específicos no Flash Media Server. Para obter mais informações, consulte a Referência de linguagem do ActionScript de lado do servidor .

Acesso a dados de vídeo

Você pode usar o método BitmapData.draw() ou BitmapData.drawWithQuality() para capturar os dados de pixel o quadro atual de um vídeo. (O método drawWithQuality está disponível no Flash Player 11.3 e superior; AIR 3.3 e superior.)

Há dois tipos diferentes de vídeo:

  • Vídeo transmitido por meio de RTMP a partir do Flash Media Server

  • Vídeo progressivo, carregado a partir de um arquivo FLV ou F4V

Para usar métodos de desenho e extrair gráficos de tempo de execução de fluxos RTMP, você deve permitir o acesso no servidor. Utilize a propriedade ActionScript de lado do servidor Client.videoSampleAccess para permitir acesso a diretórios específicos no Flash Media Server. Para obter mais informações, consulte a Referência de linguagem do ActionScript de lado do servidor .

Ao chamar um método de desenho com vídeo progressivo como parâmetro de origem , o chamador do método deve ser da mesma segurança que o arquivo FLV ou o servidor do arquivo FLV deve ter um arquivo de política que concede permissão ao domínio do arquivo chamador SWF. É possível solicitar que o arquivo de política seja baixado configurando a propriedade checkPolicyFile do objeto NetStream como true .