【问题标题】:ExoPlayer background audio with foreground video?ExoPlayer 背景音频和前景视频?
【发布时间】:2019-06-03 19:52:59
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: android audio video service exoplayer


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多