Como faço para criar dinamicamente um objeto de Vídeo em AS2 e adicioná-lo a um MovieClip?

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

  •  09-06-2019
  •  | 
  •  

Pergunta

Eu preciso criar dinamicamente um objeto de Vídeo em ActionScript 2 e adicionar um clipe de filme.Em AS3 que eu acabei de fazer isso:

var videoViewComp:UIComponent; // created elsewhere    

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

Infelizmente, eu não consigo descobrir como fazer isso em AS2.O vídeo não é de uma criança de MovieClip, para attachMovie() não parece estar-me a qualquer coisa.Eu não vejo qualquer equivalente para AS3 do UIComponent.addChild() método.

Existe alguma maneira de criar dinamicamente um objeto de Vídeo em AS2 que, na verdade, mostra no palco?


Eu, potencialmente, precisa de vários vídeos ao mesmo tempo.É possível duplicar de que o objeto de vídeo?

Eu acho que tem outra solução de trabalho.Não é o ideal, mas ele se encaixa com algumas das coisas que eu tenho que fazer para outros componentes, por isso não é muito fora de lugar no projeto.Uma vez eu fico imaginado eu vou postar o que eu fiz aqui.

Foi útil?

Solução

Ok, eu tenho algo a trabalhar.

Primeiro, eu criei uma nova Biblioteca símbolo e o chamou de "VideoWrapper".Em seguida, adicionei um Vídeo único objeto que com uma IDENTIFICAÇÃO de "vídeo".

Agora, sempre que eu preciso adicionar dinamicamente um Vídeo para o meu estado, posso usar MovieClip.attachMovie() para adicionar uma nova cópia do objeto de Vídeo.

Para facilitar as coisas, eu escrevi um VideoWrapper classe que expõe a INTERFACE do usuário básica a manipulação de elementos (setPosition(), setSize(), etc).Assim, ao lidar com o Vídeo em regular UI layout do código de eu só usar esses métodos, então olha só como todos os meus outros elementos da INTERFACE do usuário.Ao lidar com o vídeo eu só acesso o "vídeo" - membro da classe.

A minha implementação é um pouco mais complicado, mas que é o básico de como eu tenho coisas de trabalho.Eu tenho um aplicativo de teste que está jogando 2 vídeos, um da câmera local e de um streaming da FMS, e ele está trabalhando muito.

Outras dicas

Para enviar você extremidades de uma linha, que é uma marca, eu uso o Símbolo de HTML Entidades de w3schools

Um exemplo, tirado de um projeto seria da seguinte forma:

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

A linha acima mostra que existe um diretório chamado biblioteca que contém o arquivo video.swf

Além disso, existe o arquivo video.xml no diretório de biblioteca.Esse arquivo contém as linhas

<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>

Há muito tempo atrás, meu filho Alex baixado o código de VideoDisplay classe e o diretório biblioteca de Internet

Eu tenho iproved o código da classe VideoDisplay.

por writting 2 membros

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

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

O programa que eu criei é mais do que um explorador e apresentador de .flv arquivos

Ele também é um explorador e apresentador do escolhido fragmentos de cada .flv arquivo

Agora o código de VideoDisplay classe é:

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;

    //}
}

Eu recomendo que você crie uma única instância do objeto de Vídeo, deixá-lo invisível (por exemplo, videoview.visible = false), e carregar o clipe quando você precisar dele, exibindo-o no momento apropriado.Você também pode usar swapDepth() se, torna-se necessário.

Vídeo de manipulação em AS2 não é a melhor coisa de sempre.A certeza de que você vai correr em uma série de pequenos problemas (loop sem lacunas, etc.).

a sua abordagem é o que eu costumo fazer, porque a outra opção é incluir o UIcomponent mediaDisplay em biblioteca e, em seguida, anexar o componente usando attachMovie, mas eu achei mediaDisplay eu pouco buggy então prefiro usar a primitiva de vídeo instância .

Espero que o código abaixo irá ser muito útil para você:

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top