2

私はnetStreambyteArrayを使用してflex4.5でflvビデオファイルを再生しようとしています。私がしていることは以下の通りです:

  1. netStreamおよびビデオオブジェクトの作成
  2. ビデオでnetStreamを添付する
  3. byteArrayでflvファイルを読み取る
  4. 「appendBytes」メソッドを使用してnetStreamにbyteArrayを追加します
  5. ビデオの再生

このシナリオでは、再生、一時停止、停止の機能がビデオで正常に機能しています。

しかし、私がビデオで探しようとしているとき、それは機能していません。

リンクhttp://pastebin.com/fZp0mKDsをクリックすると、私が行っているコードをたどることができます。

誰かが私に、シークを実装するのにどこが間違っているのか教えてもらえますか?

任意のコードサンプルまたは任意の種類のヘルプをいただければ幸いです。

4

2 に答える 2

1

私の場合、以下のコードが機能しました

// onmetadata function get all timestamp and corresponding fileposition..
function onMetaData(informationObject:Object):void 
{
    for (var propertyName:String in informationObject) 
    {
        if (propertyName == "keyframes")
        {
            var kfObject:Object = informationObject[propertyName];
            var timeArray:Array = kfObject["times"];
            var filePositionArray:Array = kfObject["filepositions"];

            for(var i:int=0;i<timeArray.length;i++)
            {
                var tagPosition:int = filePositionArray[i];//Read the tag size;
                var timestamp:Number = timeArray[i];//read the timestamp;
                tags.push({timestamp:timestamp,tagPosition:tagPosition});
            }
        }
    }
}

// onseek click get approximate timestamp and its fileposition
protected function seek_click(seektime:Number):void
{
    var currentTime:Number = 0;
    var previousTime:Number = 0;

    for (var i:int=1; i<tags.length; i++)
    {
        currentTime = tags[i].timestamp;
        previousTime = tags[i-1].timestamp;

        if(previousTime < seektime)
        {
            if(seektime < currentTime)
            {
                seekPos = tags[i-1].tagPosition;
                stream.seek(previousTime);
                break;
            }
        }
    }
}


// append bytes on seekposition
private function netStatusHandler(event:NetStatusEvent):void 
{
    switch (event.info.code) 
    {
        case "NetStream.Seek.Notify" :

        stream.appendBytesAction(NetStreamAppendBytesAction.RESET_SEEK);
        totalfilePositionArray.position = seekPos;

        var bytes:filePositionArray = new filePositionArray();

        totalfilePositionArray.readBytes(bytes);
        stream.appendBytes(bytes);

        stream.resume();

        break;
    }
}

メタデータキーフレームをflvファイルに挿入する場合。インジェクターツールfeを使用します。FLVメタデータインジェクター

http://www.buraks.com/flvmdi/

于 2013-01-23T06:13:11.273 に答える
0

ファイルを読み取った後に構築されたbyteArrayを探すのに問題があると思います。netStreamを直接再生するだけで、機能します。

var fileName:String = "dummy-video.flv";
ns.play(fileName);
于 2013-01-22T07:59:13.913 に答える