I am new to android. I have been looking for ways to record a video using Camera2 api and MediaCodec but no luck. I saw a sample by Google(https://github.com/googlesamples/android-Camera2Video) using MediaRecorder. My question is how to replace this MediaRecorder with MediaCodec.
What about (for 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()....);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With