Created
December 31, 2015 13:07
-
-
Save alexbatashev/7013f21c73f07d96393d to your computer and use it in GitHub Desktop.
Camera2 and MediaCodec
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
mSurfaceView.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight()); | |
mediaCodec = MediaCodec.createEncoderByType("video/avc"); | |
MediaFormat format = MediaFormat.createVideoFormat("video/avc", mVideoSize.getWidth(), mVideoSize.getHeight()); | |
int colorFormat = MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface; | |
int videoBitrate = 90000; | |
int videoFramePerSecond = 25; | |
int iframeInterval = 2; | |
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat); | |
format.setInteger(MediaFormat.KEY_BIT_RATE, videoBitrate); | |
format.setInteger(MediaFormat.KEY_FRAME_RATE, videoFramePerSecond); | |
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, iframeInterval); | |
mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); | |
List<Surface> surfaces = new ArrayList<>(); | |
mEncodeSurface = mediaCodec.createInputSurface(); | |
surfaces.add(mEncodeSurface); | |
final Surface mPreviewSurface = new Surface(mSurfaceView.getSurfaceTexture()); | |
surfaces.add(mPreviewSurface); | |
mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() { | |
@Override | |
public void onConfigured(CameraCaptureSession session) { | |
mSession = session; | |
try { | |
CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); | |
builder.addTarget(mPreviewSurface); | |
mSession.setRepeatingRequest(builder.build(), null, mBackgroundHandler); | |
} catch (CameraAccessException e) { | |
e.printStackTrace(); | |
} | |
} | |
@Override | |
public void onConfigureFailed(CameraCaptureSession session) { | |
// todo error | |
} | |
}, mBackgroundHandler); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); | |
builder.addTarget(mEncodeSurface); | |
mSession.setRepeatingRequest(builder.build(), null, mBackgroundHandler); | |
mediaCodec.setCallback(new MediaCodec.Callback() { | |
@Override | |
public void onInputBufferAvailable(MediaCodec codec, int index) { | |
} | |
@Override | |
public void onOutputBufferAvailable(MediaCodec codec, int index, MediaCodec.BufferInfo info) { | |
// pushing data | |
} | |
@Override | |
public void onError(MediaCodec codec, MediaCodec.CodecException e) { | |
} | |
@Override | |
public void onOutputFormatChanged(MediaCodec codec, MediaFormat format) { | |
} | |
}); | |
mediaCodec.start(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment