Actionscript 3 Видео цикл - PullRequest
       41

Actionscript 3 Видео цикл

1 голос
/ 16 апреля 2020

Я хочу встроить видео в игру fla sh и сделать ее зацикленной. Есть ли способ сделать это? Как мой код или более вероятно .seek или .resume не дают никакого эффекта? Я использую неправильные команды или?

[Embed(source = "fast.flv", mimeType = "application/octet-stream")]
public var bytes:Class;
public var vidNS:NetStream 
public var video:Video = new Video(1280, 720);
public var ns:NetStream;    


public function Main() {
Doit();
}

    private function Doit():void{

    addChild(video);

        var vidNC:NetConnection = new NetConnection(); vidNC.connect(null);
        vidNS = new NetStream(vidNC);

        var metaListener :Object = new Object(); metaListener = { onMetaData: process_Metadata };
        vidNS.client = metaListener;
        vidNS.addEventListener(NetStatusEvent.NET_STATUS, videoStatusHandler);      

        vidNS.play(null);

    var file:ByteArray = new bytes();
    vidNS.appendBytes(file);
    video.attachNetStream(vidNS);

}   
        function process_Metadata (in_Data :Object):void
        {
            trace("duration is : " + in_Data.duration );
        }

    function videoStatusHandler (event:NetStatusEvent):void 
    {
        if (event.info.code == "NetStream.Buffer.Empty") 
        {
            trace('loop')
            vidNS.seek(0); vidNS.resume();
        }
    }   

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Так что спасибо V C. Один я закончил с этим кодом:

[Embed(source="1.flv", mimeType="application/octet-stream")]
public var bytes:Class;
public var vidNS:NetStream;
public var video:Video = new Video(1280, 720);
public var file:ByteArray = new bytes(); 
public var vidNC:NetConnection;
public var metaListener :Object;

public function Main() 
{
    Doit();
}

private function Doit():void
{
    addChild(video);

    vidNC = new NetConnection(); vidNC.connect(null);
    vidNS = new NetStream(vidNC);

    metaListener new Object(); metaListener = { onMetaData: process_Metadata };
    vidNS.client = metaListener;   

    vidNS.play(null);    
    vidNS.appendBytes(file); 
    video.attachNetStream(vidNS);    
} 

function process_Metadata (in_Data :Object):void
{
    trace("loop ");
            vidNS.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);
            vidNS.appendBytes(file);
}

Он работает так, как должен, но я не уверен, что это правильный способ сделать это ^^.

1 голос
/ 20 апреля 2020

Вы можете l oop, просто повторно передав байты в декодер (NetStream)

Возможно, вам также потребуется задействовать опцию RESET_BEGIN :

yourNS.appendBytesAction( NetStreamAppendBytesAction.RESET_BEGIN );

Попробуйте установить код, как показано ниже:

[Embed(source = "fast.flv", mimeType = "application/octet-stream")]
public var bytes:Class;

public var vidNS:NetStream;
public var video:Video = new Video(1280, 720);
public var ns:NetStream;

//# declare these vars outside of a function for global access
public var file:ByteArray = new bytes(); 
public var vidNC:NetConnection;
public var metaListener :Object;

public function Main() 
{
    Doit();
}

private function Doit():void
{
    addChild(video);

    vidNC = new NetConnection(); vidNC.connect(null);
    vidNS = new NetStream(vidNC);

    metaListener new Object(); metaListener = { onMetaData: process_Metadata };
    vidNS.client = metaListener;
    vidNS.addEventListener(NetStatusEvent.NET_STATUS, videoStatusHandler);      

    vidNS.play(null);

    //var file:ByteArray = new bytes();
    vidNS.appendBytes(file); //# feed video bytes to decoder
    video.attachNetStream(vidNS);

}   

function process_Metadata (in_Data :Object):void
{
    trace("duration is : " + in_Data.duration );
}

function videoStatusHandler (event:NetStatusEvent):void 
{
    if (event.info.code == "NetStream.Buffer.Empty") 
    {
        trace('now doing: looping...')

        //# there is no timeline ".seek" in appendBytes mode, use ".seek" to clear the buffer for a new re-feed

        vidNS.seek(0); //clears the current buffer (video data is removed)
        vidNS.appendBytesAction( NetStreamAppendBytesAction.RESET_BEGIN ); //re-set timestamps for decoder
        vidNS.appendBytes(file); //re-feed video bytes to decoder

    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...