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

I want to create thumbnail from video url of server in android

我的代码,

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 被挂断了。

你需要 运行 异步方法中的这个任务 如果你使用 RecycleView 则在 onBindViewHolder() 中这样,如果你使用 ListView 则放在 getView() ]:

 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() 再次