Olá Desenvolvedor, faça
ou


FLV Player em AIR
Olá Galera!!
Nesse Tutorial vamos fazer um FLV Player para você assistir vídeos(*.flv) do seu computador ou da Web no seu Desktop.
para fazer um teste de como vai ficar o aplicativo faça download dele:
Get Adobe Flash player

Vamos ao Tutorial fiz a Layout do player para não ter muito trabalho
Get Adobe Flash player

Vamos começar

Temos os componentes Play/Pause, SeekBar, VolumeBar e FLVPlayback sem Skin (os componentes foram modificados)
Temos também um Movie Clip para Abrir o vídeo e outro para abrir uma janela para por a URL, um campo de texto para pegar o nome do vídeo e um Movie Clip vazio para receber o equalizador

Vamos as Actions:
ActionScript

import flash.display.Sprite;
import flash.net.URLRequest;
import flash.events.Event;
import fl.video.VideoEvent;
import fl.video.MetadataEvent;
import flash.events.MouseEvent;
import flash.filesystem.*;
import flash.net.FileFilter;
import flash.media.SoundMixer;
import flash.utils.ByteArray;
import flash.utils.Timer;
import flash.desktop.NativeDragManager;
import flash.events.NativeDragEvent;
import flash.desktop.ClipboardFormats;
//criando o objeto File para abrir no desktop (desktopDirectory)
var arquivo:File = File.desktopDirectory;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
//colocando um smoothing para melhorar a qualidade do video
Controles.video.getVideoPlayer(Controles.video.activeVideoPlayerIndex).smoothing = true;
//quando o video terminar chamar função Terminou
Controles.video.addEventListener(VideoEvent.COMPLETE, Terminou);
Controles.video.seekBar = Controles.mSeekBar;
Controles.video.volumeBar = Controles.mVolumeBar;
Controles.play_p.pause_mc.visible = false;
Controles.mcUrl.visible = false;
Controles.abreVideo.addEventListener(MouseEvent.MOUSE_UP, Abrir);
Controles.abreUrl.addEventListener(MouseEvent.MOUSE_UP, Abrir_url);
this.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, dragEnter);
this.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, dragVideo);
//função para arrastar um video na aplicação
function dragEnter(e:NativeDragEvent){
	var dVideo:Object = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT);
	if (dVideo[0].extension == "flv"){
		NativeDragManager.acceptDragDrop(this);
	}
}
//quando soltar o video na aplicação
function dragVideo(e:NativeDragEvent){
	var dVideo:Object = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT);
	Controles.mcUrl.visible = false;
	Controles.infoVideo.txt_tocando.text = nomeVideo(dVideo[0].name);
	Controles.play_p.pause_mc.visible = true;
	Controles.play_p.buttonMode = true;
	Controles.video.play(dVideo[0].url);
	Controles.video.addEventListener(MetadataEvent.METADATA_RECEIVED, AtualizaTempoTotal);
	stage.addEventListener(Event.ENTER_FRAME, AtualizaTempoCorrido);
}
//redimenciona video
function ResizeVideo(vidWidth:Number, vidHeight:Number){
	Controles.video.width = (vidWidth * 405)/ vidHeight;
	Controles.video.x = (720-Controles.video.width)/2;
	Controles.video.y = (440-Controles.video.height-20)/2;
}
//função Terminou da play no video
function Terminou(e:VideoEvent){
	Controles.video.play();
}
function Abrir(e:MouseEvent){
	//chama a função "Selecionar" com o local do nosso objeto File "arquivo"
	Selecionar(arquivo);
}
function Selecionar(e:File){
	//define os formatos de arquivos permitidos para serem abertos
	var FileF:FileFilter = new FileFilter("Flash Video (*.flv)","*.flv");
	//método browseForOpen abre uma janela para selecionar um arquivo
	e.browseForOpen("Escolha um Vídeo", [FileF]);
	//chama a função "ArquivoSelecionado" que vai executar o video escolhido
	e.addEventListener(Event.SELECT, ArquivoSelecionado);
}
function ArquivoSelecionado(e:Event){
	Controles.mcUrl.visible = false;
	Controles.infoVideo.txt_tocando.text = nomeVideo(arquivo.name);
	Controles.play_p.pause_mc.visible = true;
	Controles.play_p.buttonMode = true;
	Controles.video.play(arquivo.nativePath);
	Controles.video.addEventListener(MetadataEvent.METADATA_RECEIVED, AtualizaTempoTotal);
	stage.addEventListener(Event.ENTER_FRAME, AtualizaTempoCorrido);
}
//abre mcUrl para abrir video com uma url
function Abrir_url(e:MouseEvent){
	Controles.mcUrl.visible = true;
	Controles.mcUrl.txt_url.addEventListener(MouseEvent.CLICK, seleciona_txt);
	Controles.mcUrl.txt_url.addEventListener(KeyboardEvent.KEY_DOWN, abreLink);
	Controles.mcUrl.e_url.addEventListener(MouseEvent.CLICK, abreBtnLink);
}
function seleciona_txt(e:MouseEvent){
	setTimeout(Controles.mcUrl.txt_url.setSelection, 100, 0, e.target.text.length);
}
//quando apertar ENTER com uma url definida chama loadURL
function abreLink(e:KeyboardEvent){
	if (e.charCode == Keyboard.ENTER){
		if(Controles.mcUrl.txt_url.text==""){
			trace("sem URL");
		}else{
			loadURL(e.target.text);
		}
	}
}
function abreBtnLink(e:MouseEvent){
	if(Controles.mcUrl.txt_url.text==""){
		trace("sem URL");
	}else{
		loadURL(Controles.mcUrl.txt_url.text);
	}
}
//loadURL abre o video
function loadURL(e:String){
	Controles.mcUrl.visible = false;
	Controles.infoVideo.txt_tocando.text = nomeVideo(e);
	Controles.play_p.pause_mc.visible = true;
	Controles.play_p.buttonMode = true;
	Controles.video.play(e);
	Controles.video.addEventListener(MetadataEvent.METADATA_RECEIVED, AtualizaTempoTotal);
	stage.addEventListener(Event.ENTER_FRAME, AtualizaTempoCorrido);
}
//fecha mcUrl
Controles.mcUrl.f_url.addEventListener(MouseEvent.MOUSE_UP, fechar_url);
function fechar_url(e:MouseEvent){
	Controles.mcUrl.visible = false;
}
//função para tirar a extensão e/ou endereço do link ficando apenas o "nome" do video
function nomeVideo(s:String):String{
	if (s.lastIndexOf("/") == (s.length - 1)){
		return nomeVideo(s.substring(0, s.length - 1));
	}
	var str:String = s.substring((s.lastIndexOf("/") + 1));
	var ultimo:int = str.indexOf(".");
	if (ultimo == -1){
		if (str.indexOf("?") > -1){
			ultimo = str.indexOf("?");
		}else{
			ultimo = str.length;
		}
	}
	return str.substring(0, ultimo);
}
//Atualiza e mostra o tempo total do video
function AtualizaTempoTotal(e:MetadataEvent){
	ResizeVideo(e.info.width, e.info.height);
	var tempoTotal = String(e.info.duration);
	var duracaoTempo:String = (tempoTotal > 3600 ? Math.floor(tempoTotal / 3600) + ":" : "") + (tempoTotal % 3600 < 600 ? "0" : "") + Math.floor(tempoTotal % 3600/60) + ":" + (tempoTotal % 60 < 10 ? "0":"") + Math.floor(tempoTotal % 60);
	Controles.infoVideo.txt_total.text = duracaoTempo;
}
//Atualiza e mostra o tempo corrido do video
function AtualizaTempoCorrido(e:Event){
	var tempoCorridos = String(Controles.video.playheadTime * 10 / 5 / 2);
	var mostraTempo:String = (tempoCorridos > 3600 ? Math.floor(tempoCorridos / 3600) + ":" : "") + (tempoCorridos % 3600 < 600 ? "0" : "") + Math.floor(tempoCorridos % 3600/60) + ":" + (tempoCorridos % 60 < 10 ? "0":"") + Math.floor(tempoCorridos % 60);
	Controles.infoVideo.txt_time.text = mostraTempo;
}

