Porcentaje del buffer en FLVPlayback

35 views
Skip to first unread message

Iván Gajate

unread,
Oct 21, 2009, 11:22:33 AM10/21/09
to asna...@googlegroups.com
Hola chicos

estamos usando el componente flvplayback para reproducir un video muy
pesado por grande, no por largo, con lo que el tiempo de buffer es
elevado. El caso es que queremos indicar el porcentaje de buffer que
lleva, pero hemos mirado todas las propiedades y no encontramos nada
que lo indique.
Lo malo es que no es una cantidad fija, sino variable, depende de la
conexión del usuario, uno con una buena conexión puede requerir un
mega de buffer, pero otro con una mala, 5 megas, con lo que aunque
conozco los bytesLoaded, no se cuantos son los "totales" del buffer
para poder hacer el cálculo, no se si me explico.

Tenemos un plan B que es calcular la velocidad de descarga del
usuario, y hacer una estimación de cuanto buffer tiene que hacer, pero
claro, es una solución un poco...

Un saludo.


Javier Fernández Montes

unread,
Oct 21, 2009, 2:34:01 PM10/21/09
to asna...@googlegroups.com
hola Iván!

NetStream tiene una propiedad bufferTime a la que le pasabas segundos
de buffer, no peso, con lo que no hace falta calcular nada.

Para acceder al netstream de un flvplayback:

[code]
var flvpb:FLVPlayBack = tu_flvplayback;
var vp:VideoPlayer =
VideoPlayer( flvpb.getVideoPlayer(flvpb.activeVideoPlayerIndex) );
var ns:NetStream = NetStream(vp.netStream);
ns.bufferTime=5; // para 5 segundos
[/code]
Un saludo

Javier Fernández :: Drus Unlimited™
listas[at]drusunlimited[dot]com
http://drusunlimited.com

Ricardo Sánchez

unread,
Oct 21, 2009, 3:36:20 PM10/21/09
to asna...@googlegroups.com
Creo que lo que Iván quiere es mostrar el porcentaje que lleva el buffer de carga, tipo las películas en megavideo. Hace tiempo estuve yo investigando lo mismo para el flvplayback y no lo encontré, no sé si necesitará un media server.


2009/10/21 Javier Fernández Montes <lis...@drusunlimited.com>



--
Ricardo Sánchez Sotres
http://www.theso3.com
645 86 20 84

Mario

unread,
Oct 22, 2009, 4:12:22 AM10/22/09
to asna...@googlegroups.com
Hola Iván, no estoy seguro porque no lo he probado, pero creo que así podrías acceder al bufferLength

miFlvPlayback.getVideoPlayer(0).netStream.bufferTime

saludos,
Mario

2009/10/21 Ricardo Sánchez <odr...@gmail.com>

Iván Gajate

unread,
Oct 22, 2009, 6:50:33 AM10/22/09
to asna...@googlegroups.com
El bufferTime ya lo he probado, pero es el numero de segundos que hace buffer, pero es un valor raro, siempre es el mismo, solo se setea o se obtiene, pero no cambia según la carga, lo trazo y siempre es 0,1 o el valor que yo le ponga.

Mario

unread,
Oct 22, 2009, 7:44:25 AM10/22/09
to asna...@googlegroups.com
ei, antes lo he puesto mal, me refería al bufferLength, aunque supongo que le has dado unas vueltas, que según dicen en la api (aunque que funcione 100% es otro tema)

bufferLength
El número de segundos de datos almacenados actualmente en el búfer. Puede utilizar esta propiedad conjuntamente con NetStream.bufferTime para estimar cuánto le falta al búfer para llenarse (por ejemplo, para mostrar información al usuario que está esperando a que los datos se carguen en el búfer).

supongo que todo esto ya lo has mirado, ¿me pregunto si lo abran implementado bien en adobe o tendrá un bug? porque la verdad es que nunca me habían pedido que motorizase el porcentaje de buffer, a ver si sale!

Cay

