Android OpenCV - 如何使用jni读取视频文件?

时间:2017-06-20 06:06:55

标签: android opencv ffmpeg java-native-interface native

我正在使用Android Opencv开发应用程序。

我正在开发的这个应用程序提供两种操作。

  • 使用本机功能将从相机读取的帧传递给Jni Mat.getNativeObjAddr(),并返回新图像 javaCameraView的onCameraFrame()函数
  • 它读取存储内的视频片段,处理每个帧相同 作为#1,并通过onCameraFrame()返回结果图像 功能

首先,函数实现简单如下并且正常工作:

   @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'上显示结果图像。

有正确的方法吗?我期待你的回复。谢谢!

0 个答案:

没有答案