我正在为 Unity 编写一个插件,它使用 Media Extractor 解码并从视频文件中获取帧,然后重新编码为新的视频文件。然而,帧被解码成一个错误大小的数组(在 android 4.2.2 上),因为编解码器认为高度是 736,而实际上它是 720。
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;
}
}
输出缓冲区索引返回 INFO_OUTPUT_BUFFERS_CHANGED,然后返回 INFO_OUTPUT_FORMAT_CHANGED。记录这告诉我解码器认为高度是 736 而不是正确的 720。
decoder.queueInputBuffer(inputBufIndex, 0, sampleSize, extractor.getSampleTime(), 0);
//Get Outputbuffer Index
int outIndex = decoder.dequeueOutputBuffer(info, 10000);
这在运行 4.4 的设备上运行良好,该问题仅出现在较旧的 4.2 设备上。有人有什么想法吗?