Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ontreus

Problema Streaming Radio AS3

Recommended Posts

Olá senhores, estou com um problema em um codigo para receber um streaming de audio de uma radio online

O link da radio é este: "http://70.36.96.82:9842/" é transmitido em formato MP3

O Fla do codigo esta nesse link:http://vxbrasil.com/radioFUNC.rar

O Swf no meu PC quando compilado, após clicar em play, recebe o streaming de audio e toca o audio, mas ao fechar a janela, mostra a seguinte mensagem de erro:

 

"SecurityError: Error #2000: Não há contexto de segurança ativo."

 

Este mesmo swf no servidor do meu site não toca a musica.esta no link:http://vxbrasil.com/radioFUNC.swf

 

Observação: Possuo outro player feito em AS2 que recebe o streaming de musica e toca normalmente o som, mas meu site é todo em AS3 , preciso de um player em AS3.

 

Agradeço qq ajuda a este problema estranho.

 

 

O Código é este:

 

var sc:SoundChannel = new SoundChannel();

var s:Sound = new Sound();

s.load(new URLRequest("http://70.36.96.82:9842/"));

 

btn_play.addEventListener(MouseEvent.CLICK,playSound);

btn_stop.addEventListener(MouseEvent.CLICK,stopSound);

 

function playSound(e:MouseEvent):void

{

sc = s.play();

}

function stopSound(e:MouseEvent):void

