今天在使用OpenSLES 進行音頻播放的時候,系統提示了這樣一句話:
W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client; transfer 1, track 44100 Hz, output 48000 Hz
由於使用的是warning 標識,個人覺得有必要了解一下。
從它的提示看,大概是說輸入和輸出的音頻采樣率不一致,剛開始感到很奇怪,因為我在播放PCM數據前,已經利用FFmpeg對原始數據進行音頻重采樣了,確保播放的PCM數據采樣率就是 44100, 所以應該不是我code的問題,后來在
AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client due to mismatching sample rate
這篇文章中得到了答案:
大概意思就是說,你輸入給OpenSLES 的音頻的采樣率與硬件默認播放的音頻采樣率不一致。於是按照他給的辦法,看了一下我手頭這款設備的默認的音頻采樣率:
AudioManager myAudioMgr = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); String nativeSampleRate = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); Log.i(TAG, "hardware support samplerate: " + nativeSampleRate);
Log:
那看來就是這個問題了,於是我將FFmpeg重采樣的采樣率修改成48000, 將OpenSLES 播放前配置也改成48000,果然沒有這條錯誤信息了。
不過這個改動其實沒有必要,44100 支持的比較廣泛,這里也就是提示不一致罷了,所以不用擔心 。