Ir para conteúdo

Arquivado

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

Ch4p0L1N

[Resolvido] Saber se o vídeo FLV já terminou (AS2)

Recommended Posts

Olá, estou usando um player flv em meu site que foi feito baseado no tutorial do iMasters (http://imasters.com.br/artigo/3808/flash/criando_um_videoplayer_de_flv_no_flash_parte_2/) e nele tem o seguinte código:

 

//este if server para verificar se o filme ja acabou, rebobinando o mesmo...
	if(info.code == "NetStream.Buffer.Flush"){
		netStmVideo.play(videoAtual);
		stopVideo();
	}

Adicionei algumas coisas dentro desse if para acontecer quando o vídeo terminar, só que alguns segundos finais do vídeo sempre são cortados, normalmente o vídeo encerra 5 segundos antes, a solução que tenho usado é adicionar 5 segundos a mais no vídeo sem conteúdo nenhum, mas gostaria de uma solução no próprio código para não ter que ficar editando cada vídeo que preciso colocar, alguém tem alguma ideia de como resolver isso?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, estou usando um player flv em meu site que foi feito baseado no tutorial do iMasters (http://imasters.com.br/artigo/3808/flash/criando_um_videoplayer_de_flv_no_flash_parte_2/) e nele tem o seguinte código:

 

//este if server para verificar se o filme ja acabou, rebobinando o mesmo...
	if(info.code == "NetStream.Buffer.Flush"){
		netStmVideo.play(videoAtual);
		stopVideo();
	}

Adicionei algumas coisas dentro desse if para acontecer quando o vídeo terminar, só que alguns segundos finais do vídeo sempre são cortados, normalmente o vídeo encerra 5 segundos antes, a solução que tenho usado é adicionar 5 segundos a mais no vídeo sem conteúdo nenhum, mas gostaria de uma solução no próprio código para não ter que ficar editando cada vídeo que preciso colocar, alguém tem alguma ideia de como resolver isso?

 

Obrigado

 

Oba, suables?

 

Faz assim, primeiro instancia o seu player de my_FLVPlybk.

 

E cria uma action com esse código:

 

stop();
var listenerObject = new Object();
listenerObject.stopped = function(eventObject) {
	//coloka aki a açao qdo o video terminar
};
my_FLVPlybk.addEventListener("stopped",listenerObject);
Se funcionar de um sorriso de orelha a orelha...senão posta aki de novo que ajudaremos! \o/

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou =/

 

segue o AS completo:

 

//configuração do palco...
//não necessário, fica a gosto...
Stage.align = "MC";
Stage.scaleMode = "noScale";
fscommand("allowscale", "false");
fscommand("fullscreen", "false");
_quality = "BEST";
//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 mcVolumeControl:MovieClip;
var btPlayPause:MovieClip;
var btStop:MovieClip;
//som para o controle do volume do player...
var somVideo:Sound = new Sound();
//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);
//um pequeno buffer antes do filme começar...
netStmVideo.setBufferTime(3);
//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 oque ele vai controlar...
mcVolumeControl.setVolumeObject(somVideo);
//por fim damos load e play em nosso video...
setVideo("video1.flv");

Será que não tem como fazer algum esquema com setInterval?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe qual seu erro?

 

É que flush pode ser chamado a qualquer hora em um player... basta que por algum motivo o computador limpe a memoria rapida.

E ai causa isso que você falou

 

O correto é assim:

function netStatusHandler(event:NetStatusEvent):void {
 trace(event.info.code);
 switch (event.info.code) {
 case "NetConnection.Connect.Success":
 //Ponha sua função de inicialização do play aqui
 break;
 case "NetStream.Play.StreamNotFound":
 traace("Stream not found");
 break;
 case 'NetStream.Play.Stop':
 //video finished
 break;
 case 'NetStream.Buffer.Flush' :
 // your video is done playing
 break;
 case 'NetStream.Seek.Notify' :
 //Look seek
 break;
 }
 }

Isso ai é uma chamada em AS 3.0

Veja ai como foi feita em AS 2.0 ;)

 

E coloque as outras propriedades

 

 

Funciona perfeitamente bem.

Vide o player do http://www.adorocinema.com

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, agora funcionou :)

 

Mas na verdade só troquei o NetStream.Buffer.Flush do if pelo NetStream.Play.Stop que você postou nesse outro exemplo, ficou perfeito.

 

Mto obrigado aos dois.

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.