【问题标题】:How to make Video thumbnail of remote source in Android using Glide如何使用 Glide 在 Android 中制作远程源的视频缩略图
【发布时间】:2020-03-06 22:39:00
【问题描述】:

如果可以在手机存储中找到源,我可以使用 Glide 制作视频缩略图。但是,如果访问远程 url 而不是本地文件,代码将无法正常工作。

        Glide.with(mContext)
                .load(message)
                .into(mVideoThumbnailView);

我正在尝试访问一个 mp4 文件。谢谢你的建议。

【问题讨论】:

  • message 是什么类型?确保它指向有效的资源。

标签: android android-glide


【解决方案1】:

我还没有尝试过Glide。但是,正如issue 中提到的,您需要编写自定义模型和 DataFetcher 以使用Glide 检索图像。

但是,一种对我有用的解决方法是使用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;
        }

【讨论】:

  • 你好@OBX,你到底在哪里使用这个?在活动中(有关系)?我目前正在适配器中应用它。使用此代码,我收到了 java.lang.IllegalArgumentException 02-07 18:23:13.150 12240-12240/com.woppi.myapp W/System.err: at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:73) 02-07 18:23:13.150 12240-12240/com.woppi.myapp W/System.err: at com.woppi.myapp.RoomMessageAdapter.retrieveVideoFrameFromVideo(RoomMessageAdapter.java:635)
  • hmm,可能是权限问题,试试这个,stackoverflow.com/questions/27566480/… 并让我知道你是否已经添加了权限!如果您使用的是更高的 api,请降级版本并在没有运行时权限的情况下尝试
  • 我有 INTERNET, WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE, RECORD_AUDIO, CAMERA 我正在使用 API 级别 21,但应用程序应该支持 4.2.2 Jellybean 及更高版本。
  • 也许 MediaMetadataRetriever 不支持 https?你用过这个在 SSL 下检索文件吗
【解决方案2】:

我发现一种非常肮脏的方法是播放视频的前 100 毫秒并暂停它:

private void playSelectedVideoFrom(String url, boolean asThumbnail){

    try {
        Uri uri = Uri.parse(url);
        video.setVideoURI(uri);
        video.setOnPreparedListener(mediaPlayer -> {
            if (!asThumbnail)
                buffering.show();
            mediaPlayer.setLooping(false);
            mediaPlayer.start();
            mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT);
            if (asThumbnail) {
                mediaPlayer.seekTo(100);
                mediaPlayer.setOnSeekCompleteListener(mediaPlayer1 -> {
                    mediaPlayer1.pause();
                });
            }else {
                if (mediaPlayer.isPlaying()) buffering.hide();
            }
        });

    }catch (Exception ex){
        ex.printStackTrace();
    }
}

它对我有用。

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 2012-02-23
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 2018-11-29
    • 1970-01-01
    相关资源
    最近更新 更多