problema muy raro con video player en web flash
Hola, estoy actualizando una web que está basada en una plantilla flash AS2 con carga de contenidos por xml.
Tengo un problema muy extraño con un reproductor de video. En la web al pinchar en un botón abre un vídeo que llama por xml. En total tengo siete botones para llamar a siete videos. Todo funciona bien si ves unos segundos de los videos, pero si ves dos o tres videos enteros luego el resto de videos dejan de funcionar.
El video carga pero el botón play queda desactivado.
No sé cuál puede ser el problema, parece como si el reproductor tuviera alguna restricción de volumen de mb`s ¿?... ¿A alguien le ha pasado algo parecido?
El grueso de código del reproductor está en unos de los archivos (galeria.fla) y luego también hay algo de código en el index.fla, no me manejo muy bien con código pero en lo que he revisado no encuentro nada.
Me he puesto en contacto con el diseñador pero no da señales de vida.
gracias por vuestra ayuda
Lukánicos
BuenAS:
¿Se trata de vídeos flv que reproduces con el componente de AS2, o de swf's que cargas y que tienen el vídeo incrustado en la línea de tiempo?
Si es el segundo caso... difícil solución. Yo he llegado a ver auténticas locuras con swf's pesando cerca de medio giga. Si además, cuando cargas un swf de estos (muy pesado) no te preocupas de descargar el anterior puedes saturar la memoria del equipo más potente.
Si se trata del primer caso, posiblemente haya algún tipo de error al asignar las rutas de los flv's al componente. Revisa que realmente das la ruta correcta. Debes tener algo así en tu código:
trace(variable_con_la_ruta_al_flv);
mediaPlayback.contentPath = variable_con_la_ruta_al_flv;
comprueba que variable_con_la_ruta_al_flv realmente tenga la ruta, haciendo un trace.
Un saludo.
triplej
Hola Lukanicos, gracias por la repuesta.
Claro, tienes razón, si fueran swf`s insertados sería bastante complejo de resolver. En este caso se trata de vídeos flv que se cargan al reproductor. Como todo va por xml, en galeria.xml es donde les he asignado asignado la ruta para que lo cargue:
<item video="data/videos/pistas.flv" width="640" height="480" desc="pistas"/> las rutas están correctas porque al pinchar en los distintos botones que llaman a los vídeos, todos cargan. Pero les pasa lo que comenté arriba.
Sólo tengo un archivo: galeria.fla en donde está el reproductor, voy a revisar el código, pero como son 7 vídeos distintos no tengo claro desde dónde debo asignar la ruta que me propones.
Lukánicos
Consulta el nombre que se le ha dado a la instancia del reproductor (seleccionalo y en el panel Propiedades mira el nombre que aparece). Ahora, busca en el código dicho nombre. Si se trata de, por ejemplo, "reproductorFlv", debe de aparecer algo así:
reproductorFlv.contentPath = variable;
En lo que YO LLAMO "variable" el código debe de haber asignado la ruta del flv. Si tienes 7 botones, posiblemente estas rutas estén asignadas a alguna propiedad de cada boton, o estén guardadas en un array... hay muchas posibilidades.
triplej
Es un reproductor con función play y stop y un contador de tiempo. En el código también tiene funciones para detener el sonido general de la web. El código no es mío, es una página ya creada que estoy actualizando.
play_btn.onRelease = function() {
stage_video.play();
_root.videoPlaying = true;
//
this.enabled = false;
pause_btn.enabled = true;
pause_btn.gotoAndStop(1);
if (_root.sound) {
_root.suono.stop();
_root.console.btn_sound.gotoAndPlay("close");
}
this.swapDepths(pause_btn);
};
pause_btn.onRelease = function() {
_root.videoPlaying = false;
stage_video.pause();
this.enabled = false;
//
play_btn.enabled = true;
if (_root.sound) {
_root.suono.start();
_root.console.btn_sound.gotoAndPlay("open");
}
this.swapDepths(play_btn);
};
//---------------------------------------------------------------------------------------------------------------------
// Función para cargar el vídeo
//---------------------------------------------------------------------------------------------------------------------
function videoLoader(vid) {
//trace("vid="+vid);
var listenerObject:Object = new Object();
listenerObject.playheadUpdate = function(eventObject:Object):Void {
Position = Math.round(stage_video.playheadPercentage);
if (Position>=100) {
stage_video.stop();
play_btn.enabled = true;
pause_btn.enabled = false;
pause_btn.swapDepths(play_btn);
_root.videoPlaying = false;
if (_root.sound) {
_root.suono.start();
_root.console.btn_sound.gotoAndPlay("open");
}
}
};
stage_video.addEventListener("playheadUpdate",listenerObject);
//video url
stage_video.contentPath = vid;
//
//---------------------------------------------------------------------------------------------------------------------
// sonido vídeo settings
//---------------------------------------------------------------------------------------------------------------------
var listenerObject:Object = new Object();
listenerObject.volumeUpdate = function(eventObject:Object):Void {
if (Math.round(eventObject.volume)<10) {
soundCheck = false;
}
if (Math.round(eventObject.volume)>10) {
}
};
video.stage_video.addEventListener("volumeUpdate",listenerObject);
//
function toCheckSound() {
if (soundCheck == false) {
btn_sound.gotoAndPlay("open");
video.stage_video.volume = 100;
soundCheck = true;
} else {
btn_sound.gotoAndPlay("close");
soundCheck = false;
video.stage_video.volume = 0;
}
}
//---------------------------------------------------------------------------------------------------------------------
// time control
//---------------------------------------------------------------------------------------------------------------------
var listenerObject:Object = new Object();
listenerObject.ready = function(eventObject:Object):Void {
timpTotalS = convertTime(stage_video.totalTime);
timpTotal = stage_video.totalTime;
};
stage_video.addEventListener("ready",listenerObject);
var listenerObject:Object = new Object();
listenerObject.playheadUpdate = function(eventObject:Object):Void {
time_mc.time.text = convertTime(eventObject.playheadTime)+" / "+timpTotalS;
};
stage_video.addEventListener("playheadUpdate",listenerObject);
//
function convertTime(sec:Number):String {
var min:Number = 0;
var ora:Number = 0;
if (sec>=60) {
min = Math.floor(sec/60);
sec = Math.floor(sec%60);
if (min>=60) {
ora = Math.floor(min/60);
min = Math.floor(min%60);
}
}
min = (min<10 ? "0"+Math.floor(min) : Math.floor(min));
sec = (sec<10 ? "0"+Math.floor(sec) : Math.floor(sec));
ora = (ora<10 ? "0"+Math.floor(ora) : Math.floor(ora));
var timp:String = (timpTotal/60/60/60>1 ? ora+":" : "")+min+":"+sec;
return timp;
}
}
//---------------------------------------------------------------------------------------------------------------------
// VideoLoader function call!
//---------------------------------------------------------------------------------------------------------------------
//videoLoader();
¿dónde debería definir la ruta hacia los vídeos?
salud!
triplej
El nombre de instancia es: stage_video
También en el archivo index.fla que es el que llama a galeria.swf sólo he encontrado esta línea de código en cuanto al vídeo:
var videoPlaying:Boolean = false; que por lo poco que sé me parece que hace que el vídeo no se reproduzca automáticamente. Y luego en el código del reproductor veo la función videoLoader(vid), pero no sé si por ahí puede venir el problema
triplej
¿Esta es la línea a la que te refieres?:
//video url
stage_video.contentPath = vid;
//
en ese caso ¿cómo defino las rutas que comentas?
gracias por la ayuda
Lukánicos
Exacto. Esa línea de código pertenece a la funcion
function videoLoader(vid) {
....
}
Mira dónde se llama a esta funcion, y QUÉ PARÁMETRO se le pasa. En algún lugar del código (que no has posteado, y por el comentario que aparece al final tiene la pinta de estar justo a continuación) debe existir algo así:
videoLoader(aqui_va_la_variable_con_la_ruta):
Posiblemente le pase un nodo del xml (del que hablabas) con la ruta, o haya guardado el valor de este nodo del xml en alguna propiedad de los botones.
Un saludo.
triplej
Hola Lukánicos, entiendo lo que dices, he revisado el código y no encuentro la variable que me comentas, simplemente en la última línea del código esto:
//---------------------------------------------------------------------------------------------------------------------
// VideoLoader function call!
//---------------------------------------------------------------------------------------------------------------------
//videoLoader();
Vuelvo a postear el código fuente que viene en el template, el anterior es con el que estoy trabajando, lo postee quitándole los tweens para ir al grano, pero igual me comí alguna línea.
código:
import mx.transitions.Tween;
import mx.transitions.easing.*;
import mx.video.*;
pause_btn.enabled = false;
play_btn.enabled = true;
pause_btn.gotoAndStop("selected");
//
//
play_btn.onRollOver = function() {
//new Tween(pause_mc, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(pause_mc, _alpha), 100, 15, false);
new Tween(play_btn.bg, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(play_btn.bg, _alpha), 40, 0.5, true);
};
play_btn.onRollOut = function() {
new Tween(play_btn.bg, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(play_btn.bg, _alpha), 0, 0.5, true);
};
pause_btn.onRollOver = function() {
//
new Tween(pause_btn.pause_mc, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(pause_btn.pause_mc, _alpha), 100, 0.5, true);
new Tween(pause_btn.bg, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(pause_btn.bg, _alpha), 40, 0.5, true);
};
pause_btn.onRollOut = function() {
//
new Tween(pause_btn.pause_mc, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(pause_btn.pause_mc, _alpha), 0, 0.5, true);
new Tween(pause_btn.bg, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(pause_btn.bg, _alpha), 0, 0.5, true);
};
//
play_btn.onRelease = function() {
//
//
//
stage_video.play();
_root.videoPlaying = true;
//
this.enabled = false;
new Tween(play_btn.bg, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(play_btn.bg, _alpha), 0, 0.5, true);
new Tween(play_btn.play_mc, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(play_btn.play_mc, _alpha), 0, 0.5, true);
//
pause_btn.enabled = true;
pause_btn.gotoAndStop(1);
//
if (_root.sound) {
_root.suono.stop();
_root.console.btn_sound.gotoAndPlay("close");
}
//
this.swapDepths(pause_btn);
};
pause_btn.onRelease = function() {
//
_root.videoPlaying = false;
//
stage_video.pause();
//
this.enabled = false;
//
play_btn.enabled = true;
new Tween(play_btn.play_mc, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(play_btn.play_mc, _alpha), 100, 0.5, true);
new Tween(pause_btn.pause_mc, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(pause_btn.pause_mc, _alpha), 0, 0.5, true);
new Tween(pause_btn.bg, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(pause_btn.bg, _alpha), 0, 0.5, true);
//
if (_root.sound) {
_root.suono.start();
_root.console.btn_sound.gotoAndPlay("open");
}
this.swapDepths(play_btn);
};
//
//
//
//
//---------------------------------------------------------------------------------------------------------------------
// Function to load video
//---------------------------------------------------------------------------------------------------------------------
function videoLoader(vid) {
//
//trace("vid="+vid);
//
var listenerObject:Object = new Object();
listenerObject.playheadUpdate = function(eventObject:Object):Void {
//
//
Position = Math.round(stage_video.playheadPercentage);
//
if (Position>=100) {
//
stage_video.stop();
//
play_btn.enabled = true;
new Tween(play_btn.play_mc, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(play_btn.play_mc, _alpha), 100, 0.5, true);
new Tween(pause_btn.pause_mc, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(pause_btn.pause_mc, _alpha), 0, 0.5, true);
new Tween(pause_btn.bg, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(pause_btn.bg, _alpha), 0, 0.5, true);
//
pause_btn.enabled = false;
pause_btn.swapDepths(play_btn);
//
_root.videoPlaying = false;
if (_root.sound) {
_root.suono.start();
_root.console.btn_sound.gotoAndPlay("open");
}
}
};
stage_video.addEventListener("playheadUpdate",listenerObject);
//video url
stage_video.contentPath = vid;
//
//
//
//---------------------------------------------------------------------------------------------------------------------
// Video sound settings
//---------------------------------------------------------------------------------------------------------------------
var listenerObject:Object = new Object();
listenerObject.volumeUpdate = function(eventObject:Object):Void {
if (Math.round(eventObject.volume)<10) {
soundCheck = false;
}
if (Math.round(eventObject.volume)>10) {
}
};
video.stage_video.addEventListener("volumeUpdate",listenerObject);
//
function toCheckSound() {
if (soundCheck == false) {
btn_sound.gotoAndPlay("open");
video.stage_video.volume = 100;
soundCheck = true;
} else {
btn_sound.gotoAndPlay("close");
soundCheck = false;
video.stage_video.volume = 0;
}
}
//---------------------------------------------------------------------------------------------------------------------
// time control
//---------------------------------------------------------------------------------------------------------------------
var listenerObject:Object = new Object();
listenerObject.ready = function(eventObject:Object):Void {
timpTotalS = convertTime(stage_video.totalTime);
timpTotal = stage_video.totalTime;
};
stage_video.addEventListener("ready",listenerObject);
var listenerObject:Object = new Object();
listenerObject.playheadUpdate = function(eventObject:Object):Void {
time_mc.time.text = convertTime(eventObject.playheadTime)+" / "+timpTotalS;
};
stage_video.addEventListener("playheadUpdate",listenerObject);
//
function convertTime(sec:Number):String {
var min:Number = 0;
var ora:Number = 0;
if (sec>=60) {
min = Math.floor(sec/60);
sec = Math.floor(sec%60);
if (min>=60) {
ora = Math.floor(min/60);
min = Math.floor(min%60);
}
}
min = (min<10 ? "0"+Math.floor(min) : Math.floor(min));
sec = (sec<10 ? "0"+Math.floor(sec) : Math.floor(sec));
ora = (ora<10 ? "0"+Math.floor(ora) : Math.floor(ora));
var timp:String = (timpTotal/60/60/60>1 ? ora+":" : "")+min+":"+sec;
return timp;
}
}
//---------------------------------------------------------------------------------------------------------------------
// VideoLoader function call!
//---------------------------------------------------------------------------------------------------------------------
//videoLoader();
gracias!
Lukánicos
¡¡Opps!, claro, que es AS2. Posiblemente esté en las acciones que lleven los botones. Selecciona algún botón y pulsa F9. Debe aparecer algún código para el controlador on(press).Algo así:
on (press) {
videoLoaded("flv/mi_pelicula.flv");
}
triplej
Sí es AS2, la cosa es que todo el código va en el primer fotograma, de hecho en la galeria todas las capas están con un fotograma, todo lo tengo que editar desde la biblioteca, no tengo la opción de pinchar en ningún botón. He encontrado más codigo referido al video player lo posteo:
var videoStatus:Boolean = false;
videoPlayer._alpha = 0;
videoPlayer.stage_video.stop();
//
videoPlayer.play_btn.enabled = true;
new Tween(videoPlayer.play_btn.play_mc, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(videoPlayer.play_btn.play_mc, _alpha), 100, 0.5, true);
new Tween(videoPlayer.pause_btn.pause_mc, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(videoPlayer.pause_btn.pause_mc, _alpha), 0, 0.5, true);
new Tween(videoPlayer.pause_btn.bg, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(videoPlayer.pause_btn.bg, _alpha), 0, 0.5, true);
//
videoPlayer.pause_btn.enabled = false;
if (_root.videoPlaying & _root.sound) {
_root.suono.start();
_root.console.btn_sound.gotoAndPlay("open");
videoPlayer.pause_btn.swapDepths(videoPlayer.play_btn);
//
_root.videoPlaying = false;
//
} else if (_root.videoPlaying & _root.sound == false) {
//
videoPlayer.pause_btn.swapDepths(videoPlayer.play_btn);
_root.videoPlaying = false;
//
}
}
}
//-------------------------------------------------------------------------------------
// This function load the video and set the size of the player
//-------------------------------------------------------------------------------------
function loadVideo(video, tWidth, tHeight) {
//
//
lightboxStage(true);
videoStatus = true;
Align();
//
new Tween(videoPlayer, "_alpha", mx.transitions.easing.Strong.easeOut, getProperty(videoPlayer, _alpha), 100, 24, false);
//
videoPlayer.videoLoader(video,tWidth,tHeight);
resizeVideoMc();
//
videoPlayer.play_btn.enabled = true;
videoPlayer.pause_btn.enabled = false;
//
//
}
//
//-------------------------------------------------------------------------------------
// The function to resize the video player
//-------------------------------------------------------------------------------------
function resizeVideoMc() {
//
videoPlayer.bg._width = vWidth;
videoPlayer.bg._height = vHeight;
//
videoPlayer.videoPlayer.play_btn.play_mc._x = vWidth/2;
videoPlayer.play_btn.play_mc._y = vHeight/2;
videoPlayer.play_btn.bg._width = vWidth;
videoPlayer.play_btn.bg._height = vHeight;
//
videoPlayer.pause_btn.pause_mc._x = vWidth/2;
videoPlayer.pause_btn.pause_mc._y = vHeight/2;
videoPlayer.pause_btn.bg._width = vWidth;
videoPlayer.pause_btn.bg._height = vHeight;
//
videoPlayer.time_mc._x = vWidth-10;
videoPlayer.time_mc._y = vHeight-36;
//
Align();
}
hay propiedades referidas al alineamiento al hacer resize
no sé si por aquí pueda estar el error....
triplej
Sigo sin resolver el problema del reproductor de vídeo. Dándole vueltas, me he dado cuenta de que cuando veo un vídeo completo y luego pincho para visualizar el otro, el contador de tiempo todavía almacena el tiempo del vídeo anterior ¿es posible que el fallo venga por ese lado? Algo así como que el reproductor almacene los datos de un vídeo y al cargar otro estos datos se superpongan y así sucesivamente.... hasta que el reproductor se sature. Realmente está es la sensación que da porque cuando veo sólo unos segundos de los vídeos el reproductor funciona perfectamente, el problema empieza a partir de ver dos vídeos enteros. No sé, sigo sin encontrar la solución.
¿Alguien ha tenido un problema parecido?
3j