Android - 具有音频焦点的 SimpleExoPlayer
Android - SimpleExoPlayer with audio focus
我使用 SimpleExoPlayer 实现了一个测试应用,效果很好。我现在想将 audiofocus 添加到我的应用程序中。
在用户启动应用程序时开始播放音频焦点很容易。在 onCreate() 末尾添加常用代码:
if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == audioManager.requestAudioFocus(...
工作正常。
但是我在用户按下播放按钮时请求音频焦点时遇到问题,我记得这是由 PlaybackControlView 封装的。
也就是说,在使用SimpleExoPlayer和SimpleExoPlayerView(PlaybackControlView)时,如何捕捉播放按钮的点击事件?
重新定义 simpleExoPlayer.setPlayWhenReady() 似乎不可能,因为 SimpleExoPlayer 的实例是由工厂提供的,而不是使用 new 关键字的实例。
simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(...)
除了使用播放按钮解决这个问题,还有其他想法吗?提前致谢。
更新(17/02/17):
github.com/google/ExoPlayer 上的这个问题被标记为增强。
here
他们第一个回答是:
You can do this by adding a listener to the ExoPlayer instance (ExoPlayer.addListener) and implementing the listener's onPlayerStateChanged to obtain or release audio focus as necessary. Note that onPlayerStateChanged will be called whenever playWhenReady is changed.
此解决方案的小问题是 onPlayerStateChanged() 在 audio/video 开始播放之后调用,而不是之前。我实现了它,当两个音频同时播放时,非常短的重叠当然从耳朵上看不出来。因此,如果您需要,它可以被视为一个很好的解决方案。我会让你知道 when/if ExoPlayer 团队提供了更好的解决方案。
ExoPlayer 设计团队修复了以下补丁中的问题:
您可以使用 setAudioArttribute
在 exo 播放器中轻松管理您的音频焦点。
这是代码:
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA)
.setContentType(C.CONTENT_TYPE_MOVIE)
.build();
然后将此 AudioAttributes 设置为播放器
player.setAudioAttributes(audioAttributes, true);
这里的 true 代表处理音频焦点,如果它是 true。
我使用 SimpleExoPlayer 实现了一个测试应用,效果很好。我现在想将 audiofocus 添加到我的应用程序中。
在用户启动应用程序时开始播放音频焦点很容易。在 onCreate() 末尾添加常用代码:
if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == audioManager.requestAudioFocus(...
工作正常。
但是我在用户按下播放按钮时请求音频焦点时遇到问题,我记得这是由 PlaybackControlView 封装的。
也就是说,在使用SimpleExoPlayer和SimpleExoPlayerView(PlaybackControlView)时,如何捕捉播放按钮的点击事件?
重新定义 simpleExoPlayer.setPlayWhenReady() 似乎不可能,因为 SimpleExoPlayer 的实例是由工厂提供的,而不是使用 new 关键字的实例。
simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(...)
除了使用播放按钮解决这个问题,还有其他想法吗?提前致谢。
更新(17/02/17):
github.com/google/ExoPlayer 上的这个问题被标记为增强。 here
他们第一个回答是:
You can do this by adding a listener to the ExoPlayer instance (ExoPlayer.addListener) and implementing the listener's onPlayerStateChanged to obtain or release audio focus as necessary. Note that onPlayerStateChanged will be called whenever playWhenReady is changed.
此解决方案的小问题是 onPlayerStateChanged() 在 audio/video 开始播放之后调用,而不是之前。我实现了它,当两个音频同时播放时,非常短的重叠当然从耳朵上看不出来。因此,如果您需要,它可以被视为一个很好的解决方案。我会让你知道 when/if ExoPlayer 团队提供了更好的解决方案。
ExoPlayer 设计团队修复了以下补丁中的问题:
您可以使用 setAudioArttribute
在 exo 播放器中轻松管理您的音频焦点。
这是代码:
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA)
.setContentType(C.CONTENT_TYPE_MOVIE)
.build();
然后将此 AudioAttributes 设置为播放器
player.setAudioAttributes(audioAttributes, true);
这里的 true 代表处理音频焦点,如果它是 true。