2017-03-04 208 views
0

因此,我正在研究一个闹钟应用程序,并且当我在设备中有耳机插孔时,使用外接扬声器来使用扬声器电话时遇到了麻烦。我发现this solution,但正如评论所说,这不是一个可靠的方法来做到这一点。我还发现有人有类似的问题here,并且有一个方法SimpleExoPlayer.setAudioStreamType(),但不幸的是它在ExoPlayer 2.0.4中不起作用。有任何想法吗?使exoPlayer 2.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); 
    } 
} 
相关问题