Comment puis-je créer dynamiquement un objet Vidéo en AS2 et l'ajouter à un MovieClip?

StackOverflow https://stackoverflow.com/questions/52732

  •  09-06-2019
  •  | 
  •  

Question

J'ai besoin de créer dynamiquement un objet Vidéo dans ActionScript 2 et l'ajouter à un clip.En AS3, je viens de le faire:

var videoViewComp:UIComponent; // created elsewhere    

videoView = new Video();
videoView.width = 400;
videoView.height = 400;
this.videoViewComp.addChild(videoView);

Malheureusement, je ne peux pas comprendre comment accomplir cela en AS2.La vidéo n'est pas un enfant de MovieClip, de sorte que la méthode attachMovie() ne semble pas m'avoir fait quoi que ce soit.Je ne vois pas d'équivalent à AS3 du composant UIComponent.méthode addChild() soit.

Est-il possible de créer dynamiquement un objet Vidéo dans AS2 qui montre, en réalité, sur la scène?


J'ai éventuellement besoin de plusieurs vidéos en un temps si.Est-il possible de dupliquer cette vidéo de l'objet?

Je pense que j'ai une autre solution de travail.Il n'est pas optimale, mais elle s'accorde avec certaines des choses que j'ai à faire pour les autres composants de sorte qu'il n'est pas trop de place dans le projet.Une fois que j'aurai trouvé, je vais poster ce que j'ai fait ici.

Était-ce utile?

La solution

Ok, j'ai quelque chose à travailler.

Tout d'abord, j'ai créé un nouveau symbole de la Bibliothèque et l'a appelé "VideoWrapper".Ensuite, j'ai ajouté une Vidéo unique de l'objet avec l'ID est "vidéo".

Maintenant, toutes les fois que j'ai besoin d'ajouter dynamiquement une Vidéo de mon état, je peux utiliser MovieClip.la méthode attachMovie() pour ajouter une nouvelle copie de l'objet Vidéo.

Pour faciliter les choses, j'ai écrit un VideoWrapper classe qui expose l'INTERFACE utilisateur de base de l'élément de manipulation (setPosition(), setSize(), etc).Quand on parle de la Vidéo ordinaire dans la disposition de l'INTERFACE utilisateur code je viens d'utiliser ces méthodes de sorte qu'il ressemble à tous les autres éléments de l'INTERFACE utilisateur.Lorsque vous traitez avec de la vidéo, j'ai juste accès à la "vidéo" membre de la classe.

Mon réel de la mise en œuvre est un peu plus compliqué, mais c'est les bases de la façon dont j'ai obtenu les choses de travail.J'ai une application de test en cours de lecture 2 vidéos, l'une à partir de la caméra locale et une diffusion à partir du FMS, et c'est génial de travailler.

Autres conseils

Pour vous envoyer les extrémités d'une ligne qui est un tag, j'utilise HTML Symbole des Entités à partir d' w3schools

Un exemple, pris à partir d'un projet serait comme suit:

< asset path="library\video.swf" />

La ligne ci-dessus montre qu'il existe un répertoire appelé la bibliothèque qui contient le fichier video.swf

En outre, il y a le fichier video.xml dans le répertoire de la bibliothèque.Ce fichier contient les lignes

<xml version="1.0" encoding="utf-8" >
<movie version="7">    
    <frame>
        <library>
            <clip id="VideoDisplay">
                <frame>
                    <video id="VideoSurface" width="160" height="120" />
                    <place id="VideoSurface" name="video" />
                </frame>
            </clip>
        </library>
    </frame>
</movie>

Il y a longtemps, mon fils Alex téléchargé le code de VideoDisplay classe et le répertoire de la bibliothèque à partir d'Internet

J'ai iproved le code de la classe VideoDisplay.

en écrivant 2 membres

 public function pos():Number
{
    return ns.time;
}

     public function close():Void
{
    return ns.close();
}

Le programme que j'ai créé est plus qu'un explorateur et présentateur de .flv fichiers

Il a également est un explorateur et un présentateur de la choisi fragments de chaque .flv fichier

Maintenant le code de VideoDisplay classe est:

class util.VideoDisplay
{
    //{ PUBLIC MEMBERS


    /**
    * Create a new video display surface
    */

    function VideoDisplay(targetURI:String, parent:MovieClip, name:String, depth:Number, initObj)

