Criando uma playlist com Flash Communication Server/Flash Media Server.IntroduçãoVimos no artigo anterior como gravar stream usando o Flash Communication Server/Flash Media Server, agora vamos implementar uma playlist para esse recurso. Cada vídeo que gravarmos será adicionado a playlist para posterior disponibização. Pré-RequisitosMacromedia Flash 8, Flash Communication Server ou Flash Media Server. ObjetivoCriar uma playlist usando o servidor Flash Communication Server ou Flash Media Server(Ainda não foi testado no Red5). ConceitosPara isto usaremos o SharedObject Remote para guardar as informações dos vídeos gravados. SharedObjects oferece compartilhamento de informação em tempo real entre multiplos clientes SWF’s podendo ser persistentes na maquina local ou no servidor remoto. O local Shared object seria como “Cookies” e o SharedObject Remote como transferência de dados em tempo-real. ConteúdoAbra um documeno novo no Flash, vamos criar dois movies clips do tipo video, para adicionar um objeto video na sua library, abra o painel library (windom Video object to your library, open the Library panel (Window > Library ou Ctrl+L ou F11) a adicione um embedded Video object selecionando New Video nas opções da library. Primeiro conectanto ao servidor Flashcom/Flash Media Server:
client_nc = new NetConnection();
client_nc.onStatus = function(info) { trace(“Level: “+info.level+” Code: “+info.code); }; client_nc.connect(“rtmp:/playlist”);//considerando localhost Recuperando os dados do Shared Object Remote, e preenchendo o component “List” usando o método onSync, esse método é o responsável pela sincronização de dados com o servidor. rec_so = SharedObject.getRemote(“videos”, client_nc.uri, true);
rec_so.onSync = function(list) { _root.Play_list.removeAll(); for (var i in _root.rec_so.data) { _root.Play_list.addItem(i); } }; rec_so.connect(client_nc); Na primeira linha note que damos o nome de “vídeo” ao objeto criado, o terceiro parâmetro “true” garantirá que os dados permaneçam no servidor, caso fosse passado o paramêtro false, os dados so permaneceriam enquanto o usuário estivesse conectado ao aplicativo. No palco teremos dois campos de textos, um com o nome de instância de “ListItem” do tipo “input” e outro com o o nome de instância de “Status_msg” do tipo “dynamic”, também terá dois movie clips do tipo vídeo, um para receber a webcam com o nome de instância de “live” e outro para mostrar os vídeos selecionado da list com o nome de instância de “publicado”. Criamos uma função para gravar o stream: function doRecord() {
if (ListItem.text == undefined || ListItem.text == “”) { Status_msg.text = “Necessario um titulo.”; ListItem.setFocus(); } else if (Record_btn.label == “Record”) { Status_msg.text = “Recording…”; if (Play_btn.label == “Stop”) { doPlay(); } Play_btn.enabled = false; out_ns = new NetStream(_root.client_nc); out_ns.attachAudio(Microphone.get()); var teste_cam:Camera = Camera.get(); live.attachVideo(teste_cam); out_ns.attachVideo(teste_cam); out_ns.publish(ListItem.text, “record”); _root.rec_so.data[ListItem.text] = ListItem.text; _root.rec_so.flush(); Record_btn.label = “Stop”; } else if (Record_btn.label == “Stop”) { out_ns.close(); Play_btn.enabled = true; Record_btn.label = “Record”; ListItem.text = “”; Status_msg.text = “…”; } } Detalhe interessante no método “publish” da classe NetStream, que pode ter três argumentos, sua sintaxe é a seguinte: out_ns.publish(nome_do_flv, jeito de salvar);
o primeiro parâmetro sendo o nome do arquivo, no caso o nome do nosso vídeo, e o segundo parâmetro o jeito de publicação que pode ser entre: record = salva o arquivo como flv no servidor, se o arquivo já existir será sobrescrito.
append = salva o arquivo como flv no servidor, acrescentando a partir do arquivo salvo anteriormente. live = transmite ao vivo sem salvar, se o arquivo existir será deletado. Criando o método para rodar o vídeo da list function doPlay() {
if (Play_btn.label == “Play”) { Status_msg.text = “Playing…”; Play_btn.label = “Stop”; var playFileName = Play_list.selectedItem.label; _root.in_ns = new NetStream(_root.client_nc); publicado.attachVideo(_root.in_ns); _root.in_ns.play(playFileName); in_ns.onStatus = function(info) { if (info.level == “error” || info.code == “NetStream.Play.Stop”) { Status_msg.text = “Stopped sending data…”; Play_btn.label = “Play”; } }; } else if (Play_btn.label == “Stop”) { Status_msg.text = “Stop…”; in_ns.onStatus = null; in_ns.close(); Play_btn.label = “Play”; } } Finalizando com a criação dinamicamente dos botões, da list e associando os métodos doRecord e doPlay aos eventos dos botões. Play_list.addEventListener(“change”, listListener);
var Play_list = _root.createClassObject(mx.controls.List, “Play_list”, 1, {_x:357, _y:214}); Play_list.setSize(148, 177); var Play_btn = _root.createClassObject(mx.controls.Button, “Play_btn”, 2, {_x:170, _y:216, label:”Play”}); var Record_btn = _root.createClassObject(mx.controls.Button, “Record_btn”, 3, {_x:47, _y:216, label:”Record”}); Record_btn.onRelease = function() { doRecord(); }; Play_btn.onRelease = function() { doPlay(); }; var listListener:Object = new Object(); listListener.change = function(evt_obj:Object) { var playFileName = evt_obj.target.selectedItem.label; trace(playFileName); in_ns.pause(); in_ns = new NetStream(_root.client_nc); publicado.attachVideo(in_ns); in_ns.play(playFileName); }; O código completo: client_nc = new NetConnection(); };
Para definir sua aplicação no servidor, crie um diretorio chamado “playlist” no seu servidor do Flash Communication Server/Flash Media Server. Dê ctrl+enter para testar a aplicação Considerações FinaisSimples e fácil criar uma playlist usando o Flash Communication Server/Flash Media Server, pode servir como um livro de visitas. Para saber mais: Meu Blog FCS/FMS Flash Media Server Developer Center FlashComGuru FlashCom.com.br Flash Media Server Fun
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 |
Queria Criar uma TV Online mais…
Ond eu Ponho os Códigos ?
E.. Ond eu Acesso a TV?
No red5 + Flash Cs3
The correct syntax is SharedObject.getRemote(). To assign the object to a variable, use syntax like:
var myRemote_so:SharedObject = SharedObject.getRemote(objectName, URI [, persistence])