2010-09-10 33 views
0

J'ai un site Web en ActionScript 3 qui a beaucoup d'animations FLV qui se produisent lorsque vous appuyez sur les boutons. En ce moment, voici comment je l'ai mis en place.si je charge un flv avec netStream, comment puis-je appeler une fonction quand le flv s'arrête de jouer

dans AS3, Im chargement FLv (qui sont des animations j'ai exporté sous forme de FLV à partir d'After Effects) avec le flux net. J'ai une minuterie configurée pour la même durée que les animations (FLV) et lorsque la minuterie s'arrête, elle appelle une fonction qui ferme le flux, en ouvre une nouvelle et joue une autre vidéo. Le seul problème que j'ai remarqué en utilisant les timers est que si la connexion est lente et que (l'animation) s'arrête pendant une seconde, le minuteur continue et appelle le flv suivant trop tôt.

Est-ce que quelqu'un connaît un moyen de charger un flv, ou swf d'ailleurs, à la fin de la lecture du flv? de sorte que le prochain FLV jouera toujours à la fin de l'exécution du FLV précédent, plutôt que d'utiliser des timers?

Je pense à Complet mais je ne sais pas comment l'implémenter !?

Répondre

0

La lecture séquentielle est assez facile à réaliser avec le framework OSMF, vous devriez le vérifier. Google "didacticiels osmf" et vous devriez trouver quelques tutoriels en ligne.

La structure est relativement récente, mais il semble qu'elle devienne la solution de facto pour la diffusion de contenu multimédia dans Flash, car elle ne se limite pas à la vidéo, mais aussi aux images audio &.

En tant que développeur, vous n'aurez pas à vous soucier des classes NetConnect de NetStream &. Développer des solutions vidéo, ainsi que des solutions d'images audio devrait être rationalisé et plus facile à gérer. La seule limitation est qu'elle nécessite Flash 10

+0

est-il impossible de le faire avec AS3 lui-même sans classes? Je vais vraiment à la recherche OSMF et cela a l'air vraiment cool mais j'ai seulement une semaine jusqu'à l'obtention du diplôme et j'ai besoin de terminer ce projet pour diplômé alors j'ai besoin de quelque chose qui ne va pas prendre e = moi longtemps à la recherche – tyepoe

+0

je ne sais pas pense que osmf te prendrait une semaine à comprendre! peut-être quelques heures pour aller à travers les tutoriels et obtenir l'idée générale. vérifier ce blog – PatrickS

+0

désolé, je ne pouvais plus éditer ... Osmf ne vous prendrait pas une semaine à comprendre! Au plus quelques heures pour aller à travers les tutoriels et obtenir l'idée générale. consultez ce http://www.rblank.com/, il ya le code pour un joueur de base, donc vous ne devriez pas commencer à partir de zéro, il a aussi quelques tutoriels vidéo. bien sûr, vous pouvez le faire sans osmf, une façon de récupérer la durée de la vidéo et de surveiller la position actuelle, dès que la position actuelle atteint la valeur de durée, vous pouvez commencer la vidéo suivante, la solution de Ross devrait bien fonctionner aussi – PatrickS

0

Voici un code pour vérifier quand un FLV se termine avec NetStream. Je fournis simplement des extraits, car je suppose que vous avez déjà lancé le FLV.

//create a netstream and pass in your connection 
var netStream:NetStream = new NetStream(conn); 

//add callback function for PlayStatus -event 
var client : Object = {}; 
client.onPlayStatus = onPlayStatus; 
netStream.client = client; 

//attach your NetStream to the connection as usual 
//--- 

//function that gets called onPlayStatus 
function onPlayStatus(info : Object) : void { 
    trace("onPlayStatus:" +info.code + " " + info.duration); 
    if (info.code == "NetStream.Play.Complete") { 
     //play the next FLV and so on 
    } 
} 

EDIT: Avec votre exemple de code, il ressemblera à ceci.

var nc:NetConnection = new NetConnection(); 
nc.connect(null); 
var ns:NetStream = new NetStream(nc); 

var listener:Object = new Object(); 
listener.onMetaData = function(md:Object):void{}; 
listener.onPlayStatus = function(info : Object) : void { 
    trace("onPlayStatus:" +info.code + " " + info.duration); 
    if (info.code == "NetStream.Play.Complete") { 
     //play the next FLV and so on 
    } 
}; 
ns.client = listener; 

vid1.attachNetStream(ns); 

const moviename1:String = "moviename2.flv"; 
const moviename1:String = "moviename3.flv"; 
var movietoplay:String = "moviename.flv"; 
ns.play(movietoplay); 
+0

FLV fonctionne déjà, mais je suis mal à comprendre cela. Je joins ma connexion à une vidéo sur la scène avec un nom d'instance, comment pourrais-je mettre votre code avec ce que j'ai: ... \t var nc: NetConnection = new NetConnection(); \t nc.connect (null); \t var ns: NetStream = nouveau NetStream (nc); \t vid1.attachNetStream (ns); \t var écouteur: Object = new Object(); \t listener.onMetaData = fonction (md: Object): void {}; \t ns.client = écouteur; \t const moviename1: String = "moviename2.flv"; \t const moviename1: String = "moviename3.flv"; \t \t var movietoplay: String = "moviename.flv"; \t ns.play (movietoplay); – tyepoe

+0

J'ai fourni un exemple avec votre code dans mon post maintenant – Ross