Android音频在某些带有MediaCodec和AudioTrack的设备上速度过快

Android音频在某些带有MediaCodec和AudioTrack的设备上速度过快,android,audio,mp3,android-mediacodec,audiotrack,Android,Audio,Mp3,Android Mediacodec,Audiotrack,我正在使用MediaExtractor、MediaCodec和AudioTrack对音频进行解码。在从MediaCodec接收到MediaCodec.INFO\u OUTPUT\u FORMAT\u更改后,我正在使用MediaCodec.getOutputFormat()返回的MediaFormat配置AudioTrack。在某些设备上,这会导致音频加速,而MediaExtractor返回的MediaFormat工作正常。(在其他设备上,情况正好相反。) 以下是一些细节: 所讨论的音频文件主要

我正在使用
MediaExtractor
MediaCodec
AudioTrack
对音频进行解码。在从
MediaCodec
接收到
MediaCodec.INFO\u OUTPUT\u FORMAT\u更改后,我正在使用
MediaCodec.getOutputFormat()
返回的
MediaFormat
配置
AudioTrack
。在某些设备上,这会导致音频加速,而
MediaExtractor
返回的
MediaFormat
工作正常。(在其他设备上,情况正好相反。)

以下是一些细节:

  • 所讨论的音频文件主要是22050 Hz单声道MP3
  • 播放速度过快的设备包括Prestigio PMP3007C3G、华硕记事本HD 7(ME173X)、联想A5500-H(A5500-H)和一些Wiko设备
  • 不幸的是,我不知道返回的
    MediaFormat
    的参数,因为我没有访问设备的权限,但我假设它返回单声道立体声,或返回22050 Hz的44100 Hz,而没有实际对文件进行重采样

任何帮助都将不胜感激。谢谢

我没有一个好的修复建议;在我看来,这些设备的解码器似乎有问题——您的代码现在正在做正确的事情。(
MediaCodec
返回的
MediaFormat
应该比
MediaExtractor
返回的更具权威性)由于返回的更改参数(尤其是单声道输入的立体声输出)似乎是合法的,因此很难进行某种启发式尝试来猜测是否错误。如果你能将这种行为精确定位到一个(或几个)解码器名称或芯片组,你也许能够尝试检测它并解决它。谢谢-这似乎很好地反映了这种情况。不过,Android MediaPlayer似乎在这些设备上工作正常,所以我会继续四处探索,看看是否还有其他东西可以找到。你找到为什么在某些设备上音频播放速度更快的原因了吗?也许下面的内容可能会有所帮助:
int sampleRate=AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM\u MUSIC)
audioTrack.setPlaybackRate(sampleRate)