Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OpenCV-如何使用jni读取视频文件?_Android_Opencv_Ffmpeg_Java Native Interface_Native - Fatal编程技术网

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

Android OpenCV-如何使用jni读取视频文件?,android,opencv,ffmpeg,java-native-interface,native,Android,Opencv,Ffmpeg,Java Native Interface,Native,我正在使用Android Opencv开发一个应用程序 我正在开发的这个应用程序提供了两种操作 使用本机函数将从相机读取的帧传递给Jni Mat.getNativeObjAddr(),并通过 javaCameraView的onCameraFrame()函数 它读取存储器中的一个视频剪辑,对每一帧进行相同的处理 作为#1,并通过onCameraFrame()返回结果图像 功能 首先,该功能的实现非常简单,如下所示,并且工作正常: @Override public Mat onCa

我正在使用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;
        }
    }
但是,问题发生在第二次操作中。 据我所知,Java存储中的文件不能被jni读取

我已经通过谷歌搜索尝试了FFmpegMediaPlayerMediaMetadataRetriever。但是,当将位图抓取到1920*1080图像的特定帧时,此元数据检索器提供的getFrameAtTime()函数平均耗时170ms。我要开发的是以每秒30帧的速度实时显示视频结果。在#1中,本机函数Detect()处理一帧大约需要2毫秒

基于这些原因,我想这样做

java将视频路径(例如:/storage/simulated/0/download/video.mp4)发送到jni,本机函数一次处理一帧视频,并在“onCameraFrame”上显示结果图像


有合适的方法吗?我期待着你的答复。谢谢大家!

如果你问,这是不是正确的方式,是的。您可以使用路径名在本机端工作。它将减少您的进程时间成倍增加。或者您需要解决如何将路径名发送到jni端的问题?@JavadKhan,真的吗?是否可以将视频路径名传递给jni并逐帧读取jni?如果这是可能的,并且您有解决方案,我希望通过电子邮件接收:sso99111@gmail.comIf你问,这是不是正确的方式,是的。您可以使用路径名在本机端工作。它将减少您的进程时间成倍增加。或者您需要解决如何将路径名发送到jni端的问题?@JavadKhan,真的吗?是否可以将视频路径名传递给jni并逐帧读取jni?如果这是可能的,并且您有解决方案,我希望通过电子邮件接收:sso99111@gmail.com