2016-12-05 28 views
8

Tôi hiện đang sử dụng mã sau đây để chuyển đổi các dòng âm thanh đến tai mảnh khi thiết bị được gần bất kỳ đối tượng:Exoplayer: Làm thế nào để phát âm thanh qua tai?

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

Thật không may có sự chậm trễ đáng kể khi gọi .setMode(AudioManager.STREAM_MUSIC); (> 500ms)

Với MediaPlayer mặc định của Android, luồng đầu ra có thể được thay đổi mà không bị chậm trễ:

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

Có cách nào để thay đổi luồng đầu ra của ExoPlayer không?

Trả lời

0

Chơi qua mảnh tai

mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 
+0

Điều này không liên quan đến ExoPlayer. – timoschloesser

+0

@timoschloesser, thực ra nó liên quan đến ExoPlayer nếu mediaPlayer là một phiên bản của SimpleExoPlayer :) https://github.com/google/ExoPlayer/blob/270f68a/library/src/main/java/com/google/android/exoplayer2 /SimpleExoPlayer.java#L300 –

2

Đối với thay đổi ExoPlayer của dòng loại, bạn cần phải vượt qua các loại dòng thông qua các nhà xây dựng MediaCodecAudioTrackRenderer, vào AudioTrack constructor (ExoPlayer của),

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

    public AudioTrack(AudioCapabilities audioCapabilities, int streamType) { 

    } 

Vì vậy, trong ứng dụng của bạn, bạn sẽ chỉ định loại khi bạn xây dựng trình kết xuất đồ họa.

Vui lòng tham khảo https://github.com/google/ExoPlayer/issues/755 để biết thêm thông tin

+0

Có thể thay đổi loại luồng trong khi phát không? – timoschloesser

+0

Bạn không thể thay đổi loại luồng trong khi phát. Trên phiên bản cũ hơn của trình phát exo, chỉ STREAM_MUSIC đã được cho phép. Bây giờ họ đã cho sự linh hoạt để sử dụng các loại luồng khác nhau. – abhishesh

Các vấn đề liên quan