2010-12-06 73 views

回答

2

可以查詢最近的關鍵幀的流元數據的當前時間
UPD
創建你需要處理它的onMetaData調用流時:

private var metaInfo: Object;
private function initStream():void{ 
    stream = new NetStream(conn); 
    stream.bufferTime = 5;    
    stream.addEventListener(NetStatusEvent.NET_STATUS, onStatus); 
    stream.client = new Object(); 
    stream.client.onMetaData = onMetaData;/*this is what you need*/ 
    video.attachNetStream(stream); 
} 
private function onMetaData(info:Object):void { 
    metaInfo = info; 
    var tmpstr:String = ''; 
    for(var s:String in info){ 
     var tstr:String = s + ' = ' + info[s] + '\n'; 
     tmpstr += tstr.indexOf('object') == -1 ? tstr : ''; 
     for(var a:String in info[s]){ 
      var ttstr:String = s + ':' + a + ' = ' + info[s][a] + '\n'; 
      tmpstr += ttstr.indexOf('object') == -1 ? ttstr : ''; 
      for(var c:String in info[s][a]){ 
       var tttstr:String = s + ':' + a + ':' + c + ' = ' + info[s][a][c] + '\n'; 
       tmpstr += tttstr.indexOf('object') == -1 ? tttstr : '';      
      } 
     } 
    } 
    trace(tmpstr);   
} 

在此跟蹤您會看到流的元數據是否包含以下項目:
搜索點:93:偏移量= 10342550
搜索點數:93:tim E = 165.799

或也許:
關鍵幀:次= 0,0.48,0.96,1.44,1.92,2.4,2.88,3.36,3.84,4.32,4.8,5.28,5.76,6.24
關鍵幀:filepositions = 1063, 95174,136998,176043,209542,239148,271062,302006,331724,363948,395039,427503,456317,483313

這取決於編碼器設置,如果你的元數據都有這種(metadata['keyframes']metadata['seekpoints']等)的任何對象,你可以執行以下操作:

for (var i:int = 0; i < metaInfo['keyframes']['times'].length; i++) { 
    if (stream.time < metaInfo['keyframes']['times'][i]) { 
     var keyFrameNum: int = (metaInfo['keyframes']['times'][i] - stream.time < stream.time - metaInfo['keyframes']['times'][i - 1]) ? i : i - 1; 
    } 
} 
+0

以及如何做這樣的事情? – Rella 2010-12-06 15:14:55

0

我做了一個靜態類來將netstream元數據對象解析爲as3對象。您可以使用JSON.stringify(parse(info))來檢查信息中的所有屬性。這個班只是草稿執行。可能是裏面的一些錯誤。

public class NetStreamMetaData 
{ 
    public static function parse(object:Object, isArray:Boolean = false):Object{ 
     var ret:Object = {}; 
     if(isArray) 
      ret = []; 

     var k:String; 
     for(k in object){ 
      if(isNaN(Number(k))){ 
       if(object[k] is Array){ 
        ret[k] = parse(object[k], true); 
       }else{ 
        ret[k] = object[k]; 
       } 
      }else{ 
       if(object[k] is Array){ 
        ret.push(parse(object[k], false)); 
       }else{ 
        ret.push(object[k]); 
       } 
      } 
     } 
     return ret; 
    } 
}