Se esta querendo aprender ou iniciar novos projetos em Flex, clique aqui

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.

Gostou? Não esqueça de curtir!

Ou compartilhe o link com seus amigos

7 comentários

Deixe uma resposta

  1. olá eduardo...bom....é o seguinte...sei que já faz um tempo que vc postou isso...mas...bom, sou professor de ciencias da rede municipal de ensino em teresina no piauí, estou com um quebra cabeça em minhas mãos, eu e alguns professores resolvemos criar um site para escola (sem fins lucrativos, claro!) só que idéias foram surgindo e surgindo até que um dos professores teve a grandiosa e complicada ideía de (se possivel) transmitir os eventos esportivos pelo site da escola....a equipe abraçou a ideia...procuramos, procuramos e nada foi encontrado efetivamente...fomos no site de extensões do joomla e lá encontramos algumas extensões que trabalham com video conferencia...mas, porém...todas usam este "bendito red5". só que nem na escola e pelo que a gente viu, nem na cidade tem alguem que saiba instalar ou trabalhar com ele. por isso, eu e a equipe, gostariamos que vc nos ajudasse pois, apesar de parecer simples, não é. e o nosso estimado google e youtube não está nos oferencendo ferramentas para nos finalizarmos este projeto. agradecemos sua atenção e... feliz carnaval.

     
  2. Use o formulário de contato que eu acho alguma solução.

     
  3. 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

     
  4. 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.

     
  5. Olha, teoricamente não há diferença entre as distribuições do Red5. Não usei o bat não.

     
  6. 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

     
  7. [...] 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] [...]