Java 如何捕捉ARCore中的每一帧

Java 如何捕捉ARCore中的每一帧,java,android,arcore,screen-capture,Java,Android,Arcore,Screen Capture,是否有任何解决方案可以将ARCore中的每个场景视图捕获为位图数组或类似的内容? 我想保存ARCamera捕获的每一帧,以便将来处理它们 问题是,对于当前的代码,我有一个沉重的性能负载,这首先会降低应用程序的速度,然后导致应用程序崩溃。 我是android/Java新手,不知道哪里错了 除此之外,还有一些事情令人惊讶。 当我记录takePhoto()函数的内部块(负责将ARSenceview复制到bitmapsarray中)时,每个函数调用的时间戳的差异是不同的,等于1s/30帧,尽管以固定比率

是否有任何解决方案可以将ARCore中的每个场景视图捕获为位图数组或类似的内容? 我想保存ARCamera捕获的每一帧,以便将来处理它们

问题是,对于当前的代码,我有一个沉重的性能负载,这首先会降低应用程序的速度,然后导致应用程序崩溃。 我是android/Java新手,不知道哪里错了

除此之外,还有一些事情令人惊讶。 当我记录takePhoto()函数的内部块(负责将ARSenceview复制到bitmapsarray中)时,每个函数调用的时间戳的差异是不同的,等于1s/30帧,尽管以固定比率捕获视图对我来说非常重要

当应用程序处于捕获模式时,我每帧调用一次该函数。一个可能的错误应该是由于此处获取的线程数量太多

private void takePhoto()
{
view=arFragment.getArSceneView();
//注意:创建一个处理程序线程来卸载图像处理
最终HandlerThread HandlerThread=新HandlerThread(“像素复制器”);
handlerThread.start();
//注意:请求复制
PixelCopy.request(视图、位图、复制结果->{
if(copyResult==PixelCopy.SUCCESS)
{
bitmapsBuffer[bufferIndex]=位图;
bufferIndex++;
if(bufferIndex==120)
{
缓冲指数=0;
FlushBitmapsBuffer();
}
}
其他的
{
messenger.message(“未能复制像素:+copyResult”);
}
handlerThread.quitSafety();
},新处理程序(handlerThread.getLooper());
}
然后在收集了120帧之后,我尝试使用另一个服务在SD上编写位图的临时数组

private void FlushBitmapsBuffer()
{
Intent Intent=新Intent(MainActivity.this、DataCopyService.class);
intent.putExtra(“BitmapsBuffer”,BitmapsBuffer);
intent.putExtra(“StorageDataRoot”,
storageData.getRootDir());
intent.putExtra(“StorageDataProj”,
storageData.getProjectDir().getAbsolutePath());
startService(意向);
}
该服务的工作原理如下:

@覆盖
公共int onStartCommand(Intent Intent、int标志、int startId)
{
log(“服务”+标签+“已启动”);
bitmapsBuffer=(位图[])intent.getParcelableArrayExtra(“BitmpasBuffer”);
文件;
file=新文件(intent.getStringExtra(“StorageDataRoot”);
setRootDir(文件);
file=新文件(intent.getStringExtra(“StorageDataProj”);
storageData.setProjectDir(文件);
新线程(newrunnable()){
@凌驾
公开募捐{
log(“服务内线程”);
//使用文件管理器类在此处保存数据
stopSelf();
}
}).start();
return Service.START\u STICKY;
}

是否有人知道我做错了什么。

支持使用Sceneform捕获帧。这将每帧将当前视图渲染到曲面


它在中用于捕获视频。

好的,谢谢您的编辑。您需要每一帧都是未压缩的位图,还是可以用视频(H.263/H.264)代替?@MorrisonChang基于我所需要的未压缩位图更好,但现在我想捕获一个H.264视频,然后使用
FFmpegMediaMetadataRetriever
提取其帧。不清楚您是否已经看过了或Yea中列出的其他选项,但从长远来看,这对我没有帮助,事实上,最终我不需要什么,目前正在得到提请的意见。我进一步处理的原始数据是ARCoreCamera正在捕获的数据。所以我不需要捕捉UI、ARRenderableObjects等东西。