Exception FFMPeg异常setDataSource失败:状态=0xFFFFFFFF

Exception FFMPeg异常setDataSource失败:状态=0xFFFFFFFF,exception,ffmpeg,Exception,Ffmpeg,我有175个mp4文件。当我将文件从索引0处理到索引65(或66)时,会出现异常: java.lang.IllegalArgumentException: setDataSource failed: status = 0xFFFFFFFF at wseemann.media.FFmpegMediaMetadataRetriever.setDataSource(Native Method) at com.jni.utils.Mp4ParserUsingFFMpeg.createThumbnail(

我有175个mp4文件。当我将文件从索引0处理到索引65(或66)时,会出现异常:

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;
}
公共静态位图创建缩略图(字符串视频路径){
FFmpegMediaMetadataRetriever=新的FFmpegMediaMetadataRetriever();
位图=空;
试一试{
retriever.setDataSource(videoPath);//文件的路径
字符串键;
字符串值;
对于(int i=0;i


请帮助我。

错误很简单,
IllegalArgumentException
表示视频URI无效,如果发生这种情况,将引发异常。在尝试将URI与
ffmpegmediametadata检索器一起使用之前,请验证该URI是否有效

您只需给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>());

错误很简单,RuntimeException表示视频URI无效。在尝试将有效的视频URI与FFmpegMediaMetadataRetriever一起使用之前,请验证其.mp4格式

ImageView thumbnail1 = (ImageView) findViewById(R.id.video1);
thumbnail1.setImageBitmap(retriveVideoFrameFromVideo("http://techslides.com/demos/sample-videos/small.mp4"));

public Bitmap retriveVideoFrameFromVideo(String videoPath) {
    Bitmap bitmap = null;
    MediaMetadataRetriever mediaMetadataRetriever = null;
    try {
        mediaMetadataRetriever = new MediaMetadataRetriever();
        if (Build.VERSION.SDK_INT >= 14)
            mediaMetadataRetriever.setDataSource(videoPath, new HashMap<String, String>());
        else
            mediaMetadataRetriever.setDataSource(videoPath);
        //   mediaMetadataRetriever.setDataSource(videoPath);
        bitmap = mediaMetadataRetriever.getFrameAtTime(1, MediaMetadataRetriever.OPTION_CLOSEST);
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
    } finally {
        if (mediaMetadataRetriever != null) {
            mediaMetadataRetriever.release();
        }
    }
    return bitmap;
}
ImageView缩略图1=(ImageView)findViewById(R.id.video1);
thumbnail1.setImageBitmap(从视频中检索视频帧)(“http://techslides.com/demos/sample-videos/small.mp4"));
公共位图检索VideoFrameFromVideo(字符串视频路径){
位图=空;
MediaMetadataRetriever MediaMetadataRetriever=null;
试一试{
mediaMetadataRetriever=新的mediaMetadataRetriever();
如果(Build.VERSION.SDK_INT>=14)
setDataSource(videoPath,newhashmap());
其他的
mediaMetadataRetriever.setDataSource(videoPath);
//mediaMetadataRetriever.setDataSource(videoPath);
位图=mediaMetadataRetriever.getFrameAtTime(1,mediaMetadataRetriever.OPTION_);
}捕获(例外e){
e、 printStackTrace();
Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG.show();
}最后{
if(mediaMetadataRetriever!=null){
mediaMetadataRetriever.release();
}
}
返回位图;
}

您是否在ur manifest.xml中设置了读取权限?
ImageView thumbnail1 = (ImageView) findViewById(R.id.video1);
thumbnail1.setImageBitmap(retriveVideoFrameFromVideo("http://techslides.com/demos/sample-videos/small.mp4"));

public Bitmap retriveVideoFrameFromVideo(String videoPath) {
    Bitmap bitmap = null;
    MediaMetadataRetriever mediaMetadataRetriever = null;
    try {
        mediaMetadataRetriever = new MediaMetadataRetriever();
        if (Build.VERSION.SDK_INT >= 14)
            mediaMetadataRetriever.setDataSource(videoPath, new HashMap<String, String>());
        else
            mediaMetadataRetriever.setDataSource(videoPath);
        //   mediaMetadataRetriever.setDataSource(videoPath);
        bitmap = mediaMetadataRetriever.getFrameAtTime(1, MediaMetadataRetriever.OPTION_CLOSEST);
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
    } finally {
        if (mediaMetadataRetriever != null) {
            mediaMetadataRetriever.release();
        }
    }
    return bitmap;
}