2015-07-13 208 views
2

我有175个mp4文件。当我处理从指数0至指数65(或66)文件,我得到异常:FFMPeg异常setDataSource失败:状态= 0xFFFFFFFF

java.lang.IllegalArgumentException: setDataSource failed: status = 0xFFFFFFFF 
at wseemann.media.FFmpegMediaMetadataRetriever.setDataSource(Native Method) 
at com.jni.utils.Mp4ParserUsingFFMpeg.createThumbnail(Mp4ParserUsingFFMpeg.java:518) 
at com.example.readmdtfile.activity.MainActivity$createMp4Async.createThumbnail(MainActivity.java:71) 
at com.example.readmdtfile.activity.MainActivity$createMp4Async.doInBackground(MainActivity.java:55) 
at com.example.readmdtfile.activity.MainActivity$createMp4Async.doInBackground(MainActivity.java:1) 
at android.os.AsyncTask$2.call(AsyncTask.java:288) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:841) 

如果我运行从指数65(或附近)工艺,处理文件65是成功的。但它仍然得到例外,有时 这里是代码我使用的:

public static Bitmap createThumbnail (String videoPath) { 
    FFmpegMediaMetadataRetriever retriever = new FFmpegMediaMetadataRetriever(); 
    Bitmap bitmap = null; 
    try { 
     retriever.setDataSource(videoPath); //file's path 
     String key; 
     String value; 
     for (int i = 0; i < MetadataKey.METADATA_KEYS.length; i++) { 
      key = MetadataKey.METADATA_KEYS[i]; 
      value = retriever.extractMetadata(key); 
      if (value != null) { 
       // metadata.add(new Metadata(key, value)); 
       Log.i(TAG, "Key: " + key + " Value: " + value); 
      } 
     } 

     bitmap = retriever.getFrameAtTime(); 

     if (bitmap != null) { 
      Log.d(TAG, "Extracted frame"); 
      Bitmap b2 = retriever.getFrameAtTime(4000000, 
        FFmpegMediaMetadataRetriever.OPTION_CLOSEST_SYNC); 
      if (b2 != null) { 
       bitmap = b2; 
      } 
     } else { 
      Log.d(TAG, "Failed to extract frame"); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     retriever.release(); 
    } 

    return bitmap; 
} 

https://github.com/wseemann/FFmpegMediaMetadataRetriever/issues/59

请帮助我。

+0

你设置的manifest.xml乌尔读取权限? –

回答

0

错误很简单,IllegalArgumentException表示视频URI无效,如果发生这种情况会引发异常。尝试使用FFmpegMediaMetadataRetriever之前验证该URI是否有效。

-1

你只需要给的setDataSource一个字符串,保存路径或URL在这样的字符串:

String url; 
mmr = new FFmpegMediaMetadataRetriever(); 
url = "http://www.stephaniequinn.com/Music/Commercial%20DEMO%20-%2009.mp3"; 
mmr.setDataSource(url, new HashMap<String, String>()); 

或:

mmr = new FFmpegMediaMetadataRetriever(); 
string s="path" 
mmr.setDataSource(path);