我是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()....);