as3 Netstream appendBytes и ищет - PullRequest
       26

as3 Netstream appendBytes и ищет

1 голос
/ 13 сентября 2011

У меня есть простой проигрыватель flv, который подключается к CDN, который может принимать запросы диапазона байтов заголовка, если пользователь хочет пропустить flv без необходимости загрузки flv на 100%.

Яиспользование стороннего http librabry для добавления заголовка диапазона к запросу.

Мой код воспроизводит flv, но когда я пытаюсь пропустить 30 секунд видео, оно просто зависает.Я полагаю, что cdn возвращает файл, поскольку я могу проследить через байты, а заголовок имеет диапазон содержимого repsonse (ниже).

private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        // entry point

        var flvBT:String = "addresstoflv.flv";

        client = new HttpClient();
        uri = new URI(flvBT);

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

        myVideo = new Video();
        myVideo.smoothing = true;
        myVideo.x = 10;
        myVideo.y = 10;
        myVideo.width=640;
        myVideo.height=360;
        addChild(myVideo);

        stage.addEventListener(MouseEvent.CLICK, onClickListener);

        seeked = false;
        setupNetStream();

    }

    private function setupNetStream():void {

        request = new Get();

        if (seeked) {
            request.addHeader("Range", "bytes="+bytes+"-");
        }

        client.listener.onRequest = function(e:HttpRequestEvent):void{
            trace(e.request);
        }

        ns = new NetStream(nc);
        ns.client = {};
        ns.client.onMetaData = metaDataHandler;
        myVideo.attachNetStream(ns);

        ns.play(null);
        ns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);
        client.addEventListener(HttpRequestEvent.COMPLETE, requestComplete);
        client.addEventListener(HttpDataEvent.DATA, onDataListener);

        client.request(uri, request);

    }

    private function onClickListener(e:MouseEvent):void {
        trace("clicked")
        seeked = true;
        ns.seek(30);
        bytes = metaData.getPdSeekValue(30);
        ns.appendBytesAction(NetStreamAppendBytesAction.RESET_SEEK);
        setupNetStream();
    }

    private function requestComplete(e:HttpRequestEvent):void {
        trace("request complete");
    }

    private function metaDataHandler(item:Object):void {
        metaData = new StreamMetaData(item, false);
        trace("metaData");
        // Resize video instance.
        myVideo.width = item.width;
        myVideo.height = item.height;
        // Center video instance on Stage.
        myVideo.x = (stage.stageWidth - myVideo.width) / 2;
        myVideo.y = (stage.stageHeight - myVideo.height) / 2;
    }

    private function onDataListener(e:HttpDataEvent):void {
            ns.appendBytes(e.bytes);
    }

StreamMetaData class

...
private function getPdSeekValue(approxTime:Number, times:Array, lower:int, upper:int):int {
        if (upper - lower <= 1)
            return lower;

        var mid:int = Math.floor((lower + upper) / 2);

        if (approxTime <= times[mid]){
            return getPdSeekValue(approxTime, times, lower, mid);
        } else {
            return getPdSeekValue(approxTime, times, mid, upper);
        }
    }
....

Первый заголовокзапрос и ответ

Header:
GET flvfile.flv HTTP/1.1
Host: cdnserver.net
Connection: close
method: GET, header: Connection: close, body: null
request complete

Response header:
version: 1.1, code: 200, message: OK
header:
Connection:  Close
Accept-Ranges:  bytes
ETag:  "82639398e26cc1:0"
Last-Modified:  Thu, 09 Jun 2011 10:15:57 GMT
Content-Type:  video/x-flv
Content-Length:  8611520
Date:  Tue, 13 Sep 2011 11:19:58 GMT
Server:   Cisco-CDS
Response: 200

Искать запрос заголовка и резонанс

Header:
GET flvfile.flv HTTP/1.1
Host: cdnserver.net
Connection: close
Range: bytes=1206339-
method: GET, header: Connection: close
Range: bytes=1206339-, body: null
request complete

Response header:
version: 1.1, code: 206, message: Partial Content
header:
Connection:  Close
Accept-Ranges:  bytes
Content-Range:  bytes 1206339-8611519/8611520
ETag:  "82639398e26cc1:0"
Last-Modified:  Thu, 09 Jun 2011 10:15:57 GMT
Content-Type:  video/x-flv
Content-Length:  7405181
Date:  Tue, 13 Sep 2011 11:24:59 GMT
Server:   Cisco-CDS
Response: 206

Я видел этот ресурс, но он не помог. resource

Я просмотрел много форумов, чтобы найти ответ, но безуспешно.Любая помощь будет отличной!

...