Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guigão

Seek Bar de Video

Recommended Posts

Olá pra todos....sou novo no forum do imasters....estou precisando de uma ajuda...sou iniciante em AS e vi um tutorial sobre vídeo aki no imasters, q por sinal é muito útil e bacana do Lucas Ferreira, mas estou com um grande problema, eu fiz o tutorial e funcionou tudo certo, mas eu gostaria de dar o play de um botão q eu criei e acontece q a barra de progresso não carrega, vou explicar como esta a estrutura da Seekbar, eu tenho um MC instanciado de mcSeek e dentro deste ms eu tenho um tres MCs instanciados, mcSeekFundo, mcProgresso e btSeekBar respectivamente, onde o mcSeekFundo é fundo da seekbar o mcProgresso é a barra q representa o carregemento dos Bytes e por último o btSeekBar é o drag responsável pela progressão do vídeo, então oq está acontecendo é que quando eu coloco o vídeo pra ser chamado direto sem um botão no evento o mcProgresso (responsável pelo carregramento de Bytes) aparece normal e o btSeekBar pode ser rolado por ele normalmente, mas quando eu chamo o evento play de um vídeo qualquer pelo botão q eu criei e instanciado de btVídeos1 o mc progresso fika em seu tamanho de inicio, no caso 1px, e não cresce e com isso quando eu clico no drag (btSeekBar) ele só pode correr nesse pequeno espaço de 1px, eu estava olhando no forum aki do imasters e vi q teve várias dúvidas em relação a esse tutorial mas não encontrei nenhum q resolvesse o meu problema....se alguem puder me ajudar.....fico grato desde já pela oportunidadevou disponibilizar aki os arquivos explicando o meu problema....

 

AS que está sendo usada no palco:

 

//iniciando projeto...
//declarando variáveis...
var display:Video;
var videoAtual:String = null;
var tempoAtual:Number = 0;
var isPlay:Boolean = false;
//botoes e mcs do player...
var mcSeek:MovieClip;
var mcVolumeControl:MovieClip;
var btPlayPause:MovieClip;
var btStop:MovieClip;
//criando conexao do stream de video...
var netConVideo:NetConnection = new NetConnection();
netConVideo.connect(null);
//criando stream para ser usado na conexao...
var netStmVideo:NetStream = new NetStream(netConVideo);
//som para o controle do volume do player...
var somVideo:Sound = new Sound();
//objeto monitor de eventos do video...
netStmVideo.onStatus = function(info):Void  {
	//este if server para verificar se o filme ja acabou, rebobinando o mesmo...
	if (info.code == "NetStream.Buffer.Flush") {
		netStmVideo.play(videoAtual);
		stopVideo();
	}
};
//adicionando o stream ao nosso display no palco...
display.attachVideo(netStmVideo);
//função responsável por setar o video a ser carregado e tocado...
function setVideo(src:String):Void {
	//caso o comando de tocar seja pra um video já sendo tocado, evita o recarregamento...
	if (videoAtual != src) {
		netStmVideo.play(src);
		//salva numa var, o video atual para posterior verificação...
		videoAtual = src;
	} else {
		//neste caso o video atual e o mesmo do comando, assim só recomeça a tocar...
		netStmVideo.seek(0);
	}
	//configurando player para que esteja tocando...
	btPlayPause.gotoAndStop(2);
	isPlay = true;
}
//função responsável pelo Play/Pause do filme...
function PlayPause():Void {
	//verifica se o video esta tocando, caso sim, pausa...
	if (isPlay) {
		//salva o tempo atual para posterior continuação ao apertar em play...
		//esse menos 10 e para não haver corte e delay no tempo de apertar o botão...
		tempoAtual = netStmVideo.time-10;
		netStmVideo.pause(true);
		isPlay = false;
	} else {
		//caso esteja parado continua a tocar da onde parou...
		isPlay = true;
		netStmVideo.pause(false);
	}
}
//função responsável pelo stop do filme...
function stopVideo():Void {
	//resetando o tempo atual caso esteja em pause...
	tempoAtual = 0;
	netStmVideo.seek(0);
	netStmVideo.pause(true);
	isPlay = false;
	//joga o botão de play/pause para o frame do play...
	btPlayPause.gotoAndStop(1);
}
//setando ação dos botões...
btStop.onRelease = stopVideo;
btPlayPause.onRelease = function():Void  {
	//verifica a atual situação para dizer se deve aparecer o play ou pause...
	if (isPlay && this._currentframe == 2) {
		this.gotoAndStop(1);
	} else {
		this.gotoAndStop(2);
	}
	//ativando a função PlayPause()...
	PlayPause();
};
//
//passando ao mcVolume o que ele vai controlar...
mcVolumeControl.setVolumeObject(somVideo);
//passando ao mcSeek o que ele vai controlar...
_root.mcBarra.mcSeek.setVideoStream(netStmVideo);
//por fim damos load e play em nosso video...
_root.mcBotao.btVideo1.onPress = function() {
	setVideo("video1.flv");
};

 

