2013-02-15 76 views
1

我試圖將Kinect傳感器的深度數據記錄到文件中,然後使用openNi進行播放。 我寫了一個基於openNi實例的簡單程序。我使用java包裝。使用OpenNI錄製和閱讀oni文件時出現問題。

的問題是,當我嘗試閱讀,我錄製到.oni文件,我得到這個錯誤:

org.OpenNI.StatusException: The file is corrupted! 

這裏是我的記錄代碼:

Context context = new Context(); 
// add the NITE License 
License license = new License("PrimeSense", "0KOIk2JeIBYClPWVnMoRKn5cdY4="); //  vendor, key 
context.addLicense(license); 

DepthGenerator depth = DepthGenerator.create(context); 

Recorder recorder = Recorder.create(context, "oni"); 
context.createProductionTree(recorder.getInfo()); 
recorder.setDestination(RecordMedium.FILE, "KinectLog.oni"); 

recorder.addNodeToRecording(depth); 

context.startGeneratingAll(); 

int tmp = 0; 
while(tmp < 100){ 
    tmp++; 
    context.waitAnyUpdateAll(); 
    recorder.Record(); 
    System.out.println("recording"); 
} 

也許我必須在錄製後通過調用一些.release()方法來清理?記錄器沒有這樣的方法。

這裏是我打.oni文件代碼:

Context context = new Context(); 
// add the NITE License 
License license = new License("PrimeSense", "0KOIk2JeIBYClPWVnMoRKn5cdY4="); // vendor, key 
context.addLicense(license); 

context.openFileRecordingEx("KinectLog.oni"); 

就這麼注塑StatusException的openFileRecordingEx。

任何人都知道我在做什麼錯了?

回答

2

我想通了。我重寫了一些代碼,並在記錄結束時添加了recorder.dispose()以釋放記錄器對象。

public static void main(String[] args) { 

    try { 

     Context context = new Context(); 
     // add the NITE License 
     License license = new License("PrimeSense", "0KOIk2JeIBYClPWVnMoRKn5cdY4="); // vendor, key 
     context.addLicense(license); 

     DepthGenerator depth = DepthGenerator.create(context); 


     Recorder recorder = Recorder.create(context, "oni"); 

     recorder.setDestination(RecordMedium.FILE, "KinectLog.oni"); 

     recorder.addNodeToRecording(depth); 

     context.startGeneratingAll(); 

     int tmp = 0; 
     while(tmp < 100){ 
      tmp++; 
      context.waitAnyUpdateAll(); 
      recorder.Record(); 
      System.out.println("recording"); 
     } 
     recorder.dispose();   

     } 
     catch (GeneralException e) { 
      System.out.println(e); 
      System.exit(1); 
     } 

}