Stream de Áudio com Flash Communication Server/Flash Media Server.
Introdução
Que tal criar uma radio online usando Flash? sim é possível e simples, com o Flash Communication Server/Flash Media Server. Neste artigo veremos como implementar um sistema para streaming de áudio usando o Flash Communication Server/Flash Media Server.
Pré-Requisitos
Macromedia Flash 8, Flash Communication Server ou Flash Media Server.
Objetivo
Criar streaming de áudio usando o servidor Flash Communication Server ou Flash Media Server(Ainda não foi testado no Red5).
Conceitos
Alguns motivos para usar o FlashCom/Flash Media Server para streaming de musicas:
- Controle de banda: Os desenvolvedores tem ferramentas para controlar e desenvolver de acordo com o limite de banda e a velocidade de conexão do usuario.
- Acesso a ID3 text-based data: O Flash Communication Server da ao desenvolverdor as ferramentas para acessar, reescrever e publicar dados de um stream baseados nas tags ID3.
- Maior controle sobre streaming de dados: Desenvolvedores podem deixar ao ususario a opção de stop, pause, localizar e mover para áreas de interesse do streaming.
- Controle de Script sobre dados de streaming: Os desenvolvedores podem criar um play contínuo baseado em tempo (como em uma estação de rádio), sincronizar movie clips e outros dados para tocar, ou ativar eventos em tempo de streaming de MP3s.
- Streaming para usuário múltiplos: O Flash Communication Server/Flash Media Server pode gravar stream ou em real-time dos usuarios conectados. Os usuários podem escolher se querem receber todos os dados compartilhados ou customizado individualmente em suas seleções.
- Criação de diretórios virtuais: Os desenvolvedores podem criar diretórios virtuais com as Tag <Stream> e traçá-los através da configuração do vHost. Isto permite criar rotas traçadas às arquivos de música fora do servidor. Os desenvolvedores podem também dar aos aplicativos acesso às arquivos MP3 dentro de um diretório virtual específico.
- Níveis de acesso: O framework do Flash Communication Server/Flash Media Server fornece também ao desenvolvedor as ferramentas para fixar as posições dos arquivos MP3 atribuindo aos usuários níveis da acesso. Os desenvolvedores podem bloquear ou reduzir o acesso para usuários.
- Delete em tempo de execução: O desenvolvedor tem a possibilidade de administrar os arquivos deletando em tempo de execução
Conteúdo
Há duas opções para você salvar as musicas, a primeira seria configurar o arquivo “vhost.xml” por exemplo, se seu diretório de musicas for “C:\musicas” na tag streams ficaria o seguinte:
<Streams>music;C:\musicas</Streams>
Outra opção é a que usaremos aqui é fazer uploads no diretório padrão do Flashcom “stream/musicas”
No filme do Flash usaremos um componente “Tree”, um “TextArea” so para acompanhar o status do stream. criados dinamicamente (os componentes devem estar na biblioteca do filme).
Usaremos um arquivo em xml para guardar o nome e o caminho das musicas, no entanto, você pode usar SharedObject Remote, Flash Remontig, bando de dados etc.
Nosso arquivo playlist.xml está assim:
<node>
<node label=”Playlist”>
<node label=”Belinda”>
<node label=”Angel” isBranch=”true” link=”Belinda_Angel” />
<node label=”Be Free” isBranch=”true” link=”Belinda_Befree” />
<node label=”Vivir” isBranch=”true” link=”Belinda_Vivir” />
<node label=”Boba Nina Nice” isBranch=”true” link=”Belinda_Boba_Nina_Nice” />
<node label=”Voy a conquistarte” isBranch=”true” link=”Belinda_Voy_a_Conquistarte” />
<node label=”Muriendo Lento” isBranch=”true” link=”Moderato_y_Belinda_muriendo lento” />
</node>
</node>
</node>
Bem simples, no atributo link deverá ficar o nome do arquivo, não é necessário colocar a extensão mp3.
Faremos o Flash carregar o xml e alimentar o componente “Tree”, quando a musica for selecionada tocara automaticamente, colocaremos mais dois botões no palco, um para “stop” e outro apenas para pausar a musica. Tudo via Action Script, só precisaremos que os componentes que utilizaremos estejam na biblioteca do filme.
Criando os componentes dinamicamente:
var tree = _root.createClassObject(mx.controls.Tree, “tree”, 1, {_x:7, _y:18});
tree.setSize(173, 342);
var status = _root.createClassObject(mx.controls.TextArea, “status”, 2, {_x:7, _y:381});
status.setSize(524, 110);
var bot_stop = _root.createClassObject(mx.controls.Button, “bot_stop”, 3, {_x:270, _y:18, label:”Stop”});
var bot_pause = _root.createClassObject(mx.controls.Button, “bot_pause”, 4, {_x:380, _y:18, label:”Pause”});
Agora verificamos como anda a conexão com servidor FlashCom/Flash Media Server:
var client_nc = new NetConnection();
client_nc.onStatus = function(info) {
trace(“Level: “+info.level+” Code: “+info.code);
status.text += “Level: “+info.level+” Code: “+info.code+”\n”;
};
Vamos carregar o arquivo xml para o Flash e alimentar o componente “Tree”:
var myTreeDP:XML = new XML();
myTreeDP.ignoreWhite = true;
myTreeDP.load(“playlist.xml”);
myTreeDP.onLoad = function() {
tree.dataProvider = this.firstChild;
};
Criando um objeto ouvinte para atuar quando o componente for clicado selecionando a musica e enviando-a para a função doPlay.
var treeListener:Object = new Object();
treeListener.change = function(evt:Object) {
var sel:Object = evt.target.selectedItem.attributes;
doPlay(sel.link);
};
tree.addEventListener(“change”, treeListener);
A função doPlay será responsável pela execução da musica escolhida via stream .
function doPlay(playFileName) {
_root.client_nc.connect(“rtmp:/som_stream”);//considerando localhost
in_ns = new NetStream(_root.client_nc);
_root.in_ns.play(“mp3:”+playFileName);
_root.in_ns.onStatus = function(info) {
trace(info.level);
trace(info.code);
status.text += info.level+”\n”+info.code;
status.vPosition = status.maxVPosition;
};
}
No método “play” colocaremos o atributo fixo (“mp3:”) para assegurar que o servidor toque somente a musica no formato mp3.Agora colocaremos os eventos no botões para pausar, continuar e dar um stop na musica
bot_stop.onRelease = function() {
_root.in_ns.play(false);
};
bot_pause.onRelease = function() {
if (bot_pause.label == “Pause”) {
bot_pause.label = “Play”;
_root.in_ns.pause();
} else if (bot_pause.label == “Play”) {
bot_pause.label = “Pause”;
_root.in_ns.pause();
}
};
Segue o código completo:
var tree = _root.createClassObject(mx.controls.Tree, “tree”, 1, {_x:7, _y:18});
tree.setSize(173, 342);
var status = _root.createClassObject(mx.controls.TextArea, “status”, 2, {_x:7, _y:381});
status.setSize(524, 110);
var bot_stop = _root.createClassObject(mx.controls.Button, “bot_stop”, 3, {_x:270, _y:18, label:”Stop”});
var bot_pause = _root.createClassObject(mx.controls.Button, “bot_pause”, 4, {_x:380, _y:18, label:”Pause”});
var client_nc = new NetConnection();
client_nc.onStatus = function(info) {
trace(“Level: “+info.level+” Code: “+info.code);
status.text += “Level: “+info.level+” Code: “+info.code+”\n”;
};
var myTreeDP:XML = new XML();
myTreeDP.ignoreWhite = true;
myTreeDP.load(“playlist.xml”);
myTreeDP.onLoad = function() {
tree.dataProvider = this.firstChild;
};
var treeListener:Object = new Object();
treeListener.change = function(evt:Object) {
var sel:Object = evt.target.selectedItem.attributes;
doPlay(sel.link);
};
tree.addEventListener(“change”, treeListener);
function doPlay(playFileName) {
_root.client_nc.connect(“rtmp:/som_stream”);//considerando localhost
in_ns = new NetStream(_root.client_nc);
_root.in_ns.play(“mp3:”+playFileName);
_root.in_ns.onStatus = function(info) {
trace(info.level);
trace(info.code);
status.text += info.level+”\n”+info.code;
status.vPosition = status.maxVPosition;
};
}
bot_stop.onRelease = function() {
_root.in_ns.play(false);
};
bot_pause.onRelease = function() {
if (bot_pause.label == “Pause”) {
bot_pause.label = “Play”;
_root.in_ns.pause();
} else if (bot_pause.label == “Play”) {
bot_pause.label = “Pause”;
_root.in_ns.pause();
}
};
Dê ctrl+enter para testar a aplicação
Veja a aplicaçao em funcionamento
Considerações Finais
Simples e fácil criar stream de áudio usando o Flash Communication Server/Flash Media Server, agora a imaginação é o limite para possivel aplicações.
Para saber mais:
Meu Blog FCS/FMS
http://www.dotpix.com.br/~leo/?cat=11
Flash Media Server Developer Center
http://www.macromedia.com/devnet/flashmediaserver/
FlashComGuru
http://www.flashcomguru.com/
FlashCom.com.br
http://www.flashcom.com.br/
Flash Media Server Fun
http://www.fczone.com/
Autor: Leonardo França – Colunista R.I.A do Portal MXSTUDIO
Qualquer dúvida envie um email para leo@dotpix.com.br ou acesse o nosso fórum e visitem meu BLOG |
como configurar o Stream flash media server eu tenho uma radio com encoder media 9 e funciona normal quero transmitir com o flash nao funciona o server eu coloco o mesmo endereço que funciona media 9 nao aceita http://192.168.1.100:1180 é o que uso ddns ( http://tvcristoreina.ddns.com.br:1180
Cara adorei o seu site muito bom mesmo.
Estou com um progeto para criar uma web radio porem estou com dificuldades de executar um programa chamado audioqi, se vc entrar no site do vibehitz.com.br vaiter uma ideia. não queria usar o meda player nem o winamp como tocador e sim o audioqi.
Me de uma luz por favor. Valeu
kero cria minha radio