Exoplayer: Как воспроизвести звук через наушник?

В настоящее время я использую следующий код для переключения аудиопотока на наушник, когда устройство приближается к любому объекту:

@Override
public void onSensorChanged(SensorEvent event) {

    if (mAudioManager.isWiredHeadsetOn() || !(mCurrentPlaybackStatus == STATUS_PLAYING
            || mCurrentPlaybackStatus == STATUS_PREPARING)) {
        return;
    }

    boolean isClose = event.values[0] < mSensor.getMaximumRange();

    if (!mScreenDisabled && isClose) {

        mAudioManager.setMode(AudioManager.STREAM_MUSIC);
        mAudioManager.setSpeakerphoneOn(false);

        disableScreen();

        mScreenDisabled = true;

    } else if (mScreenDisabled && !isClose) {

        mAudioManager.setSpeakerphoneOn(true);
        mAudioManager.setMode(mAudioManagerMode);

        enableScreen();
        mScreenDisabled = false;
    }
}

К сожалению, при вызове .setMode(AudioManager.STREAM_MUSIC); происходит значительная задержка (> 500 мс).

С MediaPlayer по умолчанию для Android выходной поток можно изменить без задержки:

mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); // ear piece
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); // speakerphone

Есть ли способ изменить выходной поток ExoPlayer?


person timoschloesser    schedule 05.12.2016    source источник


Ответы (2)


Для изменения типа потока ExoPlayer вам необходимо передать тип потока через конструктор MediaCodecAudioTrackRenderer в конструктор AudioTrack (ExoPlayer),

  public AudioTrack() {
    this(null, AudioManager.STREAM_MUSIC);   //default is STREAM_MUSIC
  }

  public AudioTrack(AudioCapabilities audioCapabilities, int streamType) {

  }

Таким образом, в вашем приложении вы укажете тип при создании средства визуализации.

Перейдите по https://github.com/google/ExoPlayer/issues/755 для больше информации

person abhishesh    schedule 17.01.2017
comment
Можно ли изменить тип потока во время игры? - person timoschloesser; 18.01.2017
comment
Вы не можете изменить тип потока во время воспроизведения. В более ранней версии exo player было разрешено ТОЛЬКО STREAM_MUSIC. Теперь они дали возможность использовать разные типы потоков. - person abhishesh; 18.01.2017

Играйте через наушник

mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
person Ajay Venugopal    schedule 17.01.2017
comment
Это не связано с ExoPlayer. - person timoschloesser; 17.01.2017
comment
@timoschloesser, на самом деле это связано с ExoPlayer, если mediaPlayer является экземпляром SimpleExoPlayer :) github.com/google/ExoPlayer/blob/270f68a/library/src/main/java/ - person Paweł Nadolski; 11.02.2018