Compartilhando a webcam no Flex com FMS

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.mxml
private 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.mxml
private 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.

Fique por dentro de nossas novidades, ideias e atualizações