[英]Exoplayer: How to play audio through ear piece?
當設備接近任何 object 時,我目前正在使用以下代碼將音頻 stream 切換到耳機:
@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 毫秒)
使用 Android 的默認 MediaPlayer output stream 可以立即更改:
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); // ear piece
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); // speakerphone
有什么辦法可以改變 ExoPlayer 的 output stream?
為了更改ExoPlayer的流類型 ,您需要將流類型通過MediaCodecAudioTrackRenderer構造函數傳遞到(ExoPlayer的)AudioTrack構造函數中,
public AudioTrack() {
this(null, AudioManager.STREAM_MUSIC); //default is STREAM_MUSIC
}
public AudioTrack(AudioCapabilities audioCapabilities, int streamType) {
}
因此,在您的應用程序中,您將在構建渲染器時指定類型。
通過聽筒播放
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
在 exoPlayer 中,我通過以下方式解決了這個問題:使用此 function 將揚聲器更改為聽筒
audioPlayer.setAudioStreamType(C.STREAM_TYPE_VOICE_CALL);
反之亦然(使用電話揚聲器)
audioPlayer.setAudioStreamType(C.STREAM_TYPE_MUSIC);
但是在較新版本的 exoPlayer 中,這個 function 已被刪除。 而不是使用這個:
fun setAttributes(@C.StreamType streamType: Int) {
@AudioUsage val usage = Util.getAudioUsageForStreamType(streamType)
@AudioContentType val contentType =
Util.getAudioContentTypeForStreamType(streamType)
val audioAttributes =
AudioAttributes.Builder().setUsage(usage).setContentType(contentType).build()
audioPlayer.setAudioAttributes(audioAttributes, false)
}
最后調用 function:
setAttributes(C.STREAM_TYPE_VOICE_CALL)
或者
setAttributes(C.STREAM_TYPE_MUSIC)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.