Bha galera, publicar uma WebCam em um servidor FMS ou Wowza é algo mais simples que muito gente imagina, mais se não tratado com carinho pode dar um pouco de dor de cabeça.
Se você apenas publicar vídeo não é necessário definir o objectEncoding. tanto que se utilizar o Flash Media Streaming Server, não possui suporte ao AMF. Basicamente para publicar vídeo é necessário uma instância do NetConnection e uma do NetStream.
Veja abaixo o principio da conexão:
// instanciando um NetConnection nc = new NetConnection(); // Conectando nc.connect("rtmp://localhost/servico"); // Nova instancia do NetStream nsPub = new NetStream ( nc ); // Adicionando a camera ao NetStream nsPub.attachCamera(Camera.getCamera()); // Publica com o nome "teste" nsPub.publish("teste");
Este é o principio básico de uma conexão, porém não necessariamente irá funcionar, pois ele tentará publicar antes que a conexão seja aceita pelo servidor.
Arquivo main.mxmlprivate function init():void { if(nc != null) nc = null; nc = new NetConnection(); nc.addEventListener( NetStatusEvent.NET_STATUS, netStatus ); nc.connect("rtmp://localhost/fitcDemo"); nc.client = this; } private function netStatus( e:NetStatusEvent ):void { RED5Status.text = e.info.code; switch( e.info.code ) { case "NetConnection.Connect.Success": statusConnection = true; break; case "NetConnection.Connect.Closed": statusConnection = false break; case "NetConnection.Connect.Rejected": statusConnection = false break; } }
Agora melhoramos o nosso código, acrescentando um evento que verifica o status da conexão, e só prosseguimos se a conexão for bem sucedido.
Arquivo main.mxmlprivate function publicar():void { nsPub = new NetStream ( nc ); nsPub.attachCamera(Camera.getCamera()); // nome que será publicado nsPub.publish("teste"); vdMinhaWebCam.attachCamera(Camera.getCamera()); } private function visualizar():void { btVisualizar.label="Parar Visualização!"; nsCli = new NetStream ( nc ) var vid:Video = new Video(); vid.height = uiCaixaDoVideo.height; vid.width = uiCaixaDoVideo.width; vid.attachNetStream( nsCli ); uiCaixaDoVideo.addChild( vid ); // nome que foi publicado nsCli.play("teste"); }
Adicionamos mais duas funções que publica e visualiza o conteúdo publicado. Veja que quando publico, inicio uma instância do NetStream adiciono a câmera e publico com o nome de “teste”. Logo defino a mesma WebCam no primeiro display e para visualizar o que esta sendo publicado.
Quando visualizo, uso uma instância do NetStream e utilizo o método play para visualizar o que foi publicado no servidor. Este método é adicionado a um componente Video que deve ser adicionado dentro de um UIComponent.
Abaixo há um exemplo com fonte, mais para que funcione, você deve ter instalado um servidor Wowza ou FMS.
Veja o código fonte aqui.