通过参考Aegonis的工作1和工作2,我也得到了H.264流,但颜色不正确.我正在使用HTC Butterfly进行开发.这是我的代码的一部分:
相机:
parameters.setPreviewSize(width, height);
parameters.setPreviewFormat(ImageFormat.YV12);
parameters.setPreviewFrameRate(frameRate);
Run Code Online (Sandbox Code Playgroud)
MediaCodec:
mediaCodec = MediaCodec.createEncoderByType("video/avc");
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 320, 240);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 500000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mediaCodec.start();
Run Code Online (Sandbox Code Playgroud)
使用COLOR_FormatYUV420Planar时,错误显示"[OMX.qcom.video.encoder.avc]不支持颜色格式19",因此我只能使用" COLOR_FormatYUV420SemiPlanar ".有谁知道为什么没有支持?
通过使用得到它:
int colorFormat = 0;
MediaCodecInfo.CodecCapabilities capabilities = codecInfo.getCapabilitiesForType(mimeType);
for (int i = 0; i < capabilities.colorFormats.length && colorFormat == 0; i++) {
int format = capabilities.colorFormats[i];
Log.e(TAG, "Using color format " + format);
}
Run Code Online (Sandbox Code Playgroud)
我们可以有21种颜色格式(COLOR_FormatYUV420SemiPlanar)和2130708361(没有相应的格式),我认为格式会改变取决于设备.
然后,我尝试了 …
我正在尝试使用Android MediaCodec API对NV12流进行硬件编码(avc).
当使用OMX.qcom.video.encoder.avc时,分辨率1280x720和640x480工作正常,而其他(即640x360,320x240,800x480)产生输出,其中色度分量似乎移位(请参阅 快照).
我通过将输入图像保存到jpeg文件来仔细检查输入图像是否正确.此问题仅发生在QualComm设备(即三星Galaxy S4)上.
任何人都有这个正常工作?还需要任何额外的设置/怪癖吗?
android video-encoding hardware-acceleration android-hardware mediacodec
如何在不使用FFmpeg或JCodec的情况下将图像转换为视频,仅使用android MediaCodec.视频图像是位图文件,可以是ARGB888或YUV420(我的选择).最重要的是视频必须可以在Android设备上播放,最大API是16.我知道API 18 MediaMuxer,我不能使用它.
请帮助我,我坚持了很多天.(JCodec要慢,FFmpeg使用起来很复杂).