ontreus 0 Denunciar post Postado Julho 17, 2012 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
ontreus 0 Denunciar post Postado Julho 22, 2012 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
ontreus 0 Denunciar post Postado Julho 24, 2012 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