unread,
Oct 22, 2009, 7:53:16 AM10/22/09
to asna...@googlegroups.com
el porcentaje "debiera" ser:
var porcentajeBuffer = miFlvPlayback.getVideoPlayer(0).netStream.bufferLength * 100 / miFlvPlayback.bufferTime;
Me consta que no va del todo bien... pero con un bufferTime de al menos 5 es relativamente confiable...

2009/10/22 Mario <mar...@gmail.com>

Iván Gajate

unread,
Oct 22, 2009, 11:06:08 AM10/22/09
to asna...@googlegroups.com
mmmm, ahora lo entiendo mejor
hemos subido el bufferTime a 5 y ahora vemos la diferencia:

bufferTime es el numero fijo que tiene que almacenar en buffer
bufferLength es el numero variable que va creciendo según se llena

pero sigo teniendo el problema de que no se cuanto buffer le tengo que poner para que no se corte.
Cada vez veo mas claro que voy a tener que hacer una estimación del ancho de banda del usuario para ponerle mas o menos buffer, no?

drusunlimited listas

unread,
Oct 22, 2009, 5:31:00 PM10/22/09
to asna...@googlegroups.com
La única forma de que no se corte *nunca* es ponerle de bufferTime lo
que dure el vídeo, que viene a ser como precargarlo entero o cargarte
el stream.

Si es para un fondo de página, como me estoy imaginando, yo lo haría,
pero trataría de optimizar al máximo el vídeo y estudiar bien la
secuencia de carga.

Si vas a calcular la velocidad de carga también puedes tener dos
vídeos, y ofrecer el más ligero para conexiones lentas.

Saludos!!

PD: si es para un fondo yo usaría un objeto vídeo en vez de un flvplayback ;-)

2009/10/22 Iván Gajate <ivang...@yahoo.es>:
--
Javier Fernández :: Drus Unlimited™
http://drusunlimited.com

Ivan Gajate

