首页 > 解决方案 > 使用 Exoplayer2,如何始终使用默认图稿(即使音频已嵌入图稿?)

问题描述

我的 Android 应用程序有大量远程托管的媒体文件(通过 AWS),其中一些包含嵌入式艺术作品。在播放任何这些音频媒体时,我希望使用我的默认图稿(在没有嵌入图稿时使用)来代替。我努力了

app:use_artwork="false"
app:default_artwork="@drawable/backgroundimage"

但与 Javadocs 似乎暗示的结果相反,我当然只是得到黑色背景。(use_artwork="false" 似乎真的意味着“不使用艺术品”——而 Javadocs 更多地暗示它意味着“不要使用嵌入式 ID3 艺术品”)

没有下载千兆字节的媒体文件并对它们进行批量操作(一个问题,因为文件通常是动态添加的),有没有一种解决方案可以抑制嵌入的图稿并使用我的背景?

稍微摸索了一下,我找到了https://github.com/mpatric/mp3agic,但这里的问题是文件是通过 Exoplayer 流式传输的,而不是下载让我以编程方式操作。

标签: androidexoplayerexoplayer2.xalbumart

解决方案


在稍微浏览了 Exoplayer 源之后,这就是我想出的。这不是绝对理想的,因为在替换之前嵌入图像会快速闪烁,但我认为这只是移动逻辑以找到最佳位置的问题。

app:use_artwork="false" 从我的 activity_main.xml中删除了

在我的 BroadcastReceiver 中,在“trackChanged”事件中,我添加了这个(类似于在 Exoplayer 库本身内部完成的操作):

Bitmap artWork = BitmapFactory.decodeResource(getResources(), R.drawable.backgroundimage);
ImageView aw = (ImageView) findViewById(R.id.exo_artwork);
aw.setImageBitmap(artWork);
aw.setVisibility(View.VISIBLE);

推荐阅读