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

Compartilhar no Facebook Compartilhar no Google Bookmarks Compartilhar no Twitter Compartilhar no LinkedIn

5 comentários

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

  2. Antonio

    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

  3. Eduardo Kraus

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

  4. Rubens

    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

  5. Eduardo Kraus

    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.

Deixe uma resposta