Bha galera, publicar uma WebCam em um servidor FMS ou Red5 é 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 Red5.
Veja o código fonte aqui.





Olá Eduardo, tudo bem?
gostaria de saber se você já tentou fazer integração deste sistema com o SteamStream? A minha necessidade é de mostrar um RTSP no Flex e me indicaram usar o RED5.
Alguns links de referência:
http://www.red5wiki.com/wiki/SteamStream
@João Nunca mexi com esta tecnologia. Mais é excelente e o GMail Vídeo/Voz usa o mesmo protocolo.
Olá Alemão, estou a tentar fazer alguma coisa bonita com o fms3 ou red5. para transmitir um evento na minha vila... coisa simples, para depois varias pessoas poderem ver em directo....
Ja instalei o red5 no meu windows xp, e ja está a correr.... mas como eu faço para que funcione o exemplo... ja o inseri no flex, mas penso que tenho que inserir dentro de alguma pasta ou algo parecido... podes explicar essa parte?
Boa tarde !
Muito bom seu manual Parabéns!
Estou com uma duvida.
Ex:
Estou publicando minha webcam conforme teu manual, mais 3 amigos estão publicando tambem, como localizo a sessao deles para que eu possa assistir a camera deles tb ?
Obrigado !
Olá Eduardo tudo bom?
Então, na empresa que eu trabalho estamos precisando criar a opção de 2 usuários logados poderem conversar via videoconferencia. Já estamos com o RED5 rodando, portanto eu não consigo fazer as publicações das webcams, até por que o meu conhecimento em Flex é limitadissímo. A minha dúvida é: Como eu faço o que você fez aí em cima, funcionar no meu site PHP?