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.
No caso do Red5 há alguns processos para poder usar o Adobe Flash Media Encoder.
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.
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.


Opa… já faz uma errata aí no post: “Red5 suporta sim streaming de videos em alta resolucao H264. A implementação comecou em Nov/2008 e já está estável desde Abr/2009, segue um link para exemplo:
http://red5flashserver.blogspot.com/2009/04/updates-on-h264-support-in-red5.html”
Falow.
[...] [link] Post que fala sobre a implementação java (OpenSource e gratuita) do protocolo RTMP. O FMS [link] Post que fala sobre a implementação proprietária da Adobe do protocolo RTMP. Compartilhando [...]