{

sc.stop();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A quem interessar!

levei uns 10 dias pra encontrar uma solução meia boca!

Parece-me q esse erro eh um bug da versão AS3, pois na versão AS2 não acontece

Há um post no site da ADOBE sobre isso, q esta no link:

 

https://bugs.adobe.com/jira/browse/FP-173

obs:Tem q se cadastrar pra ter acesso.

 

Bem no meu codigo ele tocava localmente, mas quando enviava para o servidor, nada de som

 

A solução q encontrei é acrescentar após a URL do streaming o seguinte termo "/;stream.mp3" ou "/;stream.nsv".

Bem na minha radio eu tenho possibilidade em transmitir dados de audio no formato AAC e MP3, então eu acredito q o termo stream.mp3, no caso da minha radio, é o ideal e deve preparar o codigo do AS3 para ler e tocar os dados de audio.

 

Então a correção do codigo q citei como exemplo anteriormente ficaria dessa forma:

 

var sc:SoundChannel = new SoundChannel();

var s:Sound = new Sound();

s.load(new URLRequest("http://70.36.96.82:9842/;stream.mp3"));//<--Unica linha mudada

 

btn_play.addEventListener(MouseEvent.CLICK,playSound);

btn_stop.addEventListener(MouseEvent.CLICK,stopSound);

 

function playSound(e:MouseEvent):void

{

sc = s.play();

}

function stopSound(e:MouseEvent):void

{

sc.stop();

}

 

bem esse codigo ai eh bem basico algo um pouco melhor seria você criar dois botões com o nome das instancias de btn_play e btn_stop

 

e com seginte codigo em uma label action:

 

var sc1:SoundChannel = new SoundChannel();

var s:Sound = new Sound();

Security.allowDomain("*");

Security.allowDomain("http://70.36.96.82:9842/;stream.nsv");

var A:* = new SoundLoaderContext(10000, true);

s.load(new URLRequest("http://70.36.96.82:9842/;stream.nsv"),A);

 

 

//=======================

 

btn_play.addEventListener(MouseEvent.CLICK,playSound);

btn_stop.addEventListener(MouseEvent.CLICK,stopSound);

 

function playSound(e:MouseEvent):void

{

sc1 = s.play();

btn_play.removeEventListener(MouseEvent.CLICK,playSound);

btn_stop.addEventListener(MouseEvent.CLICK,stopSound);

}

function stopSound(e:MouseEvent):void

{

sc1.stop();

btn_stop.removeEventListener(MouseEvent.CLICK,stopSound);

btn_play.addEventListener(MouseEvent.CLICK,playSound);

}

 

A linha Security.allowDomain("*");

eu encontrei em alguns codigos q quebrei usando SWF Decompiler

 

Estou agora tentando ler as informações do nome da musica e do artista do metadados q o streaming envia

Parece-me q tem q fazer um arq php fazer a leitura e depois o flash faz a captura desses valores

 

Estou aberto a ajuda sobre isso e tb se necessario ajudar.

Obrigado! ontreus@msn.com ou ontreus@ig.com.br

site www.vxbrasil.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola a todos novamente.

Descobri porque devemos usar o /;stream.mp3 DEPOIS DA URL do streaming da radio.

Se não fzer isso o audio do streaming da radio do tipo Shoutcast não funcionará!

O Flash na verdade é enganado com o ponto e virgula e lê o stream.mp3 como se fosse um mp3 Infinito.

Descobri isso nesse link:

http://www.flexiblefactory.co.uk/flexible/?p=51]

Esta em ingles, mas usando o tradutor do google, da pra entender legal.

 

Bem, a prova disso q chamo de GAMBIARRA FUNCIONAL, se você for fazer um teste com o link da minha radio em seu webrowser colocando diretamente nesta forma:

 

"h t t p:// 70 . 36. 96 . 82 : 9842/ ; stream . mp3"

Obs:sem as aspas e espaços

 

Você irá receber um cabeçalho com um fluxo continuo de dados, que na verdade é o audio da musica em formato de caracteres diversos, conforme mostra o que segue:

 

ICY 200 OK

icy-notice1:<BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>

icy-notice2:SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR>

icy-name:vxbrasil mix

icy-genre:Dubstep

icy-url:;stream.mp3

content-type:audio/mpeg

icy-pub:1

icy-br:64

 

,‡ÇQ¢KYƒæHŠMX«Ü~DD”šŒûk²Ò,¤VíœRÒÑI˜yªÆ%~§O2[ÓÅAF¢qOàâ´žM«Å—Û‚$ÞÃ=—/‰±­RVí ØoýdA98‚÷^êÿó€p¶FrËhilàZäÈ(n6žãå28ÿ

ÙÔßákÝÌñ¥­•l¹Ïsfzÿ]üÏñÔ]õ÷ÿÿ?Q[ÿw“ÞÍ|ÄÅT²ÄW_ó1¼$Š$Üvâaê‡K®5)ÔºÚIÓÒ¸ýFÝS“*l° žIaèXXD…z¡£C²Æ=[.®¡¦ïú¿Öjb¹}æõŠ·©ŽçÇ›s—ðÊ’T?ýKeìÑR^Ë_=K¹Ÿ§ÿSÙ‰­Ú`ãXŸ ÷_£J‰¬?cWEdVÿó€p¿¡õvˬ ŒxVáYB­‘%¦ª}úG#€

™/ÙC&ÃBç¾ðp(äõsÜY%–å¢ ?\#¦kAè5*%ºW©EY ª• ........ CONTINUA INDEFINIDAMENTE

 

Outro detalhe importante, o Flash não le os Metadados do fluxo de audio

Pra você obter o nome da musica que esta tocando e das que tocaram com seu respectivo tempo, você tera q por meio do php retirara a informação q esta no link padrão de todo o serviço shoutcast q se chama */played html

 

Acessando a URL + /played.html você acessara a SHOUTcast Song History, que você pode ver no link de minha radio:

http://70.36.96.82:9842/played.html

 

Com isso você deve criar um arq em php para retirar as informações e jogar num arq xml, pra depois o flash fazer a leitura e jogar os dados no player.

 

Ja fiz isso uma vez em um malware para MSN em delphi para capturar a lista de contatos usando sendkey e depois filtrar so os endereços de e-mail, acredito q siga o mesmo principio pois o php vai ler o HTML q eh cehio de tag e pro flash isso não interessa, o php pode fazer bem mais facil rapido essa filtragem

 

Equalizador em Tempo Real com Streaming

-------------------------------------------

Ainda não consegui uma solução, pois o Equalizador Grafico q uso funciona localmente mas não funciona quando mando pro meu servidor de hospedagem o link dele é o que segue:

 

h t t p :/ /vxbrasil.com/ radio_equalize . swf

Obs: Sem os espaços

 

Pelo pouco q pesquisei, acredito q tenha haver com a politica de segurança da Adobe que gera a mensagem:

 

SecurityError: Error #2000: Não há contexto de segurança ativo.

 

Então o que achei é que um SWF para acessar dados externos a seu compartimento ou seja os dados de minha radio q fica em outro servidor eu teria q autorizar um SWF a acesar os dados por meio de uma politica de segurança q é concretizado por um arquivo de nome:

 

crossdomain.xml

 

esse arquivo tem q ficar na raiz do servidor em q o SWF vai acessar

Nesse caso esse arquivo tem q ficar na minha radio

Coloquei la mas não DEU CERTO

 

O arquivo q escrevi no crossdomain.xml é o que segue:

 

<!DOCTYPE cross-domain-policy SYSTEM

 

"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>

<site-control permitted-cross-domain-policies="all"/>

<allow-access-from domain="*"/>

<allow-http-request-headers-from domain="*" headers="*"/>

</cross-domain-policy>

 

 

Mas não tenho certeza se é isso, pois as versões do AS3 possuem os metodos:

 

Security.allowInsecureDomain("*");

Security.allowDomain("http://70.36.96.82:9842/;stream.mp3");

Security.allowInsecureDomain("*");

 

Que deveria elimiar esse erro de segurança, mas não fez nenhuma diferença, continua a mesma coisa

 

Estou aberto a sugestões

 

Pra quem quiser da uma olhada no codigo esta disponivel no link:

 

www.vxbrasil.com/radio_equalize.fla

 

O que ira fazer o equalizador funcionar é alinha aonde esta:

 

SoundMixer.computeSpectrum(sndBytes,true,0);

 

Mas um detalhe o metodo computerSpectrum so ira funcionar se o SWF tiver autorização de processar os dados externos, se vcs mudarem o link da minha radio por um arquivo mp3 ele ira funcionar

 

Obs: Pra compilar esse arquivo você ira precisar das pastas org e com do papervision3d, caso você não tenha basta baixar do meu site no link:

 

www.vxbrasil.com/com_org_radio.rar

 

e descompactar no mesmo local do arquivo radio_equalize.swf

 

Uma possivel explicação encontrei no link da Adobe:

 

http://help.adobe.com/pt_BR/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d1b.html

 

Onde diz em uma parte:

 

"...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. Você não poderá usar o método computeSpectrum() se um som for carregado de fluxos RTMP.

 

Resumindo não chega bytes de dados nas linhas onde tem o codigo:

 

myCube.scaleY = sndBytes.readFloat();

 

...

 

myCube.scaleY = sndBytes.readFloat();

 

são essas linhas q produzem o aumento dos cubos

 

o sndBytes é criado na linha:

 

var sndBytes:ByteArray = new ByteArray();

 

que é um objeto que le a entra de dados

 

Bem não sei ainda o q fazer, esperoq alguem leia e ja tenha deparado com esse tipo de problema ou tenha um codigo funcional q possa me ceder

 

Agradeço qq ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.