android - ExoPlayer 背景音频和前景视频?

标签 android audio video service exoplayer

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

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

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

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

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

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

最佳答案

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

我遇到的问题是,当我以这种方式创建应用程序时,Singleton(和 ExoPlayer 实例)存在于应用程序的进程空间中,而不是前台服务中。因此,当应用程序被终止时,服务继续运行,但其 ExoPlayer 实例被破坏(通知保持 Activity 状态,但音频中断)

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

关于android - ExoPlayer 背景音频和前景视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56433726/

相关文章:

java - 即使保存后共享首选项也无法检索变量

java - 如何让按钮在一段时间内不可点击?

html - HTML5麦克风保存到服务器上的文件或服务器上的进程

ios - AVAssetExportSession 完成导出后不告诉我

android - Android 上 native 代码中的音频捕获/渲染

android - 无法打开 Activity : cannot create instance of Android View Model

java - 如何在android中开发音频流应用程序?

javascript - "useRefs"变量是 div 引用的初始值?

xcode - 在快速附加到电子邮件之前压缩视频大小

c++ - 比 C++ 中的 OpenCV 库更快地获取总帧数和 FPS