Classe responsável pela SeekBar:

 

import mx.utils.Delegate;

class SeekBar extends MovieClip {

	public var mcSeekFundo:MovieClip;
	public var mcProgresso:MovieClip;
	public var btSeekBar:MovieClip;
	public var totalTime:Number = 0;
	private var timerProgress:Number;
	private var timerPlay:Number;
	private var objVideo:NetStream;
	
	function SeekBar(){
	}
	
	public function setVideoStream(v:NetStream):Void
	{
		objVideo = v;
		objVideo.bt = btSeekBar;
		objVideo.onMetaData = function(info:Object):Void
		{
			this.totalTime = info.duration;
			this.bt._visible = true;
		}
	}
	
	private function updateProgress():Void
	{
		var bl:Number = objVideo.bytesLoaded;
		var bt:Number = objVideo.bytesTotal;
		var p:Number = Math.round((bl/bt) * 100);
		
		mcProgresso._xscale = p;

		if(p >= 100){
			clearInterval(timerProgress);
		}
		
	}
	
	private function updateTime():Void
	{
		var p:Number = Math.max(Math.round((btSeekBar._x/mcProgresso._width) * 100), 0);
		var nT:Number = (p/100) * objVideo.totalTime;
		
		objVideo.seek(nT);
		objVideo.pause(true);
		
	}
	
	private function setTimer():Void
	{
		updatePlay();
		objVideo.pause(false);
		timerPlay = setInterval(Delegate.create(this, updatePlay), 10);
	}
	
	private function dragBar():Void
	{
		if(objVideo.totalTime > 0){
			clearInterval(timerPlay);
			btSeekBar.startDrag(false, 0, 0, (mcProgresso._width-btSeekBar._width), 0);
			btSeekBar.onMouseMove = Delegate.create(this, updateTime);
			btSeekBar.setTimer = Delegate.create(this, setTimer);
			btSeekBar.onRelease = btSeekBar.onReleaseOutside = function():Void
			{
				this.stopDrag();
				this.onMouseMove();
				this.setTimer();
				delete this.onMouseMove;
			}
		}
	}
	
	private function updatePlay():Void
	{
		var p:Number = Math.max(Math.round((objVideo.time/objVideo.totalTime) * 100), 0);
		var nX:Number = (p/100) * mcSeekFundo._width;
		
		btSeekBar._x = nX;
		
	}
	
	private function onLoad():Void
	{
		btSeekBar._x = 0;
		mcProgresso._x = 0;
		mcSeekFundo._x = 0;
		mcProgresso._xscale = 0;
		btSeekBar._visible = false;
		
		timerProgress = setInterval(Delegate.create(this, updateProgress), 20);
		setTimer();
		
		btSeekBar.onPress = Delegate.create(this, dragBar);
		
	}
	
}

agora o link com os arquivos q eu criei para exemplo:

 

http://rapidshare.com/files/156903055/arquivos.rar.html

 

Abraço a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.