我是android新手。我一直在寻找使用Camera2 api和MediaCodec录制视频的方法,但是没有运气。我看到了一个使用MediaRecorder的Google(https://github.com/googlesamples/android-Camera2Video)示例。我的问题是如何用MediaCodec替换此MediaRecorder。

最佳答案

怎么样(对于VP8):

MediaFormat format = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_VP8, width, height);
String codecName = new MediaCodecList(MediaCodecList.REGULAR_CODECS).findEncoderForFormat(format);
if (codecName == null)
    return;
Surface encoderInput = null;
try {
    MediaCodec codec = MediaCodec.createByCodecName(codecName);
    codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
    encoderInput = codec.createInputSurface();
    codec.setCallback(new MediaCodec.Callback() {
        @Override
        public void onInputBufferAvailable(@NonNull MediaCodec codec, int index) {}

        @Override
        public void onOutputBufferAvailable(@NonNull MediaCodec codec, int index, @NonNull MediaCodec.BufferInfo info) {
            // Your stuff here
        }

        @Override
        public void onError(@NonNull MediaCodec codec, @NonNull MediaCodec.CodecException e) {}

        @Override
        public void onOutputFormatChanged(@NonNull MediaCodec codec, @NonNull MediaFormat format) {}
    });
} catch (IOException e) {
    e.printStackTrace();
}

//...
List<Surface> targets = new ArrayList<>();
targets.add(encoderInput);

//...
CaptureRequest.Builder builder = camera.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
builder.addTarget(encoderInput);

//...
camera.createCaptureSession(targets...);
session.setRepeatingRequest(builder.build()....);

10-08 06:16