Java 无法重新录制oni文件
我尝试用Java录制oni文件。当我录制一个文件时效果很好。但当我想录制几个文件时,我遇到了问题 下面是一些测试代码:Java 无法重新录制oni文件,java,openni,Java,Openni,我尝试用Java录制oni文件。当我录制一个文件时效果很好。但当我想录制几个文件时,我遇到了问题 下面是一些测试代码: package test; import org.OpenNI.Context; import org.OpenNI.DepthGenerator; import org.OpenNI.GeneralException; import org.OpenNI.ImageGenerator; import org.OpenNI.OutArg; import org.OpenNI.
package test;
import org.OpenNI.Context;
import org.OpenNI.DepthGenerator;
import org.OpenNI.GeneralException;
import org.OpenNI.ImageGenerator;
import org.OpenNI.OutArg;
import org.OpenNI.RecordMedium;
import org.OpenNI.Recorder;
import org.OpenNI.ScriptNode;
public class RecorderProblems {
private static final String SAMPLE_XML_FILE = "KinectConfig.xml";
private static final String TEST1_ONI_FILE = "Test1.oni";
private static final String TEST2_ONI_FILE = "Test2.oni";
public static void main(String[] args) {
Context context = null;
DepthGenerator depthGenerator = null;
ImageGenerator imageGenerator = null;
try {
OutArg<ScriptNode> scriptNode = new OutArg<ScriptNode>();
// Init Hardware
System.out.println("Init Hardware");
context = Context.createFromXmlFile(SAMPLE_XML_FILE, scriptNode);
depthGenerator = DepthGenerator.create(context);
imageGenerator = ImageGenerator.create(context);
context.startGeneratingAll();
// Record 1
System.out.println("Start Record 1");
Recorder recorder = Recorder.create(context, "oni");
// Adding next line produces a corrupt file, but the program runs fine
// context.createProductionTree(recorder.getInfo());
recorder.setDestination(RecordMedium.FILE, TEST1_ONI_FILE);
recorder.addNodeToRecording(depthGenerator);
recorder.addNodeToRecording(imageGenerator);
for (int i = 0; i < 100; i++) {
context.waitOneUpdateAll(imageGenerator);
recorder.Record();
}
recorder.removeNodeToRecording(depthGenerator);
recorder.removeNodeToRecording(imageGenerator);
recorder.dispose();
// Record 2
System.out.println("Start Record 2");
recorder = Recorder.create(context, "oni");
// Adding next line produces a corrupt file, but the program runs fine
// context.createProductionTree(recorder.getInfo());
recorder.setDestination(RecordMedium.FILE, TEST2_ONI_FILE);
recorder.addNodeToRecording(depthGenerator);
recorder.addNodeToRecording(imageGenerator);
for (int i = 0; i < 100; i++) {
context.waitOneUpdateAll(imageGenerator);
recorder.Record();
}
recorder.removeNodeToRecording(depthGenerator);
recorder.removeNodeToRecording(imageGenerator);
recorder.dispose();
} catch (GeneralException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// End Hardware
System.out.println("End Hardware");
depthGenerator.dispose();
depthGenerator = null;
imageGenerator.dispose();
imageGenerator = null;
context.release();
context.dispose();
}
}
}
封装测试;
导入org.OpenNI.Context;
导入org.OpenNI.DepthGenerator;
导入org.OpenNI.GeneralException;
导入org.OpenNI.ImageGenerator;
导入org.OpenNI.OutArg;
导入org.OpenNI.recordmedia;
导入org.OpenNI.Recorder;
导入org.OpenNI.ScriptNode;
公共类记录器问题{
私有静态最终字符串SAMPLE\u XML\u FILE=“KinectConfig.XML”;
私有静态最终字符串TEST1\u ONI\u FILE=“TEST1.ONI”;
私有静态最终字符串TEST2\u ONI\u FILE=“TEST2.ONI”;
公共静态void main(字符串[]args){
Context=null;
DepthGenerator DepthGenerator=null;
ImageGenerator ImageGenerator=null;
试一试{
OutArg scriptNode=新OutArg();
//初始化硬件
System.out.println(“初始化硬件”);
context=context.createFromXmlFile(示例XML文件,scriptNode);
depthGenerator=depthGenerator.create(上下文);
imageGenerator=imageGenerator.create(上下文);
context.startggeneratingall();
//记录1
System.out.println(“开始记录1”);
Recorder=Recorder.create(上下文,“oni”);
//添加下一行会生成损坏的文件,但程序运行正常
//createProductionTree(recorder.getInfo());
setDestination(recordmedia.FILE、TEST1\u ONI\u文件);
记录器。添加节点记录(深度生成器);
记录器。添加节点记录(图像生成器);
对于(int i=0;i<100;i++){
waitOneUpdateAll(图像生成器);
recorder.Record();
}
记录器。移除记录(深度发生器);
记录器。移除记录(图像发生器);
recorder.dispose();
//记录2
System.out.println(“开始记录2”);
recorder=recorder.create(上下文,“oni”);
//添加下一行会生成损坏的文件,但程序运行正常
//createProductionTree(recorder.getInfo());
setDestination(recordmedia.FILE、TEST2\u ONI\u文件);
记录器。添加节点记录(深度生成器);
记录器。添加节点记录(图像生成器);
对于(int i=0;i<100;i++){
waitOneUpdateAll(图像生成器);
recorder.Record();
}
记录器。移除记录(深度发生器);
记录器。移除记录(图像发生器);
recorder.dispose();
}捕获(一般异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}最后{
//终端硬件
System.out.println(“终端硬件”);
depthGenerator.dispose();
depthGenerator=null;
imageGenerator.dispose();
imageGenerator=null;
context.release();
context.dispose();
}
}
}
当我尝试设置第二条记录的目标时,我得到一个StatusException“Input pointer is null”
如果添加未注释的行,程序运行正常,但创建的oni文件不可读。(我不知道这条线到底是干什么的。)
我还尝试重新初始化上下文。起初这很好,但当我尝试录制几个文件时,我在重新初始化时也遇到了问题。以下是一些示例代码:
package test;
import org.OpenNI.Context;
import org.OpenNI.DepthGenerator;
import org.OpenNI.GeneralException;
import org.OpenNI.ImageGenerator;
import org.OpenNI.OutArg;
import org.OpenNI.RecordMedium;
import org.OpenNI.Recorder;
import org.OpenNI.ScriptNode;
public class RecorderProblems {
private static final String SAMPLE_XML_FILE = "KinectConfig.xml";
public static void main(String[] args) {
Context context = null;
DepthGenerator depthGenerator = null;
ImageGenerator imageGenerator = null;
try {
OutArg<ScriptNode> scriptNode = new OutArg<ScriptNode>();
// Record 1
for (int i = 0; i < 25; i++) {
System.out.println("Run " + i);
// Init Hardware
System.out.println("Init Hardware " + i);
context = Context
.createFromXmlFile(SAMPLE_XML_FILE, scriptNode);
depthGenerator = DepthGenerator.create(context);
imageGenerator = ImageGenerator.create(context);
context.startGeneratingAll();
System.out.println("Start Record " + i);
Recorder recorder = Recorder.create(context, "oni");
recorder.setDestination(RecordMedium.FILE, "test_" + i + ".oni");
recorder.addNodeToRecording(depthGenerator);
recorder.addNodeToRecording(imageGenerator);
for (int j = 0; j < 100; j++) {
context.waitOneUpdateAll(imageGenerator);
recorder.Record();
}
recorder.removeNodeToRecording(depthGenerator);
recorder.removeNodeToRecording(imageGenerator);
recorder.dispose();
System.out.println("End Hardware " + i);
depthGenerator.dispose();
depthGenerator = null;
imageGenerator.dispose();
imageGenerator = null;
context.release();
context.dispose();
}
} catch (GeneralException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
封装测试;
导入org.OpenNI.Context;
导入org.OpenNI.DepthGenerator;
导入org.OpenNI.GeneralException;
导入org.OpenNI.ImageGenerator;
导入org.OpenNI.OutArg;
导入org.OpenNI.recordmedia;
导入org.OpenNI.Recorder;
导入org.OpenNI.ScriptNode;
公共类记录器问题{
私有静态最终字符串SAMPLE\u XML\u FILE=“KinectConfig.XML”;
公共静态void main(字符串[]args){
Context=null;
DepthGenerator DepthGenerator=null;
ImageGenerator ImageGenerator=null;
试一试{
OutArg scriptNode=新OutArg();
//记录1
对于(int i=0;i<25;i++){
System.out.println(“运行”+i);
//初始化硬件
System.out.println(“初始硬件”+i);
上下文=上下文
.createFromXmlFile(示例XML文件,脚本节点);
depthGenerator=depthGenerator.create(上下文);
imageGenerator=imageGenerator.create(上下文);
context.startggeneratingall();
System.out.println(“开始记录”+i);
Recorder=Recorder.create(上下文,“oni”);
setDestination(recordmedia.FILE,“test_”+i+“.oni”);
记录器。添加节点记录(深度生成器);
记录器。添加节点记录(图像生成器);
对于(int j=0;j<100;j++){
waitOneUpdateAll(图像生成器);
recorder.Record();
}
记录器。移除记录(深度发生器);
记录器。移除记录(图像发生器);
recorder.dispose();
系统输出打印项次(“终端硬件”+i);
depthGenerator.dispose();
depthGenerator=null;
imageGenerator.dispose();
imageGenerator=null;
context.release();
context.dispose();
}
}捕获(一般异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
在第三次运行时,我得到一个StatusException“等待新数据时发生超时!”
有人有过机智的经验吗