2010-12-06 1 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);   
} 

을 스트림의 메타 데이터에 다음 항목이 있는지 확인할 수 있습니다.
seekpoints : 93 : offset = 10342550
seekpoints : 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, 메타 데이터는 이런 종류의 (metadata['keyframes'], metadata['seekpoints'] 등)의 개체가있는 경우 95174,136998,176043209542239148271062302006331724363948395039427503,456317,483313

는, 인코더 설정에 당신을 따라 다음을 수행 할 수 있습니다.

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

0

정적 클래스를 사용하여 netstream 메타 데이터 객체를 as3 객체로 구문 분석했습니다. JSON.stringify (parse (info))를 사용하여 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; 
    } 
}