AIR, Flex e vídeos de alta definição
Antes de continuar gostaria de dizer que este componente é baseado na idéia de David Hassoun da RealEyes Media.
Este componente estende UIComponent e adiciona um objeto vídeo em sua estrutura, o código segue abaixo.
package br.com.fmsguru
{
import flash.events.NetStatusEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import mx.controls.Alert;
import mx.core.UIComponent;
public class FmsGuruVideo extends UIComponent
{
private var vid:Video;
private var nc:NetConnection;
private var ns:NetStream;
private var cli:Object;
private var _caminho:String;
public function FmsGuruVideo()
{
super();
init();
}
}
}
A idéia básica aqui é bem parecida com uma conexão com o servidor FMS, porém, em vez de conectar ao servidor, vamos abrir uma conexão nula que não irá fazer streaming e sim criar um download progressivo do vídeo.
public function init():void
{
vid = new Video();
nc = new NetConnection();
nc.connect(null);
ns = new NetStream(nc);
ns.bufferTime=0.2;
cli = new Object();
ns.client = cli;
ns.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
vid.attachNetStream(ns);
this.addChild(vid);
if(_caminho)
{
ns.play(_caminho);
}
}
Criamos uma instância de NetConnection e uma instância para o NetStream ns, que faz um buffer para melhorar a leitura do vídeo, em seguida adicionamos um listener para respoder o status da conexão para com o arquivo e anexamos a um objeto de video.
private function onStatus(obj:NetStatusEvent):void
{
}
Na função onStatus simplesmente comparamos as mensagens para serem mostradas ao usuário.
E para finalizar nosso componente criamos dois métodos get e set para mostrar o caminho do arquivo que queremos dar um play.
[Bindable]
public function get filePath():String
{
return _caminho;
}
public function set filePath(p_path:String):void
{
_caminho = p_path;
ns.play(_caminho);
}
Prontinho o componente esta pronto para uso. Para testar basta adiciona-lo assim:
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
xmlns:video="br.com.fmsguru.*">
<video:FmsGuruVideo id="_videoGuru"
filePath="curtacircuito007.m4v"/>
</mx:WindowedApplication>
Neste exemplo estamos fazendo a leitura do arquivo .M4V direto pelo file system, vale lembrar que o sandbox do AIR deixa acessar a máquina local, mas se este componente for usado em uma aplicação Flex, o arquivo só poderá ser lido diretamente de alguma url.
Para fazer o download da aplicação e do componente basta clicar aqui
Grande abraço!