Créer une image de fond à partir d'un FLV

1 view
Skip to first unread message

Nairus

unread,
Jun 23, 2009, 6:02:33 AM6/23/09
to VEGAS - ECMASCript & ActionScript OpenSource framework
Hello,

J'ai repris le framework Astr avec l'example evideo pour faire un
player vidéo avec des features en plus.
J'ai plusieurs soucis:

1- Je dois récupérer une image de la vidéo courante et la poser dans
le player.

J'ai rajouté une propriété "frame" dans le VideoVO pour rendre ça
dynamique.

dans le controller ChangeVideo.handleEvent je fais :
...
var expert:NetStreamExpert = factory.getObject
( ExpertList.VIDEO_STREAM_EXPERT ) as NetStreamExpert ;
if ( expert != null )
{
expert.close() ;
expert.play( url ) ;
expert.pause() ;

if( vid.frame > -1 )
{
var netStream:NetStream = expert.netStream ;
var bitmap:BitmapData = new BitmapData
( expert.video.width , expert.video.height ) ;

bitmap.draw( netStream.seek( vid.frame ) ) ;

var picture:Bitmap = new Bitmap( bitmap ) ;

var player:Background = factory.getObject
( "video_player" ) ;
if( player != null )
{
player.addChild( picture ) ;
}
}
...

A la compilation j'ai cette erreur:
Contrainte implicite d'une valeur du type void vers un type sans
rapport flash.display:IBitmapDrawable.

bitmap.draw(netStream.seek( vid.frame ) ) ;

Ce qui est logique car la class NetStream n'implémente pas
l'interface.

En fait j'ai suivi ce topic sur mediabox : http://flash.mediabox.fr/index.php?showtopic=71465
Mais il date un peu.

2- je dois faire la même chose sur les Bitmap des DashBoardButton

Tu aurais un conseil ou une idée de comment faire?
Merci.

A++
NairuS

PS: Je fais des tests, j'ai pas fait de DisplayList encore!!

ekameleon

unread,
Jun 23, 2009, 6:07:18 AM6/23/09
to veg...@googlegroups.com
Hello :)

rapido car je dois partir dans peu de temps :)

BitmapData.draw prend en paramètre un DisplayObject.. donc ton objet Video ou tout autre Sprite, Shape, MovieClip, TextField, etc...

Tu ne peux pas faire ce que tu fais avec :


 bitmap.draw( netStream.seek( vid.frame ) ) ;

Là cela n'a aucun sens ;)

NetStream gère un flux vidéo et pas son affichage c'est l'objet de type Video qui gère l'affichage et donc qui te permettra de faire la capture bitmap. Cible donc l'objet vidéo ;)

PS : attention au notion de sécurité avec BitmapData.draw() si tu utilises une vidéo hébergée sur un serveur distant.

EKA+ :)

NairuS

unread,
Jun 23, 2009, 6:24:38 AM6/23/09
to veg...@googlegroups.com
RE,

Le 23 juin 2009 12:07, ekameleon <ekam...@gmail.com> a écrit :
Hello :)

rapido car je dois partir dans peu de temps :)

BitmapData.draw prend en paramètre un DisplayObject.. donc ton objet Video ou tout autre Sprite, Shape, MovieClip, TextField, etc...

Tu ne peux pas faire ce que tu fais avec :


 bitmap.draw( netStream.seek( vid.frame ) ) ;

Là cela n'a aucun sens ;)
Oui, tout à fait le topic est complètement faux ! C'est étonnant :)
Si je fais ça :
     bitmap.draw( NetStreamExpert( expert.seek( vid.frame ) ).video ) ;
ca devrait être mieux.
  
NetStream gère un flux vidéo et pas son affichage c'est l'objet de type Video qui gère l'affichage et donc qui te permettra de faire la capture bitmap. Cible donc l'objet vidéo ;)
Je dois remplacer également le bitmap dans les dashboard button au moment du addVideo ?
Il est vieux, mais on dirait qu'il fait ce que j'ai besoin.
 
PS : attention au notion de sécurité avec BitmapData.draw() si tu utilises une vidéo hébergée sur un serveur distant.
Ok, normalement ca restera interne mais on ne sait jamais. 

NairuS

unread,
Jun 23, 2009, 7:48:11 AM6/23/09
to veg...@googlegroups.com
Le 23 juin 2009 12:24, NairuS <nicolas...@gmail.com> a écrit :
RE,