    {
        display = parent.attachMovie("VideoDisplay", name, depth, initObj);

        // create video stream
        nc = new NetConnection();
        nc.connect(targetURI);
        ns = new NetStream(nc);

        // attach the video stream to the video object
        display.video.attachVideo(ns);
    }

    /**
    * Video surface dimensions
    */
    function setSize(width:Number, heigth:Number):Void
    {
        display.video._width = width;
        display.video._height = heigth;
    }
    /**
    * Video clip position
    */
    function setLocation(x:Number, y:Number):Void
    {
        display._x = x;
        display._y = y;
    }

    /**
    * Start streaming
    * @param    url FLV file
    * @param    bufferTime  Buffer size (optional) 
    */
    public function play(url:String, bufferTime:Number):Void
    {
        if (bufferTime != undefined) ns.setBufferTime(bufferTime);
        ns.play(url);
    }
    /**
    * Pause streaming
    */
    public function pause():Void
    {
        ns.pause();
    }
    /**
    * Seek position in video
    */
    public function seek(offset:Number):Void
    {
        ns.seek(offset);
    }   

    /**
    * Get position in video
    */

     public function pos():Number
    {
        return ns.time;
    }

         public function close():Void
    {
        return ns.close();
    }

    //}

    //{ PRIVATE MEMBERS 

    private var display:MovieClip;
    private var nc:NetConnection;
    private var ns:NetStream;

    //}
}

Je vous recommande de créer une instance unique de l'objet Vidéo, laisser invisible (c'est à dire, videoview.visible = false), et de charger le clip quand vous en avez besoin, de les afficher au moment opportun.Vous pouvez également utiliser swapDepth() si cela devient nécessaire.

Vidéo de la manipulation en AS2 n'est pas la meilleure chose jamais.Rassurez-vous, vous allez rencontrer beaucoup de petits problèmes (en boucle sans lacunes, etc).

votre approche est ce que j'ai l'habitude de le faire parce que l'autre option est d'inclure le composant UIcomponent mediaDisplay dans la bibliothèque, puis l'attacher à l'aide de la méthode attachMovie mais j'ai trouvé mediaDisplay je peu buggé donc je préfère utiliser la primitive de la vidéo de l'instance .

J'espère que le code ci-dessous sera très utile pour vous:

import UTIL.MEDIA.MEDIAInstances

class Main

{
    static function main() {

        var MEDIAInstancesInstance :MEDIAInstances  = new MEDIAInstances (); 

        _root.Video_Display.play ("IsothermalCompression.flv", 0);

        _root.VideoDisplayMC.onPress = function() { 

        _root.Video_Display.seek (0);        

        } // _root.displayMC.onPress = function() {

    } // static function main() 

} // class Main 

// 

import UTIL.MEDIA.VideoDisplay  

class UTIL.MEDIA.MEDIAInstances             

    {  

    function MEDIAInstances() 

    {

    //                                            depth  
    _root.createEmptyMovieClip ("VideoDisplayMC", 500);   
    //
    var Video_Display:VideoDisplay 
    = 
    new VideoDisplay(_root.VideoDisplayMC, "Video_Display", 1); 

    Video_Display.setLocation(400, 0); Video_Display.setSize (320, 240);      
    //    
    _root.Video_Display = Video_Display;  _root.VideoDisplayMC._alpha = 75;      

    } // MEDIAInstances()

} // class UTIL.MEDIA.MEDIAInstances

//

class UTIL.MEDIA.VideoDisplay

{
    private var display:MovieClip, nc:NetConnection, ns:NetStream;

    function VideoDisplay(parent:MovieClip, name:String, depth:Number)

    {
        display = parent.attachMovie("VideoDisplay", name, depth);

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

        display.video.attachVideo(ns);
    }
    function setSize(width:Number, heigth:Number):Void

    { display.video._width = width; display.video._height = heigth;}

    function setLocation(x:Number, y:Number):Void { display._x = x; display._y = y;}

    public function play(url:String, bufferTime:Number):Void
    {
        if (bufferTime != undefined) ns.setBufferTime(bufferTime); ns.play(url);
    }
    //
    public function pause():Void { ns.pause();}
    //
    public function seek(offset:Number):Void { ns.seek(offset); }

} // UTIL.MEDIA.VideoDisplay
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top