0

想从 url 获取歌曲的专辑封面,这是我迄今为止的尝试:

SongPath = "www.asd.com/music.mp3";
        android.media.MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    try{
                mmr.setDataSource(SongPath);
        }catch(Exception e){}
                byte [] data = mmr.getEmbeddedPicture();

                if(data != null)
                {
                    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                    imageView.setImageBitmap(bitmap);
                }
                else
                {
                    imageView.setImageResource(R.drawable.jak);
                }

但是当运行这段代码时得到这个:call to get embedded picture failed 所以我研究了这个,有些人通过改变这部分来解决这个问题
mmr.setDataSource(SongPath);

对此

mmr.setDataSource(SongPath,new HashMap<String, String>()); 我这样做但是当运行应用程序图像视图时什么都不显示并得到这个:SkImageDecoder::Factory returned null

注意: 我可以做到这一点的唯一方法是使用FFmpegMediaMetadataRetriever库(类似MediaMetadataRetriever)并且工作,但问题是库似乎很慢..平均需要 4.5 秒的时间来获取图片,当添加这个库时,apk 文件从 1.8mb 变为 24mb!这太大了!

所以世界上任何人都知道如何用好方法做到这一点?如果有人可以请帮助

4

1 回答 1

0

如果你能弄清楚如何远程操作,你可以以类似的方式使用 Glide Filebumptech/glide#699 。问题是您仍然需要下载整个 .mp3 文件,我猜这需要 4-5 秒。我不太确定 .mp3 格式,但我认为专辑封面可能位于文件末尾。出于这个原因,不建议使用这种方法(类似于从 http 加载视频缩略图的坏主意)。如果你无论如何都想走这条路,那么先.diskCacheStrategy(SOURCE)在负载上拍一个以保存文件,然后编写一个自定义解码器来使用

如果您托管 mp3,最好的方法是从单独的文件中提供专辑封面;或使用公共服务来检索它。请参阅任何专辑封面下载程序以获取可能的服务。

有一件事是肯定的:没有协议,什么都行不通,在你的前面www.加上http://https://必要时。

于 2017-02-28T18:51:21.830 回答