Декодируй flv в байтах в AS3 - PullRequest
       18

Декодируй flv в байтах в AS3

1 голос
/ 27 ноября 2011

Я выполняю потоковую передачу файла flv через vlc media player, работающий в качестве сервера потоковой передачи http. Так что я могу получить байты, но как их расшифровать?

Должен ли я взять float из URLStream с помощью readFloat () или простые байты с readBytes ()?

1 Ответ

1 голос
/ 27 ноября 2011

До тех пор, пока потоковая передача выполняется только в формате flv, вы можете использовать NetStream.appendBytesAction и NetStream.appendBytes для потокового воспроизведения http в формате http.Оформите следующую запись в блоге на ByteArray.org, а также приведенный ниже быстрый пример:

AppendBytes


Инициализация воспроизведения:

var video:Video = new Video(width, height);
var video_nc:NetConnection = new NetConnection();
var video_ns:NetStream = new NetStream();

video_nc.connect(null);
video_ns.play(null);
video_ns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);

video.attachNetStream(video_ns);

Обработчик ProgressEvent.PROGRESS:

video_ns.appendBytes(bytesAvailable);

Это, по сути, его часть, bytesAvailable будет представлять прочитанные байты из буфера данных события.Полный пример приведен ниже:

package
{

import flash.display.Sprite;
import flash.events.NetStatusEvent;
import flash.events.ProgressEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.net.NetStreamAppendBytesAction;
import flash.net.URLRequest;
import flash.net.URLStream;
import flash.utils.ByteArray;

[SWF(width="1280", height="720")]
public class NetStreamAppendBytes extends Sprite
{

    var video:Video;
    var video_nc:NetConnection;
    var video_ns:NetStream;

    var video_stream:URLStream; 

    public function NetStreamAppendBytes()
    {
        super();

        video_nc = new NetConnection();
        video_nc.connect(null);

        video_ns = new NetStream(video_nc);
        video_ns.client = this;
        video_ns.addEventListener(NetStatusEvent.NET_STATUS, ns_statusHandler);

        video = new Video(1280, 720);
        video.attachNetStream(video_ns);
        video.smoothing = true;

        video_ns.play(null);
        video_ns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);

        video_stream = new URLStream();
        video_stream.addEventListener(ProgressEvent.PROGRESS, videoStream_progressHandler);

        video_stream.load(new URLRequest("path_to_flv"));

        addChild(video);
    }

    private function ns_statusHandler(event:NetStatusEvent):void
    {
        trace(event.info.code);
    }

    private function videoStream_progressHandler(event:ProgressEvent):void
    {
        var bytes:ByteArray = new ByteArray();

        video_stream.readBytes(bytes);
        video_ns.appendBytes(bytes);
    }

}

}

Удачи!

...