使 exoPlayer 2.0 通过扬声器播放
Making exoPlayer 2.0 to play through a speakerphone
所以我正在开发一个闹钟应用程序,当我的设备有耳机插孔时,我无法让 exoplayer 使用扬声器。我发现 this solution, but as comments says it's not actually a reliable way to do this. I also found that somebody had a similar problem here 并且有一个方法 SimpleExoPlayer.setAudioStreamType()
,但不幸的是它在 ExoPlayer 2.0.4 中不起作用。有什么想法吗?
好的,我找到了解决办法!创建 exoPlayer 时,您可以使用默认渲染器(即 ExoPlayerFactory.newSimpleInstance()
的用途)或创建自己的渲染器来执行特定操作。默认音频渲染器(MediaCodecAudioRenderer
)的问题在于它默认设置了 AudioManager.STREAM_MUSIC
,而 ExoPlayer 2.x 没有任何方法来更改它(尽管有这样一个ExoPlayer 中的方法 1.x).
为了解决这个问题,我必须创建自己的音频渲染器并将 AudioManager.STREAM_ALARM
作为其参数之一传递。之后,您可以使用 ExoPlayerFactory.newInstance()
并将创建的渲染器传递给它。
这是一个 class,您可以使用它来获取 ExoPlayer 的实例,该实例将始终通过扬声器 phone 播放音乐。它还将使用警报音量级别。
public class AlarmExoPlayerFactory {
public static ExoPlayer newInstance() {
Renderer[] renderers = new Renderer[1];
Renderer audioRenderer = new MediaCodecAudioRenderer(MediaCodecSelector.DEFAULT, null, true,
null, null, null, AudioManager.STREAM_ALARM);
renderers[0] = audioRenderer;
Handler handler = new Handler();
TrackSelector trackSelector = new DefaultTrackSelector(handler);
return ExoPlayerFactory.newInstance(renderers, trackSelector);
}
}
所以我正在开发一个闹钟应用程序,当我的设备有耳机插孔时,我无法让 exoplayer 使用扬声器。我发现 this solution, but as comments says it's not actually a reliable way to do this. I also found that somebody had a similar problem here 并且有一个方法 SimpleExoPlayer.setAudioStreamType()
,但不幸的是它在 ExoPlayer 2.0.4 中不起作用。有什么想法吗?
好的,我找到了解决办法!创建 exoPlayer 时,您可以使用默认渲染器(即 ExoPlayerFactory.newSimpleInstance()
的用途)或创建自己的渲染器来执行特定操作。默认音频渲染器(MediaCodecAudioRenderer
)的问题在于它默认设置了 AudioManager.STREAM_MUSIC
,而 ExoPlayer 2.x 没有任何方法来更改它(尽管有这样一个ExoPlayer 中的方法 1.x).
为了解决这个问题,我必须创建自己的音频渲染器并将 AudioManager.STREAM_ALARM
作为其参数之一传递。之后,您可以使用 ExoPlayerFactory.newInstance()
并将创建的渲染器传递给它。
这是一个 class,您可以使用它来获取 ExoPlayer 的实例,该实例将始终通过扬声器 phone 播放音乐。它还将使用警报音量级别。
public class AlarmExoPlayerFactory {
public static ExoPlayer newInstance() {
Renderer[] renderers = new Renderer[1];
Renderer audioRenderer = new MediaCodecAudioRenderer(MediaCodecSelector.DEFAULT, null, true,
null, null, null, AudioManager.STREAM_ALARM);
renderers[0] = audioRenderer;
Handler handler = new Handler();
TrackSelector trackSelector = new DefaultTrackSelector(handler);
return ExoPlayerFactory.newInstance(renderers, trackSelector);
}
}