Comunidad de diseño web y desarrollo en internet online

Problema con screenshot en AS3

Citar            
MensajeEscrito el 20 May 2014 03:09 pm
Hola a todos, necesito hacer un "screenshot" de toda mi película SWF pulsando en un botón.
Consigo hacer scrrenshot de un MC en concreto, pero no consigo hacer que me haga el screenshot de toda la película.
Tengo algo tal que así:

Código ActionScript :

var root_mc:MovieClip = MovieClip(root);
var PIXEL_BUFFER:uint = 1;
var bitmapData:BitmapData = new BitmapData(_w + 5, _h + 5, true, 0xffffff);
bitmapData.draw(root_mc, new Matrix(1, 0, 0, 1, PIXEL_BUFFER, PIXEL_BUFFER));
var pngEncoder:PNGEncoder = new PNGEncoder();
var byteArray:ByteArray = PNGEncoder.encode(bitmapData);

Tengo todo el código en clases, nada en línea de tiempo.
El error que me da es que root==null.
Alguien sabe como puedo solucionarlo?

Muchas gracias

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 May 2014 07:10 pm
Probaste algo así?

Código ActionScript :

var myBitmapData:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight);
myBitmapData.draw(stage);


Eso si est[a en el timeline principal

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 May 2014 08:46 am
Hola Jorge, antes de nada, gracias por tu respuesta, pero haciendo lo que dices me da el siguiente error:

SecurityError: Error #2123: Violación de la seguridad Sandbox: BitmapData.draw: file:///C:/misFlash/swf/mipelicula.swf no puede acceder a rtmp://localhost:1935/fitcDemo. No se pudo acceder a ningún archivo de política.

Te cuento un poco como tengo mi películas:
En línea de tiempo no tengo nada.
Desde el .fla cargo la clase Main.as en la que recibo parámetros.
Del Main cuelga la clase Home.as y desde esta cuelgan varias clases, entre las que se encuentra la clase Screenshot.as desde la cual llamo al código que he puesto anteriormente.
En mi película tengo creada una conexión contra un servidor RED5, recibo y envío datos audiovisuales usando dicha conexión, tengo MC, textfields, ... que estan distribuidos en las diferentes clases que cuelgan de Home.as
¿Cómo puedo hacer para que no me esté dando dicho error?

Muchas gracias de nuevo.

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 May 2014 12:20 pm
Estas abriendo la peli haciendo doble click en el swf, eso te abre la peli con el sandbox local y te impide capturar de una URL, comienza mirando la peli desde un servidor local para cambiar de sandbox, algo como http://localhost/misflash/mipeli.html y fijate si te sale error.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 May 2014 02:45 pm
Hola Jorge, hecompilado la película y la he visualizado desde página web y me sigue apareciendo el mismo error.
Parece como si al hacer el "bitmapData.draw(stage, ...)" ejecutara todo el código en vez de capturar lo que hay en el stage en ese momento.

Alguna idea?
Muchas gracias

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 May 2014 02:58 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 May 2014 03:06 pm
Hola Jorge, gracias por el link, ahora lo reviso.
Sólo una duda, porqué necesito un crossdomain? Si hace un screenshot, no entiendo porqué se está metiendo en si tengo una conexión rtmp abierta o no. Entiendo que el .draw, lo que debería hacer una foto del stage y no meterse en como están los adentros del mismo.

Muchas gracias

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 May 2014 03:15 pm
Evita que hagas capturas de películas en estreno o de la transmisión exclusivísima de los Oscars ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 May 2014 03:40 pm
Hola Jorge,
He creado un archivo crossdomain.xml:

Código XML :

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="http://localhost"/>
<allow-access-from domain="rtmp://localhost:1935/fitcdemo"/>
</cross-domain-policy>

Pero donde debo colocarlo? Donde debo llamarlo?

Gracias

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 May 2014 03:53 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 May 2014 04:06 pm
Muchas gracias Jorge, le echaré un ojo a ver si saco algo en claro.

Gracias.

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 May 2014 07:35 pm
Quizas podes evitar acceder al stage.
Si Main.as es tu clase "iniciadora"....

Código ActionScript :

class Main extends Sprite {
public static var instance:Main ;
public function Main():void{
instance = this ;  // con esto guardas la referencia a Main.
}
}

// ahora en la clase que hagas la captura:
public function capture():void{
var bd:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,false,stage.color);
bd.draw(Main.instance); // ahi te tendria que andar...
}


El único tema aca es si estas cargando un video o tratando de capturar un Loader... en ese caso segui el metodo de Jorge

Por rodrigolopezpeker

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 May 2014 09:34 am
Hola rodrigolopezpeker, gracias por tu tiempo.
Desafortunadamente, siempre voy a tener uno o varios "live videos".
Voy a ver si logro aclararme con el crossdomain ...

Muchas gracias

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 May 2014 11:32 am
Hola de nuevo, he hecho lo siguiente, pero al ser mi primera vez con un crossdomain no sé si lo estoy haciendo bien. Alguien me puede echar una mano?
En mi servidor de streaming he puesto el archivo crossdomain.xml:

Código XML :

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
   <site-control permitted-cross-domain-policies="all"/>
   <allow-access-from domain="*"/>
</cross-domain-policy>

En mi Flash, cuando creo los NetStream que emitirán y recibirán videos les añado:

Código ActionScript :

myNetRemoteStream.checkPolicyFile = true;
myNetLocalStream.checkPolicyFile = true;

Antes de crear la conexión al Red5 y antes de hacer el "bitmapdata.draw" hago:

Código ActionScript :

Security.loadPolicyFile("http://myRED5ServerDomain:5080/crossdomain.xml");

Tengo que acceder por dicho puerto porque el puerto 80 lo tengo ocupado para el Red5 tunneled, pero el archivo crossdomain.xml es visible desde un navegador.

aun así me sigue dando el mismo error. Alguien me puede arrojar un poco de luz sobre donde estoy fallando?

Muchas gracias

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 May 2014 01:48 pm
Hay un truco que mencionan en ese hilo que parece funcionar. Juto antes de hacer el screenshot te desenganchas del stream

m_oVideo.attachNetStream(null);

haces el screenshot y te vuelves a enganchar

m_oVideo.attachNetStream(m_oNetStream);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.