我想从android中的服务器视频网址创建缩略图

时间:2017-03-03 05:40:42

标签: android mediametadataretriever

我的代码,

public static Bitmap retriveVideoFrameFromVideo(String videoPath) throws Throwable {

    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();
    } catch (Exception e) {
        e.printStackTrace();
        throw new Throwable(
                "Exception in retriveVideoFrameFromVideo(String videoPath)"
                        + e.getMessage());

    } finally {
        if (mediaMetadataRetriever != null) {
            mediaMetadataRetriever.release();
        }
    }
    return bitmap;
}

这是创建缩略图,但我花了很多时间用ListView然后ListView挂断。

1 个答案:

答案 0 :(得分:2)

您需要在异步方法中运行此任务如果您使用onBindViewHolder(),请在RecycleView中执行此操作;如果您使用getView(),则需要使用ListView

 new AsyncTask<String, String, String>() {
            Bitmap bitmapVideo;

            @Override
            protected String doInBackground(String... strings) {
                try {
                   //Your method call here
                    bitmapVideo =retriveVideoFrameFromVideo(strings[0]);
                } catch (Throwable throwable) {
                    throwable.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(String id) {
                super.onPostExecute(id);
                if (bitmapVideo != null) {
                  //Load your bitmap here
                    holder.imgVideoThumb.setImageBitmap(bitmapVideo);
                }
            }
        }.execute(getYourVideolink());

为了提高效率,您可以在本地保存位图图像,然后在调用AsyncTask()检查天气之前,如果该图像从本地加载而不是新版本再次运行AsyncTask(),则此图像已保存在本地p>