我正在使用Android Opencv开发应用程序。
我正在开发的这个应用程序提供两种操作。
首先,函数实现简单如下并且正常工作:
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame)
{
if(inputFrame!=null){
Detect(inputFrame.rgba().getNativeObjAddr(), boardImage.getNativeObjAddr());
}
return boardImage;
}
}
然而,问题发生在第二次操作中。 据我所知,jni无法读取Java Storage中的文件。
我已经通过Google搜索尝试了 FFmpegMediaPlayer 或 MediaMetadataRetriever 。但是,当将位图抓取到1920 * 1080图像的特定帧时,此MetadataRetriever提供的 getFrameAtTime ()函数平均花费170毫秒。我需要开发的是以30 fps的速度实时显示视频结果。在#1中,本机函数Detect()大约需要2ms来处理一帧。
出于这些原因,我想这样做。
java将视频的路径(例如:/storage/emulated/0/download/video.mp4)发送到jni,本机函数一次处理一帧视频,并在'onCameraFrame'上显示结果图像。
有正确的方法吗?我期待你的回复。谢谢!