O FMS

O Flash Media Server é um produto licenciado da Adobe, que possui duas formas duas formas de licenciamento

1 – Flash Media Interactive Server 3.5

O software Adobe Flash Media Interactive Server oferece uma combinação exclusiva de recursos poderosos de mídia de fluxo contínuo e um ambiente flexível para criar e fornecer aplicativos de mídia social interativa para o público mais amplo possível. Ele proporciona um ambiente bastante avançado, fluxo contínuo mais seguro, aprimoramentos de fluxo contínuo ao vivo, suporte para H.264 e HE-AAC padrões da indústria e fornecimento de fluxo contínuo para celulares com os softwares Adobe Flash Lite? 3 e Adobe Media Player.

Principais recursos do Flash Media Interactive Server

Recursos interativos

  • Arquitetura de plug-in
  • Gravação de vídeo MPEG-4
  • Compatível com AMF3
  • Funcionalidade DVR
  • Suporte a metadados XMP

Recursos de fluxo contínuo de vídeo

  • Fluxo contínuo dinâmico
  • Servidor e escalonabilidade rápidos
  • Implementação mais fácil
  • Fornecimento de conteúdo mais seguro
  • Protocolos de fornecimento confiáveis
  • Vídeo H.264 e áudio HE-AAC
  • Fluxo contínuo de vídeo HD/H.264 ao vivo
  • Fornecimento de vídeo móvel para o Flash Lite 3
  • Detecção de largura de banda
  • Publicação a aprtir de vários pontos
  • Manuseio de redirecinamento de servidor
  • Registro
  • Acesso a dados de fluxo contínuo

2 – Flash Media Streaming Server 3.5

O Adobe® Flash® Streaming Server tem um preço acessível e é a próxima etapa no uso de download progressivo para o fornecimento de vídeo. Ele proporciona um ambiente bastante avançado, fluxo contínuo mais seguro, aprimoramentos de fluxo contínuo ao vivo, suporte para H.264 e HE-AAC padrões da indústria e fornecimento de fluxo contínuo para celulares com os softwares Adobe Flash Lite? 3 e Adobe Media Player.

Principais recursos do Flash Media Streaming Server

  • Fluxo contínuo dinâmico
  • Fluxo contínuo de H.264 protegido por DRM
  • Servidor HTTP integrado
  • Pronto para sair da caixa
  • Usuários e largura de banda ilimitados
  • Maiores ganhos de desempenho
  • Fornecimento de conteúdo mais seguro
  • Vídeo H.264 e áudio HE-AAC
  • Fluxo contínuo de vídeo HD/H.264 ao vivo
  • Fornecimento móvel para o Flash Lite 3
  • Registro
  • Detecção de largura de banda
  • Procura de timeshifting

Parece ser bom, mais qual a diferença?

Bom, lendo as notas acima, tirados do Site da Adobe dá para notar o seu maior poder em relação ao Red5. O Flash Media Streaming Server não possui suporte a SharedObject.

Porque o Flash Media Server

Outra grande diferença é o suporte e a alta quantidade de livros, manuais e ajuda existentes sobre o Flash Media Server. Um exemplo disso é o DevNet em http://www.adobe.com/devnet/flashmediaserver/ que é a maior referencia de tutoriais de Flash Media Server da internet.

Em testes, o Flash Media Server foi muito mais estável principalmente no compartilhamento de vídeo e também foi melhor quando necessário alta qualidade de vídeo, utilizando o Adobe Flash Media Live Encoder 3 para publicar o vídeo.

Vamos a um exemplo!

Vamos agora criar um aplicativo que se conectará ao Flash media Server.

<?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
      {
        FMSStatus.text=e.info.code;
        switch ( e.info.code )
        {
          case "NetConnection.Connect.Success":
            statusConnection=true;
            break;
          case "NetConnection.Connect.Closed":
            break;
          case "NetConnection.Connect.Rejected":
            break;
        }
      }

      private function publicar():void
      {
        if ( nsPub != null )
        {
          btPublicar.label="Publicar no servidor FMS!"

          nsPub.close()
          nsPub=null
        }
        else
        {
          btPublicar.label="Parar publicação!"

          nsPub=new NetStream( nc );
          nsPub.attachCamera( Camera.getCamera());
          nsPub.attachAudio( Microphone.getMicrophone());

          // 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 FMS!";

          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/live"/>
    <mx:Button label="Conectar ao servidor" click="init()"/>
    <mx:Label id="FMSStatus"
          left="178"
          top="12"
          text="Aguardando conexáo"/>
  </mx:HBox>
  <mx:VBox enabled="{statusConnection}">
    <mx:HBox>
      <mx:Button id="btPublicar"
             label="Publicar no servidor FMS!"
             left="7"
             top="40"
             width="320"
             enabled="{statusConnection}"/>
      <mx:Button id="btVisualizar"
             label="Visualizar do servidor FMS!"
             left="7"
             top="40"
             width="320"
             enabled="{statusConnection}"/>
    </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 instância 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.

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