2

ActionScript 2 で Video オブジェクトを動的に作成し、それをムービー クリップに追加する必要があります。AS3 では、次のようにします。

var videoViewComp:UIComponent; // created elsewhere    

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

残念ながら、AS2 でこれを実現する方法がわかりません。ビデオは MovieClip の子ではないため、 attachMovie() は何も得られないようです。AS3 の UIComponent.addChild() メソッドに相当するものもありません。

実際にステージに表示される AS2 で Video オブジェクトを動的に作成する方法はありますか?


ただし、一度に複数のビデオが必要になる可能性があります。そのビデオオブジェクトを複製することは可能ですか?

別のソリューションが機能していると思います。これは最適ではありませんが、他のコンポーネントに対して行う必要があることの一部に適合しているため、プロジェクト内であまり場違いではありません。私がそれを理解したら、私がしたことをここに投稿します。

4

5 に答える 5

1

タグである行の終わりを送信するために、 w3schoolsのHTMLシンボルエンティティを使用します

プロジェクトからの例は次のとおりです。

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

上記の行は、ファイルを含むlibraryというディレクトリがあることを示しています。video.swf

その上、ディレクトリライブラリにファイルvideo.xmlがあります。そのファイルには次の行が含まれています

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

ずっと前に私の息子のアレックスはインターネットからVideoDisplayクラスのコードとディレクトリライブラリをダウンロードしました

VideoDisplayクラスのコードを改善しました。

2人のメンバーを書くことによって

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

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

.flv私が作成したプログラムは、ファイルの探索者およびプレゼンター以上のものです

.flvまた、各ファイルの選択されたフラグメントのエクスプローラーおよびプレゼンターでもあります

これで、VideoDisplayクラスのコードは次のようになります。

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;

    //}
}
于 2010-12-02T11:35:01.353 に答える
1

わかりました、私は何かが働いています。

最初に、新しいライブラリ シンボルを作成し、「VideoWrapper」と名付けました。次に、ID が「video」の Video オブジェクトを 1 つ追加しました。

これで、ステートにビデオを動的に追加する必要があるときはいつでも、MovieClip.attachMovie() を使用して、ビデオ オブジェクトの新しいコピーを追加できます。

簡単にするために、基本的な UI 要素の処理 (setPosition()、setSize() など) を公開する VideoWrapper クラスを作成しました。したがって、通常の UI レイアウト コードでビデオを扱うときは、これらのメソッドを使用するだけなので、他のすべての UI 要素と同じように見えます。ビデオを扱うときは、クラスの「ビデオ」メンバーにアクセスするだけです。

私の実際の実装はもう少し複雑ですが、それが私が物事を機能させる方法の基本です。ローカル カメラからのビデオと FMS からのストリーミングの 2 つのビデオを再生するテスト アプリがあり、うまく機能しています。

于 2008-09-10T19:51:08.540 に答える
0

Videoオブジェクトの単一インスタンスを作成し、非表示のままにして(つまりvideoview.visible = false)、必要なときにクリップをロードして、適切なタイミングで表示することをお勧めします。swapDepth()必要に応じてご利用いただけます。

AS2でのビデオ処理は、これまでで最高のものではありません。多くの小さな問題(ギャップのないループなど)に遭遇するので安心してください。

于 2008-09-10T00:57:03.803 に答える
0

他のオプションは、UIcomponent mediaDisplay をライブラリに含めてから、attachMovie を使用してそのコンポーネントをアタッチすることですが、mediaDisplay には少しバグがあることがわかったので、プリミティブ ビデオ インスタンスを使用することを好みます。

于 2008-09-19T02:56:50.727 に答える
0

以下のコードが非常に役立つことを願っています。

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
于 2010-08-30T19:03:04.140 に答える