//SoundMixer.computeSpectrum - Equalizador
var ba:ByteArray = new ByteArray();
//Cria um Sprite
var gr:Sprite = new Sprite();
sp.addChild(gr);

//máscara para o equalizador
gr.cacheAsBitmap = true;
mask_gr.cacheAsBitmap = true;
gr.mask = mask_gr;

var Mtime:Timer = new Timer(70);
Mtime.addEventListener(TimerEvent.TIMER, Equalizador);
Mtime.start();

//função Equalizador
function Equalizador(e:TimerEvent){
	SoundMixer.computeSpectrum(ba, true, 0);
	var i:int;
	//tamanho do width(Largura) das barras;
	var w:uint = 4;
	gr.graphics.clear();
	//tamanho e cor da linha;
	gr.graphics.lineStyle(0, 0x222222);
	//cor das barras;
	gr.graphics.beginFill(0x3079ED);
	
	for (i=0; i<94; i+=w){
		var t:Number = ba.readFloat();
		var n:Number = (t * 22);
		gr.graphics.drawRect(i, 0, w, -n);
	}
}

Exemplo:


Bom é isso espero que tenham gostado
Bons estudos e até a próxima
Abraço

Autor: Thiago Bueno
Thiago Bueno: Meu nome é Thiago Bueno, trabalho na area de desenvolvimento Web, atualmente no desenvolvimento de sistemas em PHP. Trabalhando como Freelancer
Tags: Adobe AIR, AIR, ActionScript 3, AS3, FLV Player, FLVPlayer, .flv, FLVPlayback, Play, Pause, SeekBar, Volume, Equalizador
Compartilhar
Adicionar Comentário
Comentários
William
Olá, Gostei Muito Dos Tutoriais que Tem no Seu Site, Eu Consequi Fazer Este Player Rodar Aki no Meu PC, Coloquei o COdigo Tudo Certinho, Mais Gostaria de Saber se tem algum jeito de Fazer o Aplicativo AIR, Rodar Videos .avi e .mpeg.
Pois preciso Criar um Aplicativo para Empresa Onde Trabalho, e o Aplicativo Precisa Rodar uns Arquivos .mpeg e .avi de no maximo 10 minutos.
responder - útil - 12/05/2010 às 03:44
Thiago Bueno
não tem como rodar .avi e .mpeg
responder - útil - 16/09/2011 às 14:44
Anderson
Tem como tu me enviar o arquivo Fla deste projeto já com o código fonte?
Valew
responder - útil - 21/09/2010 às 09:28
Thiago Bueno
o arquivo e o codigo fonte estao ai é só escrever
responder - útil - 16/09/2011 às 14:44
Jorge
Show de bola seu player, ficou muito bom, inclusive se o arquivo .flv ainda está sendo baixado já dá de assistir..

Só faltou uma funcionalidade para ficar perfeito.. a de maximizar a janela e o vídeo se adequar ao aplicativo.. ou senão bloquear que o usuário maximize a janela (que não seria tão legal).

Valeu!
responder - útil - 08/11/2011 às 21:38
Junior Santana
Eae tiago tem como ser armazenar videos nesse player ,e qual seria os códigos ... ???
responder - útil - 23/01/2012 às 21:09