想从网址获取专辑歌曲,这是我迄今为止的尝试:
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秒时间需要获取pic并且当添加此库时apk文件从1.8mb变为24mb!这真是太棒了!
所以世界上任何一个人都知道如何以良好的方式做到这一点?如果有人可以请求帮助
答案 0 :(得分:0)
如果您可以了解如何远程执行此操作,则可以使用与File
:bumptech/glide#699类似的方式使用Glide。问题是你仍然需要下载整个.mp3文件,我想这需要4-5秒。我不完全确定.mp3格式,但我认为专辑封面可能在文件的末尾。因此,不建议使用此方法(类似于how it's a bad idea to load video thumbs from http)。无论如何你想要这样做,然后在加载上拍一个.diskCacheStrategy(SOURCE)
来保存文件,然后写一个自定义解码器来使用
最佳方法是,如果您托管mp3,可以从单独的文件中提供专辑封面;或使用公共服务来检索它。查看任何专辑艺术下载程序以获取可能的服务。
有一件事是肯定的:没有协议,没有任何方法可行,请根据需要在www.
前加http://
或https://
。