gpt4 book ai didi

android - 是否可以从 Android 中的远程 mp3 文件检索专辑封面?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:39:09 25 4
gpt4 key购买 nike

我目前正在编写一个 UPnP 远程控制应用程序,用于将远程 MediaServer 连接到远程 MediaRenderer。由于实际的 MP3 文件未发送到 Android 设备,我希望能够获取当前播放文件的专辑封面,而无需将整个 MP3 文件下载到我的手机。

我读过 MediaMetadataRetriever 对这类事情很有用,但我没能让它发挥作用。每次尝试时,我都会通过调用 MediaMetadataRetriever#setDataSource 不断收到 IllegalArgumentException,这表明我的文件句柄或 URI 无效。

MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();

以下是有效的,因为它是设备本身的直接文件路径:

metaRetriever.setDataSource("/sdcard/Music/Daft_Punk/Homework/01 - Daftendirekt.mp3");

但是,以下任何一个都会失败并出现相同的错误:

metaRetriever.setDataSource(appCtx, Uri.parse("http://192.168.1.144:49153/content/media/object_id/94785/res_id/1/rct/aa"));
metaRetriever.setDataSource(appCtx, Uri.parse("http://192.168.1.144:49153/content/media/object_id/94785/res_id/0/ext/file.mp3"));
metaRetriever.setDataSource("http://192.168.1.144:49153/content/media/object_id/94785/res_id/0/ext/file.mp3");

第一个是从 UPnP 元数据中提取的 albumArtURI(没有 *.mp3 扩展名,但如果将文件粘贴到网络浏览器中,该文件将被下载)。

第二次和第三次尝试使用 UPnP 元数据中的“res”值,它指向服务器上的实际文件。

我希望我只是错误地解析了 URI,但我没有想法。

有什么建议吗?此外,从 UPnP 服务器拉取时是否有更好的方法来完全做到这一点? FWIW,我正在使用 Cling UPnP 库。

== 解决方案 ==

我开始研究 william-seemann 的回答,这让我想到了这个:MediaMetadataRetriever.setDataSource(String path) no longer accepts URLs

这篇文章的评论 #2 提到使用不同版本的 setDataSource() 仍然接受远程 URL。

这是我最终所做的并且效果很好:

private Bitmap downloadBitmap(final String url) {
final MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
metaRetriever.setDataSource(url, new HashMap<String, String>());
try {
final byte[] art = metaRetriever.getEmbeddedPicture();
return BitmapFactory.decodeByteArray(art, 0, art.length);
} catch (Exception e) {
Logger.e(LOGTAG, "Couldn't create album art: " + e.getMessage());
return BitmapFactory.decodeResource(getResources(), R.drawable.album_art_missing);
}
}

最佳答案

FFmpegMediaMetadataRetriever将从远程文件中提取元数据(披露:我创建了它)。我有与MediaMetadataRetriever相同的界面但它使用 FFmpeg因为它是后端。这是一个例子:

FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
mmr.setDataSource(mUri);
String album = mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ALBUM);
String artist = mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ARTIST);
byte [] artwork = mmr.getEmbeddedPicture();
mmr.release();

关于android - 是否可以从 Android 中的远程 mp3 文件检索专辑封面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com