媒体编解码器(MediaCodec)是否总是生成16位音频输出?

6
我正在使用Android的MediaCodec类从音频文件中读取原始数据,这部分工作很顺利。
问题是我不确定假设输出数据总是16位是否安全?
实验表明输出确实为16位,但我不知道如何在运行时检查。MediaCodec文档似乎没有告诉我。MediaFormat KEY_CHANNEL_MASK 可以告诉我,但是MediaCodec似乎没有设置这些标志。它设置采样率和mime类型,但没有任何可以明确告诉我比特大小的信息。
我想,根据连续块的呈现时间差和采样率之间的差异,我应该能够计算出来,但这似乎并不是很令人满意。
有办法可以知道吗?或者有没有写在某个地方说明我不需要考虑这个问题?
2个回答

7

目前在原始的Android系统中,输出总是16位。如果将来有所改变,我们会添加一个额外的格式密钥以指定格式。请注意,KEY_CHANNEL_MASK只会告诉您包含哪些通道(例如左、右、中心等),而不是样本格式。


那么,如果我假设使用16位,这样就能保证未来兼容吗? - ams
1
是的,那应该是安全的。 - marcone
16位已经具备未来性。因为24位和其他格式已经得到支持。 - yano

1
不,它不会。如果你有24位的PCM(WAV)文件,它会给你24位的音频。看起来没有办法确定这一点。我在这里添加了一个问题MediaCodec和24位PCM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接