Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Glide在Android中制作远程源的视频缩略图_Android_Android Glide - Fatal编程技术网

如何使用Glide在Android中制作远程源的视频缩略图

如何使用Glide在Android中制作远程源的视频缩略图,android,android-glide,Android,Android Glide,如果可以在手机存储器中找到源,我可以使用Glide制作视频缩略图。但是,如果访问远程url而不是本地文件,则代码不起作用 Glide.with(mContext) .load(message) .into(mVideoThumbnailView); 我正在尝试访问mp4文件。谢谢你的建议。我还没有尝试使用Glide。但是,如本文所述,您需要编写一个自定义模型和数据获取程序,以便使用Glide检索图像 然而,一种对我

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

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

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

我还没有尝试使用
Glide
。但是,如本文所述,您需要编写一个自定义模型和数据获取程序,以便使用
Glide
检索图像

然而,一种对我有效的变通方法是使用。以下是我如何在不下载文件的情况下检索缩略图位图:

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;
        }
公共静态位图从视频检索视频帧(字符串视频路径)
扔掉的
{
位图=空;
MediaMetadataRetriever MediaMetadataRetriever=null;
尝试
{
mediaMetadataRetriever=新的mediaMetadataRetriever();
如果(Build.VERSION.SDK_INT>=14)
setDataSource(videoPath,newhashmap());
其他的
mediaMetadataRetriever.setDataSource(videoPath);
//mediaMetadataRetriever.setDataSource(videoPath);
位图=mediaMetadataRetriever.getFrameAtTime();
}
捕获(例外e)
{
e、 printStackTrace();
扔新的一次性垃圾(
“RetrieveVideoFrameFromVideo(字符串视频路径)中出现异常”
+e.getMessage());
}
最后
{
if(mediaMetadataRetriever!=null)
{
mediaMetadataRetriever.release();
}
}
返回位图;
}

我发现一种非常肮脏的方法是播放视频的前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();
    }
}

它对我有用。

什么类型的
消息
?确保它指向有效的资源。您好@OBX,您在哪里使用它?在一项活动中(这有关系吗)?我目前正在适配器中应用此功能。使用此代码,我收到了一个
java.lang.IllegalArgumentException 02-07 18:23:13.150 12240-12240/com.woppi.myapp W/System.err:at android.media.mediatedataretriever.setDataSource(mediatedataretriever.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,可能是权限问题,也可以尝试一下,让我知道您是否已经添加了权限!如果您使用的是更高的api,请降级版本,然后在没有运行时许可的情况下尝试。我有
互联网、写入外部存储、读取外部存储、录制音频、摄像头
我使用的是api级别21,但应用程序应支持4.2.2 Jellybean及更高版本。也许MediaMetadataRetriever不支持https?您是否在SSL下检索文件时使用了此选项