mediacodec init:
mediaCodec = MediaCodec.createDecoderByType("video/avc");
mediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);
mediaFormat.setInteger("color-format", 19);
mediaCodec.configure(mediaFormat, paramSurface, null, 0);
int i = mediaCodec.dequeueOutputBuffer(this.bufferInfo, 0L);
if (i >= 0)
{
int j = i;
mediaCodec.releaseOutputBuffer(j, true);
if ((this.bufferInfo.flags & 0x4) != 0)
Log.d(TAG, "BUFFER_FLAG_END_OF_STREAM");
return ;
}
else if (i == -3)
{
Log.d(TAG, "INFO_OUTPUT_BUFFERS_CHANGED");
outputBuffers = mediaCodec.getOutputBuffers();
}
else if (i == -2)
{
MediaFormat localMediaFormat = mediaCodec.getOutputFormat();
Log.d(TAG, "Output format has changed to " + localMediaFormat);
Log.d(TAG, "Output format width:" + localMediaFormat.getInteger("width"));
Log.d(TAG, "Output format height:" + localMediaFormat.getInteger("height"));
}
else if(i==-1){
Log.d(TAG, "dequeueOutputBuffer timeout pts is " + pts);
}
问问题
475 次
1 回答
1
假设您在评论中指的是 ZTE V987,我发现的规格说它运行带有 PowerVR GPU 的 Android 4.1.2,但没有说明视频 IP 来自谁,所以它给出了明确的答案。但是,我认为问题在于您将颜色格式硬编码为 19(平面 YUV 420),而某些设备不支持该格式。
例如,如果 PVR GPU 与 TI 视频配对(就像在 Galaxy Nexus 中一样),您可能需要COLOR_TI_FormatYUV420PackedSemiPlanar
(半平面格式)。您可能会在 logcat 输出中看到一些相关消息。
如果您查看encodeDecodeVideoFromBuffer()
CTS EncodeDecodeTest中的方法,您可以看到它如何使用selectColorFormat()
方法来选择颜色格式。如果您无法将 ffmpeg 配置为以这种格式提供数据,则您必须自己进行转换。有关布局的信息,请参见generateFrame()
方法。
于 2013-11-22T15:45:27.290 回答