O Red5
o Red5 é um servidor de RTMP de código aberto e desenvolvido em Java e possui suporte as seguintes funcionalidades:
- Streaming de Audio/Video (FLV e MP3)
- Gravação de Streaming (somente FLV)
- Shared Objects
- Publicação em Tempo Real
- Remoting (Action Message Format)
Instalação
Atualmente na versão 0.9.1 Final pode ser baixado nos seguintes links: OSX | Windows | ZIP | Tarball | Replacement Jar
Estou utilizando a versão 0.8 por estar estável. Os intaladores possuem o tomcat imbutido na instalação.
Configuração e teste
Após a instalação acesse http://localhost:5080/. Há a página dos demos(http://localhost:5080/demos/), mais que só funcionam após instalar os serviços em http://localhost:5080/installer/.
Então agora acesse http://localhost:5080/installer/ e terás a tela abaixo:

Selecione o aplicativo fitcDemo e clique em Install. Aguarde o Alert de concluído e vamos ao App.
Um exemplo
Vamos agora criar um aplicativo que se conectará ao Red5 e transmite a câmera.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
horizontalAlign="left"
backgroundColor="#f6f6f6"
backgroundGradientColors="[#f6f6f6, #bbbbbb]"
viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private var nc:NetConnection;
private var nsCli:NetStream;
private var nsPub:NetStream;
[Bindable]
private var statusConnection:Boolean=false
/**
* Inicia a aplicação e faz a conexão
*/
private function init():void
{
if ( nc != null )
nc=null;
nc=new NetConnection();
nc.addEventListener( NetStatusEvent.NET_STATUS, netStatus );
nc.connect( hostRTMP.text );
nc.client=this;
}
/**
* Método necessário para que não haja erro na chamada.
* Ele será invocado e retornará o ID da conexão
*/
public function setId( id:Object ):void
{
}
/**
* Método que recebe o Status da conexão
*/
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;
}
}
private function publicar():void
{
if ( nsPub != null )
{
btPublicar.label="Publicar no servidor Red5!"
nsPub.close()
nsPub=null
}
else
{
btPublicar.label="Parar publicação!"
nsPub=new NetStream( nc );
nsPub.attachCamera( Camera.getCamera());
// nome que será publicado
nsPub.publish( "videoPublish" );
vdMinhaWebCam.attachCamera( Camera.getCamera());
}
}
private function visualizar():void
{
if ( !statusConnection )
{
Alert.show( "Não conectado ao servidor!" )
return;
}
if ( nsCli != null )
{
btVisualizar.label="Visualizar do servidor de Red5!";
nsCli.close();
nsCli=null
}
else
{
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( "videoPublish" );
}
}
]]>
</mx:Script>
<mx:HBox>
<mx:TextInput id="hostRTMP" text="rtmp://localhost/fitcDemo"/>
<mx:Button label="Conectar ao servidor" click="init()"/>
<mx:Label id="RED5Status" left="178" top="12"/>
</mx:HBox>
<mx:VBox enabled="{statusConnection}">
<mx:HBox>
<mx:Button id="btPublicar"
label="Publicar no servidor Red5!"
click="publicar()"
left="7"
top="40"
width="320"/>
<mx:Button id="btVisualizar"
label="Visualizar do servidor Red5!"
click="visualizar()"
left="7"
top="40"
width="320"/>
</mx:HBox>
<mx:HBox>
<mx:VBox>
<mx:VideoDisplay width="320"
height="240"
id="vdMinhaWebCam"
left="10"
top="85"/>
</mx:VBox>
<mx:VBox>
<mx:VBox width="320"
height="240"
backgroundColor="#000000"
left="10"
top="334">
<mx:UIComponent toolTip="Captura de vídeo"
id="uiCaixaDoVideo"
width="100%"
height="100%"
x="10"
y="353"/>
</mx:VBox>
</mx:VBox>
</mx:HBox>
</mx:VBox>
</mx:Application>
O funcionamento é bem simples. Quando clicado em conectar, uma nova instância do NetConnection é criada e o status é apresentado ao lado do botão. Os botões de visualizar e publicar só são habilitados quando a conexão for aceita no RED5.
Quando clicar em Publicar, uma instância do NetStream é criada e utilizamos o método publish para enviar a a câmera e microfone ao Red5. quando clicamos em visualizar, uma instancia do NetStream é criada e utilizamos o método play para visualizar o que esta sendo publicado neste canal.
Veja abaixo como ficou o exemplo.
Código fonte aqui.
Você pode seguir todas as respostas a esta entrada através do RSS 2.0 feed. Você pode deixar um comentário, ou colocar um link em seu site.


[...] de o que é e como funciona o protocolo de tempo real usado em aplicações Adobe Flex. O Red5 [link] Post que fala sobre a implementação java (OpenSource e gratuita) do protocolo RTMP. O FMS [link] [...]
Olá Eduardo, poderia me dizer se existe uma diferença de desempenho entre as versões
-tarball
-instalador
-war
estou usando a versão tarball, você já iniciou o servidor usando o
‘red5-highperf.bat’?
obrigado
Olha, teoricamente não há diferença entre as distribuições do Red5. Não usei o bat não.
Oi Eduardo, Obrigado pelo post, está sendo esclarecedor.
Mas não consegui rodar o Red5 ainda. Eu instalei a versão Windows (Java5) mas parece que o java não foi instalado junto.
Então baixei o java indicado na página do readme do Red5: ‘Java JDK 1.5 or newer’ que dava um link para http://java.sun.com/javase/downloads/index.jsp
Só que após a instalação o diretório criado pelo java foi
C:\Arquivos de programas\Java\jdk1.6.0_18
Parece-me que não é o mesmo que você cita no post, e o Red5 dá um erro e fecha o prompt tão rápido que não consigo ver a mensagem de erro.
Poderia me ajudar?
Abraço
Você instalou o Java SDK 1.6, e deve instalar o JRE 1.6. vá até a página de download, http://java.sun.com/javase/downloads/index.jsp, e baixe o JRE. Após isso instale o Red5.