unread,
Oct 22, 2009, 6:29:35 PM10/22/09
to asna...@googlegroups.com
Efectivamente es para un video de fondo a pantalla completa, locuras del
cliente.
En una conexión no muy buena hay que descargar unos 2 megas si queremos que
luego no se corte antes de llegar al final del video, pero en una conexión
mala puede llegar a 5 megas! (el video completo son 10 megas).
No importa tanto si una vez comenzada la reproducción se para y vuelve a
hacer buffer, pero el primer tramo de carga quieren poner una cartela de
cargando (¿he dicho ya que son tonterias del cliente?). Por mi pondría un
pantallazo del primer fotograma del video, y que cuando pueda reproducirse
que empiece solito, pero parece que eso no es aceptable :(




Iván Gajate yporqueno.es - Programación Flash

xleon

unread,
Oct 22, 2009, 8:44:54 PM10/22/09
to asna...@googlegroups.com
Si miras cómo lo hace la librería de BulkLoader cuando carga un netStream, verás que el tio se lo ha montado muy bien.
Hace una estimación de la velocidad media de conexión del usuario. El tamaño de buffer lo cambia en función de dicho parámetro. A lo que para estar seguros le puedes aumentar un pelín. Y la mayoría de las veces el video se verá del tirón (lo he probado varias veces).
El problema es que algunas redes son muy inestables y con muchos picos. Pero es la mejor solución que he visto cuando se habla de descarga progresiva.

if (isVideo()  && metaData && !_canBeginStreaming){
                       var timeElapsed : int = getTimer() - responseTime;
                       // se issue 49 on this hack
                       if (timeElapsed > 100){
                           var currentSpeed : Number = bytesLoaded / (timeElapsed/1000);
                           // calculate _bytes remaining, before the super onProgressHandler fires
                           _bytesRemaining = _bytesTotal - bytesLoaded;
                           // be cautios, give a 20% error margin for estimated download time:
                           var estimatedTimeRemaining : Number = _bytesRemaining / (currentSpeed * 0.8);
                         var videoTimeToDownload : Number = metaData.duration - stream.bufferLength;
                            if (videoTimeToDownload > estimatedTimeRemaining){
                            fireCanBeginStreamingEvent();
                           }
                       }

http://code.google.com/p/bulk-loader/source/browse/trunk/src/br/com/stimuli/loading/loadingtypes/VideoItem.as

En situaciones de streaming hay otra solución mejor, que es servir al usuario un video con ancho de banda personalizado según su conexión.
--
http://www.xleon.net
http://www.xinterface.net
http://twitter.com/diegoxleon

xleon

unread,
Oct 22, 2009, 8:47:47 PM10/22/09
to asna...@googlegroups.com
Se me olvidaba, otro ñapilla que se puede hacer es aumentar el tiempo de buffer si alguna vez llega al límite.

paquo

unread,
Oct 23, 2009, 3:30:12 AM10/23/09
to ASNativos - Lista de Actionscript
Nosotros estamos también con el tema del buffer, no trabajamos con el
componente FLVplayback pero el problema es el mismo.

Parte de la solución la saque de aquí.
http://www.elbleg.com/actionscript/flash-video-calcular-el-tamano-del-buffer.html

de lo suyo he utilizado la clase, BandwidthDetector para calcular el
ancho de banda del usuario, una vez recogido ese dato más la duración
del video y el bitrate, utilizo la siguiente formula para calcular el
buffer:
duración * (bitRate / 8) / bandWidth = tiempoDescarga
tiempoDescarga - duración = diferencial

if(diferencial > 0){
//conexion lenta
nuevoBuffer = Math.ceil(diferencial);
}else{
//conexión rápida
nuevoBuffer = Math.ceil(tiempoDescarga);
}

coloco un buffer mínimo de 1 segundo.

Lo que hay que tener en cuenta es que la conexión muchas veces no es
lineal y en algunos casos con grandes parones, por lo que el calculo
del bandWidth no es fiable del todo.
Lo que hay que hacer es recalcular el buffer cuando falla
ampliándolo.
Hay que tener en cuenta que el buffer no puede ser nunca mayor que la
duración del video, tanto la general al principio como lo que queda
después del fallo.

No he tenido más remedio que meter la ñapilla porque las conexiones
son de lo más caprichoso.
Suerte

Iván Gajate

unread,
Oct 23, 2009, 4:16:52 AM10/23/09
to asna...@googlegroups.com
Hey! creo que es eso lo que necesitaba, si es que está todo inventáo ;)
voy a probarlo y os cuento que tal.
Gracias chicos!!

Carlos Barboni

unread,
Oct 23, 2009, 8:18:26 PM10/23/09
to asna...@googlegroups.com
No quiero cambiar la temática del hilo, pero tengo que resolver un problema similar al planteado.
Estoy usando este componente para video y lo tengo dentro de un movieclip con una clase.
Cuando hago:
 
var mivideo:MiVideo = new MiVideo();
addChild(mivideo);
 
se muestra y comienza la reproducción.
El asunto es como hago para detenerlo.
Si lo borro, el audio sigue funcionando, o mejor dicho, sigue funcionando pero no se ve.
 
Como debería hacer?.
 
Gracias.
Carlos

xleon

unread,
Oct 23, 2009, 9:28:16 PM10/23/09
to asna...@googlegroups.com
Yo creo que os complicais mucho la vida. Os recomiendo encarecidamente Pyro player. Una buena api de video. La interfaz te la creas tú, pero vamos, los problemas que habéis planteado en este post son de lógica más que de interfaz.

http://code.google.com/p/pyro-player/

xleon

unread,
Oct 23, 2009, 9:30:37 PM10/23/09
to asna...@googlegroups.com
Fijaros que peacho de controles de todo tipo:
http://gronour.com/pyro/doc/html/index.html

Nadie me paga por esto eh, pero es que realmente creo que vale la pena.

Carlos Barboni

unread,
Oct 24, 2009, 6:55:10 AM10/24/09
to asna...@googlegroups.com
muchas gracias XLeon !!!
Ya estoy metiendome con Pyro

Reply all
Reply to author
Forward
0 new messages