让exoPlayer 2.0通过扬声器播放

时间:2017-03-04 18:15:18

标签: android exoplayer audiotrack

所以我正在使用闹钟应用程序,当我在设备中安装了耳机插孔时,我在使exoplayer使用扬声器时遇到了麻烦。我找到this solution,但正如评论所说,它实际上并不是一种可行的方法。我还发现有人遇到类似的问题here并且有一个方法SimpleExoPlayer.setAudioStreamType(),但不幸的是它在ExoPlayer 2.0.4中不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好吧,我找到了解决方案!创建exoPlayer时,您可以使用默认渲染器(即ExoPlayerFactory.newSimpleInstance())或创建自己的渲染器来执行特定的操作。默认音频渲染器(MediaCodecAudioRenderer)的问题是它默认设置为AudioManager.STREAM_MUSIC,而ExoPlayer 2.x没有任何方法可以更改它(尽管有这样的方法) ExoPlayer 1.x)。

为了解决这个问题,我必须创建自己的音频渲染器并将AudioManager.STREAM_ALARM作为其参数之一传递。之后,您可以使用ExoPlayerFactory.newInstance()并将创建的渲染器传递给它。

这是一个可用于获取ExoPlayer实例的课程,该实例将始终通过扬声器电话播放音乐。它还将使用警报音量级别。

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);
    }
}