Le 23 juin 2009 12:07, ekameleon <ekam...@gmail.com> a écrit :

Hello :)

rapido car je dois partir dans peu de temps :)

BitmapData.draw prend en paramètre un DisplayObject.. donc ton objet Video ou tout autre Sprite, Shape, MovieClip, TextField, etc...

Tu ne peux pas faire ce que tu fais avec :


 bitmap.draw( netStream.seek( vid.frame ) ) ;

Là cela n'a aucun sens ;)
Oui, tout à fait le topic est complètement faux ! C'est étonnant :)
Si je fais ça :
     bitmap.draw( NetStreamExpert( expert.seek( vid.frame ) ).video ) ;
ca devrait être mieux.
  
Ca fonctionne nickel. Je vais tester sur les DashBoardButton maintenant.

NairuS

unread,
Jun 23, 2009, 8:31:17 AM6/23/09
to veg...@googlegroups.com
Le 23 juin 2009 13:48, NairuS <nicolas...@gmail.com> a écrit :


Le 23 juin 2009 12:24, NairuS <nicolas...@gmail.com> a écrit :

RE,

Le 23 juin 2009 12:07, ekameleon <ekam...@gmail.com> a écrit :

Hello :)

rapido car je dois partir dans peu de temps :)

BitmapData.draw prend en paramètre un DisplayObject.. donc ton objet Video ou tout autre Sprite, Shape, MovieClip, TextField, etc...

Tu ne peux pas faire ce que tu fais avec :


 bitmap.draw( netStream.seek( vid.frame ) ) ;

Là cela n'a aucun sens ;)
Oui, tout à fait le topic est complètement faux ! C'est étonnant :)
Si je fais ça :
     bitmap.draw( NetStreamExpert( expert.seek( vid.frame ) ).video ) ;
ca devrait être mieux.
  
Ca fonctionne nickel. Je vais tester sur les DashBoardButton maintenant.
 
En fait la capture se fait bien mais j'ai un problème de progress bar qui n'arrive pas à se caler sur la vidéo.
Dans ChangeVideo, j'essaie de stoper l'expert pour reprendre du début mais ça marche pas:
  if( vid.frame > -1 )
  {
  var bitmap:BitmapData = new BitmapData( expert.video.width , expert.video.height ) ;

   
  bitmap.draw( NetStreamExpert( expert.seek( vid.frame ) ).video ) ;
   
  var player:Background = factory.getObject( DisplayList.VIDEO_PLAYER ) ;

  if( player != null )
  {
  player.addChild( new Bitmap( bitmap ) ) ;

  }
  expert.close() ;
  expert.play( url ) ;
  expert.pause() ;
  }

par contre si je commente ce bout de code, la progress bar fonctionne à nouveau ?

ekameleon

unread,
Jun 23, 2009, 1:20:43 PM6/23/09
to veg...@googlegroups.com
Hello :)

Rapidement car je dois aller prendre une douche lol

1 - évite dand un controller ou autre de faire des :


var bitmap:BitmapData = new BitmapData( expert.video.width , expert.video.height ) ;

new Bitmap( bitmap ) ;

en fait faut éviter de faire à chaque fois des BitmapDatas surtout pour remplacer un autre sans le stocker en mémoire dans une propriété de la classe... pourquoi ? Car ensuite à chaque changement visuel tu vas avoir un soucis car ton bitmapdata va rester en mémoire... Faut jamais oublier d'utiliser bitmapData.dispose() avant de supprimer un BitmapData... un simple delete ou un simple remplacement d'un BitmapData par un autre ne suffit pas ! pour libérer la mémoire faut bien maitriser les références des BitmapData et ne pas les laisser en local comme tu me fais

2 - Je pige pas ton problème et tu donnes pas assez d'infos pour que je t'aide sur ce coup là

Faut que tu isoles ton problème.. regarde bien comment fonctionne ta progressbar etc.. regarde si tu as pas oublié un truc niveau de la taille de la progressbar ou autre ...

Ensuite si tu arrives pas à solutionner, envois un message avec un zip contenant ton soucis (que ton soucis et pas le reste ;) on pourra en discuter avec un code complet, c'est plus simple :)

eKA+ :)
Reply all
Reply to author
Forward
0 new messages