媒体提取器:Android 4.2上解码器给出的宽度错误
我正在为Unity编写一个插件,它使用媒体提取器解码并获取视频文件中的帧,然后重新编码为新的视频文件。然而,这些帧被解码成了错误大小的数组(在android 4.2.2上),因为编解码器认为高度是736,而实际上是720媒体提取器:Android 4.2上解码器给出的宽度错误,android,decoding,android-mediacodec,mediaextractor,Android,Decoding,Android Mediacodec,Mediaextractor,我正在为Unity编写一个插件,它使用媒体提取器解码并获取视频文件中的帧,然后重新编码为新的视频文件。然而,这些帧被解码成了错误大小的数组(在android 4.2.2上),因为编解码器认为高度是736,而实际上是720 for (int i = 0; i < numTracks; ++i) { MediaFormat format = extractor.getTrackFormat(i); String mime = format .getS
for (int i = 0; i < numTracks; ++i)
{
MediaFormat format = extractor.getTrackFormat(i);
String mime = format .getString(MediaFormat.KEY_MIME);
if(mime.startsWith("video/"))
{
extractor.selectTrack(i);
//Decoder
decoder = MediaCodec.createDecoderByType(mime);
decoder.configure(format, null, null, 0);
break;
}
}
这在运行4.4的设备上运行良好,但问题仅出现在较旧的4.2设备上。有人有什么想法吗?请记住,您还需要检查MediaFormat中的裁剪字段,高度字段是输出缓冲区的完整高度,包括可能的填充。例如,请参见-中的checkFrame函数,您将获得实际内容高度为
format.getInteger(“裁剪底部”)-format.getInteger(“裁剪顶部”)+1
,我想可能是有什么东西将高度填充到了32的倍数。您能从logcat显示MediaFormat转储吗?通过检查其他字段,可以恢复实际高度。
decoder.queueInputBuffer(inputBufIndex, 0, sampleSize, extractor.getSampleTime(), 0);
//Get Outputbuffer Index
int outIndex = decoder.dequeueOutputBuffer(info, 10000);