gpt4 book ai didi

android - MediaFormat.getByteBuffer ("csd-0") 在某些设备上返回 null

转载 作者:行者123 更新时间:2023-11-29 19:27:22 30 4
gpt4 key购买 nike

我正在尝试在我的应用程序中解码 AAC 编码文件并初始化用于初始化我的 MediaCodec 对象的 MediaFormat 对象,这是设置变量的代码对于 MediaFormat 对象

MediaExtractor mediaExtractor = new MediaExtractor();
try {
mediaExtractor.setDataSource(audioFilePath);
} catch (IOException e) {
return false;
}
Log.d(TAG, "Number of tracks in the file are:" + mediaExtractor.getTrackCount());

MediaFormat mediaFormat = mediaExtractor.getTrackFormat(0);

Log.d(TAG, "mediaFormat:" + mediaFormat.toString());

mSampleRate = mediaFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE);
Log.d(TAG, "mSampleRate: " + mSampleRate);


mChannels = mediaFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT);

Log.d(TAG, "mChannels number of channels: " + mChannels);

// Reading the duration from the file and converting from micro seconds to milliseconds.
mDuration = (int) (mediaFormat.getLong(MediaFormat.KEY_DURATION) / 1000);

Log.d(TAG, "duration: " + mDuration);

// Getting the csd-0 info from the file ..
mCSDBuffer = mediaFormat.getByteBuffer("csd-0");

我面临的问题是语句 mCSDBuffer = mediaFormat.getByteBuffer("csd-0") 为某些设备上的同一文件获取了 null。该应用程序正在生产中,我在 Android API 级别为 17、18 和 19 的 armabi-v7a/armabi 处理器设备上看到此错误,并且这些错误中的大部分都在三星设备上。有什么方向吗?

最佳答案

如果 csd-0 缓冲区为空,那么我希望它在传递到 MediaCodec 时仍能正确解码。如果您只是选择不将 csd-0 数据设置为 MediaCodec 的输入(如果它为 null),是否可以?一般来说,如果您直接将 MediaExtractor 输出通过管道传输到 MediaCodec,您应该能够对其进行解码。

尽管 MediaExtractor 输出的数据的实际格式并没有非常严格的规定,所以在实践中众所周知,一些制造商(主要是三星)以只有他们自己的解码器处理的方式改变了这种格式。参见例如https://code.google.com/p/android/issues/detail?id=74356对于另一个相同的情况。

理想情况下,Android CTS 测试会变得更加严格,以确保 MediaExtractor 的行为一致,允许其在更通用的上下文中使用,或者使用除 MediaCodec 之外的其他解码器。 (例如,对于当前的三星问题,您不能在一台设备上使用 MediaExtractor,通过网络将提取的数据发送到另一台设备并在那里解码。)

关于android - MediaFormat.getByteBuffer ("csd-0") 在某些设备上返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41014730/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com