2

AS3 でのビデオ接続用に標準の NetStream があります。

コード:

public class VideoInit extends MovieClip
{
    import flash.media.Video;
    import flash.net.NetConnection;
    import flash.net.NetStream;
    import flash.events.NetStatusEvent;


    public var video:Video;
    public var nc:NetConnection;
    public var ns:NetStream;
    public var meta:Object;
    public var _duration; //  <----- the variable



    public function VideoInit()
    {
        video = new Video(480,270); 
        addChild(video);
        nc = new NetConnection();
        nc.connect(null);
        ns = new NetStream(nc);

        meta = new Object();

        ns.client = meta;
        video.attachNetStream(ns);
        ns.play("video.f4v"); 


        meta = new Object();

        meta.onMetaData = function(meta:Object) // <---- the method
        {
            _duration = meta.duration

        }
        ns.client = meta;
     }

これで、onMetaData メソッドが実行されるたびに、変数 _duration に値が格納されますが、デバッガー ステップがメソッドを終了した直後に、_duration 値が unindentified に戻されます。値をプッシュすることで、Array を回避しようとしましたが、同じことが起こり、Array がリセットされます。何が間違っている可能性がありますか?

編集:

継続時間の値を格納するオブジェクトは、onMetaData が完了するとすぐに破棄されます。どのように実装するかは問題ではありません。

4

1 に答える 1

3

投稿したコードはコンパイルされず、コンパイルされたとしても、他の問題を引き起こす可能性があります。

提案:メタオブジェクトを破棄し、代わりにns.client = this;を設定します。

これは機能します:

package
{
    import flash.events.Event;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.media.Video;
    import flash.net.NetConnection;
    import flash.net.NetStream;
    import flash.events.NetStatusEvent;

    public class VideoInit extends Sprite
    {
        private var video:Video;
        private var nc:NetConnection;
        private var ns:NetStream;
        private var _duration:Number; //  <----- the variable

        public function VideoInit()
        {
            addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        }

        private function onAddedToStage(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
            video = new Video(480,270); 
            addChild(video);
            nc = new NetConnection();
            nc.connect(null);

            ns = new NetStream(nc);
            ns.client = this;// meta;

            video.attachNetStream(ns);
            ns.play("video.f4v");
            stage.addEventListener(MouseEvent.MOUSE_DOWN, testTheValueOfDuration);
         }

         public function onMetaData(e:Object):void
         {
            _duration = e.duration
            trace('_duration:', _duration);

            testTheValueOfDuration();
         }

         private function testTheValueOfDuration(e:MouseEvent = null):void
         {
            trace('Seriously, what is the value of _duration?', _duration);
         }
    }
}
于 2012-11-11T04:09:07.423 に答える