带有前景视频的 ExoPlayer 背景音频?

ExoPlayer background audio with foreground video?

我在 Android 应用程序中使用 ExoPlayer 进行媒体播放。

当您在我的应用程序中打开视频时,我希望在您可以听到音频的同时看到视频 - 就像任何普通媒体播放器一样。

但是,当您关闭应用程序时,我希望音频继续在后台服务中播放,并显示播放、暂停和重新启动内容的通知。

我知道如果在服务中实例化 ExoPlayer,我可以让音频以这种方式运行。但是,为了使视频可见,必须将 ExoPlayer 实例传递给 PlayerView 并且 PlayerView 必须 运行 在 UI 线程上。

如果 ExoPlayer 实例是在服务中定义的,并且 运行s 在服务的工作线程中,而 PlayerView 是在 Activity 和 运行s 中定义的 UI 线程,那么如何将 ExoPlayer 实例传递给 PlayerView? AIDL 仅限于基本类型(String、long、boolean 等),因此似乎不可能。

我希望在您关闭应用程序时音频不停止并重新启动(如果我有两个单独的播放器,一个在服务中,一个在 UI 线程中,情况就是如此)。我希望服务处理所有媒体下载、解码和音频播放,我想以某种方式绑定到服务以显示从 ExoPlayer 踢回的解码帧。

正如我在问题中指出的那样,您不能将 ExoPlayer 实例同时传递给 PlayerView 和服务——但是如果可以通过单例访问 ExoPlayer 实例,那么 PlayerView 和服务都可以使用 Singleton 的方法直接访问它。

我 运行 遇到的问题是,当我以这种方式创建应用程序时,单例(和 ExoPlayer 实例)存在于应用程序的进程中 space -- 而不是在前台服务中。因此,当应用程序被终止时,服务继续 运行 但它的 ExoPlayer 实例被销毁(通知仍然有效,但音频中断)

我还不确定如何将 Singleton 保留在服务进程中 space。这可能只是确保服务在应用程序之前访问单例的问题。