Estoy desarrollando una web que contiene una galeria de videos (los eventos están construidos con Delegate) que muestran los diferentes trabajos de una empresa.
El visor de vídeo está basado en NetStream.
Cuando pulso en un thumbnail de la galería de videos, me reproduce sin problemas el video... Pero lo que no hace es hacerme la precarga, sino que para que se reproduzca el vídeo hay que esperar a que se cargue completamente, cosa que no es válida.
Lo curioso es que si lanzo el stream.play(ruta_video) desde donde tengo la programación, si funciona la barra... pero si lo hago desde cualquier thumbnail de la galería de trabajos, funciona todo menos la barra de carga.
Se me ocurre que puede ser que deba pasar la variable stream como propiedad de Delegate, pero no estoy seguro si es eso.
Aquí pongo mi codigo para que podais decirme que ocurre. Parece algo largo, pero en realidad no tiene mucho...
Muchas, muchas gracias.
mig
Código ActionScript :
_global.creada = "no";
var videoTam:Object = new Object();
_global.cambio = true; /// controla si es pantalla completa o no
var pausePlay:Boolean = true; /// Controla si el video esta pausado o en play
var pathT:Rutas = new Rutas (); /// inicializa la clase Rutas; //////////////// RUTA PARA LA INFO DE CADA TRABAJO. aqui estan las RUTAS necesarias.
var timeline:MovieClip =pathT.rutaContVideoTrab ; //// ruta en la que voy a vincular el contenedor del video
var nDownload:Number; /// crea un set interval que controle la gestión de la barra de descarga progresiva
var nPlayback:Number; /// crearun set interval que controle la posicion del slider en el movimiento del video
// ---------------- NetConnection and NetStream Objects --------------//
/// crea la instancia del movie clip donde se muestra el video
if (creada == "no") { // comprueba si ya tenemos instancia o no
_global.video_container = timeline.attachMovie ('video_container', 'video_container', timeline.getNextHighestDepth ());
creada = "si";
var connection_nc:NetConnection = new NetConnection ();
connection_nc.connect (null);
var stream:NetStream = new NetStream (connection_nc);
stream.setBufferTime(5);
video_container.mivideo.my_video.attachVideo (stream);
video_container.mivideo.my_video.smoothing = true;
//////////// posicionamos la instancia en el escenario en su posición inicial
video_container._x = 10;
video_container._y = 117;
////// cambiar el tamaño del video dependiendo de la variable _tipodemedia
_global._minW = 700; // es el tamaño del vídeo MAXIMO
_global._minH = 390;
video_container.mivideo.my_video._height = _minH;
video_container.mivideo.my_video._width = _minW;
}
//-----------------------------------onStatus Event Handlers -------------------//
stream.onStatus = function(obj:Object):Void {
trace(obj.code);
if (obj.code == "NetStream.Play.Start") {
}
if (obj.code == "NetStream.Play.Stop") {
clearInterval(nPlayback);
video_container.mcBuffer._visible = false;
}
if (obj.code == "NetStream.Play.StreamNotFound") {
trace("movie cannot be found");
}
if (obj.code == "NetStream.Buffer.Full") {
video_container.mcBuffer._visible = false;
}
//if (obj.code == "NetStream.Buffer.Empty" && !movieEnded) {
if (obj.code == "NetStream.Buffer.Empty") {
trace("buffer empty");
video_container.mcBuffer._visible = true;
}
};
stream["onMetaData"] = function(obj:Object):Void {
duration = obj.duration;
}
//----------------------------------------PLAYBACk PROGRESS ----------------------------------//
var percentPlayed:Number;
function playback():Void {
percentPlayed = stream.time/duration*(620 - video_container.barra_vid.seek_slider._width);
video_container.barra_vid.seek_slider._x = percentPlayed;
}
//----------------------------- Download Progress --------------------//
var nBytesLoaded:Number;
var nBytesTotal:Number;
var percentageLoaded:Number;
function downloadProgress(_stream:NetStream):Void {
nBytesLoaded = _stream.bytesLoaded;
nBytesTotal = _stream.bytesTotal;
trace ("DOWNLOAD PROGRESS")
percentageLoaded = nBytesLoaded/nBytesTotal*100;
_root.xx.text = percentageLoaded;
video_container.barra_vid.seek_slider._xscale = percentageLoaded;
if (percentageLoaded == 100) {
clearInterval(nDownload);
}
}
//-----------------------------clear intervals ---------------------//
function clearIntervals():Void {
clearInterval(nDownload);
clearInterval(nPlayback);
}
////-----------------------BARRA DE DESPLAZAMIENTO ---------------------------------////
video_container.barra_vid.seek_slider.onPress = function():Void {
clearInterval(nPlayback);
this.startDrag(true, 0, this._y, (620 - video_container.barra_vid.seek_slider._width), this._y);
this.onEnterFrame = function():Void {
stream.seek(this._x*duration/620);
};
};
video_container.barra_vid.seek_slider.onRelease = function():Void {
this.stopDrag();
delete this.onEnterFrame;
nPlayback = setInterval(playback, 1000/24);
};
video_container.barra_vid.seek_slider.onReleaseOutside = video_container.barra_vid.seek_slider.onRelease;
////// lanzarVideo ("PIA.flv", stream);
/* ----------------- acciones para el video ------------------------- */
///////// funcion par LANZXAR EL VIDEO CORRESPONDIENTE
function lanzarVideo (ruta_video:String, _stream:NetStream):Void {
video_container._visible = true;
var ruta_video = "img/gr/"+ruta_video; // seleccionamos el video que se va a visionar
_stream.play (ruta_video);
clearIntervals();
nDownload = setInterval(downloadProgress, 1000/24,_stream);
nPlayback = setInterval(playback, 1000/24);
}
// elimina el vídeo si lo hay
quitarVideo = function ():Void {
if (stream != undefined) {
stream.close();
clearIntervals();
creada = "no"; // switch para crear instancia de vídeo
video_container._visible = false;
}
}
/// esta función la uso cuando sube y baja la galeria
pausarVideo = function (valor:Boolean):Void {
if (stream != undefined) {
stream.pause(not valor); /// pausamos el video
video_container._visible = valor;
trace ("pausar conexion");
}
}
