Ir para conteúdo

POWERED BY:

Arquivado

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

Pablo Saldanha

[Resolvido] Player de video

Recommended Posts

Ola, tenho um problema, seguite... gostaria de fazer um player para tocar uma lista de flv em um xml... tocando todos os do xml e depois para..

 

todos os tutoriais que eu tenho visto... esse esquema so faz com mp3... não vi nem uma com video...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois então meu caro

 

É exatamente o mesmo esquema, você vai carregar todos os videos em um array.

E ai vai utilizar a função de complete

 

Exemplo da propria adobe:

/**
 Requires:
- FLVPlayback component on the Stage with an instance name of my_FLVPlybk
*/
import mx.video.*;
var listenerObject:Object = new Object();
listenerObject.complete = function(eventObject:Object):Void {
 trace("Elapsed play time at completion is: " + my_FLVPlybk.playheadTime);
};
my_FLVPlybk.addEventListener("complete", listenerObject);
my_FLVPlybk.contentPath = "http://www.helpexamples.com/flash/video/water.flv";

Ele vai te mostrar quanto tempo passou do video no output após completar o video.

Você pode usar isso ou outros eventos que também são invocados pelo flash

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso que não entendo(Desculpa mas sou novo no flash).. esse codigo que você me passou se eu for implementar nesse codigo como eu faria, tendo em vista que a saida so me proporciona setar o filme setVideo("video1.flv");.

 

//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");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa achei um player bom para o que eu quero.

andei lendo alguns tutoriais e o problema do playe em cima e que não esta instanciado o XML dos videos ne isso... ok antão fui busca algum e encontrei agora nesse tem outro problema mas acho que é ate mais faciu nesse codigo eu gostaria que toque todos os videos do xml e quando chega no ultimo ele parace.. acho que é mais faciu... o codigo é esse,

 

import fl.video.*;

var thumb_width:Number;
var thumb_height:Number;
var thumbs_x:Number;
var thumbs_y:Number;
var video_x:Number;
var video_y:Number;
var my_videos:XMLList;
var my_total:Number;

var main_container:Sprite;
var thumbs:Sprite;
var titles:Sprite;
var my_player:FLVPlayback;

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load (new URLRequest("playlist.xml"));
myXMLLoader.addEventListener (Event.COMPLETE, processXML);

function processXML (e:Event):void {
	var myXML:XML = new XML(e.target.data);

	thumb_width = myXML.@THUMB_WIDTH;
	thumb_height = myXML.@THUMB_HEIGHT;
	thumbs_x = myXML.@THUMBS_X;
	thumbs_y = myXML.@THUMBS_Y;
	video_x = myXML.@VIDEO_X;
	video_y = myXML.@VIDEO_Y;
	my_videos = myXML.VIDEO;
	my_total = my_videos.length();

	makeContainers ();
	callThumbs ();
	makePlayer ();
}

function makeContainers ():void {
	main_container = new Sprite();
	addChild (main_container);

	thumbs = new Sprite();
	thumbs.addEventListener (MouseEvent.CLICK, playVideo);
	thumbs.addEventListener (MouseEvent.MOUSE_OVER, onOver);
	thumbs.addEventListener (MouseEvent.MOUSE_OUT, onOut);
	thumbs.x = thumbs_x;
	thumbs.y = thumbs_y;
	thumbs.buttonMode = true;
	main_container.addChild (thumbs);

	titles = new Sprite();
	titles.x = thumbs_x;
	titles.y = thumbs_y;
	main_container.addChild (titles);
}

function callThumbs ():void {
	for (var i:Number = 0; i < my_total; i++) {

		var thumb_url = my_videos[i].@THUMB;
		var thumb_loader = new Loader();
		thumb_loader.name = i;
		thumb_loader.load (new URLRequest(thumb_url));
		thumb_loader.contentLoaderInfo.addEventListener (Event.COMPLETE, thumbLoaded);
		thumb_loader.y = (thumb_height+10)*i;

		var thumb_title = my_videos[i].@TITLE;
		var title_txt:TextField = new TextField();
		title_txt.text = thumb_title;
		title_txt.y = thumb_loader.y;
		title_txt.x = thumb_width + 10;
		title_txt.width = thumb_width;
		title_txt.height = thumb_height;
		title_txt.wordWrap = true;
		titles.addChild (title_txt);


	}
}

function thumbLoaded (e:Event):void {
	var my_thumb:Loader = Loader(e.target.loader);
	thumbs.addChild (my_thumb);
}

function makePlayer ():void {
	my_player = new FLVPlayback();
	my_player.skin ="SkinOverPlaySeekMute.swf";
	my_player.skinBackgroundColor = 0xAEBEFB;
	my_player.skinBackgroundAlpha = 0.5;

	my_player.x = video_x;
	my_player.y = video_y;
	my_player.width = 480;
	my_player.height = 270;

	main_container.addChild (my_player);
	my_player.source = my_videos[0].@URL;
}

function playVideo (e:MouseEvent):void {
	var video_url = my_videos[e.target.name].@URL;
	my_player.source = video_url;
}

function onOver (e:MouseEvent):void {
	var my_thumb:Loader = Loader(e.target);
	my_thumb.alpha = 0.5;
}
function onOut (e:MouseEvent):void {
	var my_thumb:Loader = Loader (e.target);
	my_thumb.alpha = 1;
}

valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qualé seu conhecimento de AS 3???

 

Pois o código ta em AS 3.

 

O que você quer você vai ter que fazer como eu falei...

Colocar um evento no video perguntando se o video foi completado e passar para o próximo.

 

O listener do video de complete muda um pouco de AS 2 para AS 3 mas basicamente é a mesma coisa.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha sou iniciante se assim dizer, uso o flash a muito tempo mas o AS eu uso para uso básico, eu endendo os codigos pois tenho uma base em programação java, por isso estou tentando resolver isso...

 

mas acho que eu entendi so pesso ajuda nos comandos porque minha duvida e onde implementa esse codigo que você me falow nesse outro codigo entende?

 

Opa lendo e relendo novamente esse codigo olha so berseck vi que o ponto de execução do vido em aqui:

 

function makePlayer ():void {
 my_player = new FLVPlayback();
	my_player.skin ="SkinOverPlaySeekMute.swf";
	my_player.skinBackgroundColor = 0xAEBEFB;
	my_player.skinBackgroundAlpha = 0.5;

 my_player.x = video_x;
	my_player.y = video_y;
 my_player.width = 480;
	my_player.height = 270;

 main_container.addChild (my_player);
	my_player.source = my_videos[0].@URL; <---------
	
}
e essa array que guarda e executa os videos nessa linha... então a pergunta como posso implementa o codigo que você me disse aqui... para que quando o my_player.source saiba que o video acabou ele passe para o outro?

 

 

 

 

eu ate fiz um for mas não deu certo... ele passa por todos mas so executa o ultimo.


for(var i:Number = 0; i < my_total; i++){
	my_player.source = my_videos[i].@URL;
	
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 Por favor use tag CODE

2 Por favor EDITE seus posts para colocar novas informações se possivel (você tem meia hora para editar um post)

 

O listener você não vai aplicar dentro disso um listener você faz assim:

my_player.addEventListener(VideoEvent.COMPLETE, onMovieComplete);

function onMovieComplete (e:Event){
 // seu código aqui
}

O player só vai ativar esse video quando ele terminar o filme ou seja atingir o fim.

Referência:

http://help.adobe.co...#event:complete

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu implementei... mas não funcionou corretamente, ele acionou

a função mas não executou o video...

Desculpa a ignorancia mas o parametro passado e um

evento certo?, o evento VideoEvent.COMPLETE ,

no caso iria fica assim?

 

my_player.source = my_videos[0].@URL.VideoEvent.COMPLETE; ?

 

 

function makePlayer ():void {
	my_player = new FLVPlayback();
	my_player.skin ="SkinOverPlaySeekMute.swf";
	my_player.skinBackgroundColor = 0xAEBEFB;
	my_player.skinBackgroundAlpha = 0.5;

	my_player.x = video_x;
	my_player.y = video_y;
	my_player.width = 480;
	my_player.height = 270;
   
	main_container.addChild (my_player);
	my_player.addEventListener(VideoEvent.COMPLETE, onMovieComplete);
}

function onMovieComplete (e:Event){
		
	my_player.source = my_videos[0].@URL;	
	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque um trace()

 

Dentro do onMovieComplete para saber se ele ta invocando ou não essa função.

E sempre que você mandar ele tocar um novo video você tem que adicionar o listener novamente.

 

Então teria que ser assim:

onMovieComplete (e:Event){
 my_player.source = my_videos[0].@URL; 
 	my_player.addEventListener(VideoEvent.COMPLETE, onMovieComplete);
}

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Amigo o negocio ta dificiu, eu vi muitos tutoriais tudo mas não da pra implementar esse codigo que você me deu... não sei...

aprendendo eu minimizei o maximo o codigo deixei ele muito pequeno... so para funcionar... mas mesmo assim não tem como...

 

ja tentei de toda forma... mas ele simplesmente ignora esse comando que você me passou e não executa o primeiro video so o segundo..

enxuguei o maximo então... sei que estou aperriando um pouco mas poderia me ajuda partindo desse codigo que eu vou manda... e muito basico...

acho que ate fica mais fáciu..

 

System.useCodepage = true; // habilita acentos;
var arquivo:XML = new XML(); // cria a variável para ler o xml;
arquivo.load("arquivo.xml"); // manda a variável ler o arquivo.xml salvo anteriormente;
arquivo.ignoreWhite = true; // ignora espaços em branco no XML
arquivo.onLoad = function () { // após a leitura do XML, executa a ação:
		clip.contentPath = this.childNodes[0].childNodes[0].attributes.imagem;
}
preciso so que ele leia o primeiro video

clip.contentPath = this.childNodes[0].childNodes[0].attributes.imagem;
e depois leia o segundo

clip.contentPath = this.childNodes[0].childNodes[1].attributes.imagem;
isso acabando um começando o outro...

 

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você coloca todos os videos dentro de um Array

 

Dando um loop for no conteúdo do XML

 

Depois de ter feito isso só ir incrementando um contador e mostrando o proximo filme no evento de completo.

 

Abraços

 

PS: desculpe pelo código cheio de tag etc... foi o chrome quem meteu isso ai... e o forum caiu assim que postei essa resposta.

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.