Arjun
Arjun

Reputation: 292

How To: Android OpenCV VideoCapture with File

I am trying to pass a video to the OpenCV VideoCapture class. However when I call the VideoCapture.isOpened() method it always returns false. I have tried two methods:

  1. Saving the video file to the internal memory, context.getFilesDir() => /data/data/package_name/files/VideoToAnalyze/Recording.mp4

  2. and also one to environment.getExternalStorageDirectory() => sdcard/appName/Recording.mp4.

Nothing seems to work here. My question is how do I pass a video file (or what is the correct file path) to a VideoCapture OpenCV object? I've posted some code below as an example. Note that I don't get an error. The file is always found/exists, but when I call isOpened() I always get false.

UPDATE: So it looks like everyone on the web is saying that OpenCV (I'm using 3.10) is lacking a ffmpeg backend and thus cannot process videos. I'm wondering does anyone know this as a fact ?? And is there a work around. Almost all other alternatives to process videos frame by frame is deathly slow.

String x = getApplicationContext().getFilesDir().getAbsolutePath();
File dir = new File(x + "/VideoToAnalyze");
if(dir.isDirectory()) {
       videoFile = new File(dir.getAbsolutePath() + "/Recording1.mp4");
} else {
      // handle error
}

if(videoFile.exits(){

     String absPath = videoFile.getAbsolutePath();
     VideoCapture vc = new VideoCapture();
     try{
           vc.open(absPath);
     } catch (Exception e) {
       /// handle error
     }

     if(!vc.isOpened(){
         // this code is always hit
         Log.v("VideoCapture", "failed");
     } else {
         Log.v("VideoCapture", "opened");


    .....

Upvotes: 2

Views: 5483

Answers (2)

iuq
iuq

Reputation: 1529

Its an old question but nevertheless I had same issue.

Opencv for Android only supports MJPEG codec in AVI container. See this

Upvotes: 3

Arjun
Arjun

Reputation: 292

Just to close this .. I downloaded JavaCV .. included .so files into the android project and then used FFMPEGFrameGrabber.

Upvotes: 1

Related Questions