2016-04-10 73 views
1

我想將視頻傳遞給OpenCV VideoCapture類。但是,當我撥打VideoCapture.isOpened()方法時,它始終返回false。我曾嘗試兩種方法:如何:Android的OpenCV VideoCapture與文件

  1. 保存視頻文件到內部存儲器,context.getFilesDir() => /data/data/package_name/files/VideoToAnalyze/Recording.mp4

  2. 以及一種以environment.getExternalStorageDirectory() = > sdcard/appName/Recording.mp4。

沒有什麼似乎在這裏工作。我的問題是如何將視頻文件(或正確的文件路徑)傳遞給VideoCapture OpenCV對象?作爲示例,我已經發布了一些代碼。請注意,我沒有收到錯誤。該文件總是被找到/存在,但是當我打電話給isOpened()時,我總是得到false

更新: 因此,看起來網絡上的每個人都說OpenCV(我使用3.10)缺少ffmpeg後端,因此無法處理視頻。我想知道有沒有人知道這是事實?有沒有解決方法。幾乎所有其他的逐幀處理視頻的方法都是非常慢的。

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"); 


    ..... 
+0

也只是想說明..我試着使用一些JNI代碼,而不是...仍然沒有運氣...試圖/以及\ .. jboolean Java_package_name_videoCapture (JNIEnv的* ENV,jobject T) { 簡歷:: VideoCapture * videoCapture = new cv :: VideoCapture(「\\ data \\ data \\ matterandform.net.bevel_android \\ files \\ VideoToAnalyze \\ BevelRecording1.mp4」); return videoCapture-> isOpened(); } – Arjun

回答

1

只是關閉此..我下載JavaCV ..包括.so文件到Android項目,然後使用FFMPEGFrameGrabber。

1

它的老問題,但我有同樣的問題。

Opencv for Android僅支持AVI容器中的MJPEG編解碼器。 See this