主要代码如下
try {
mMediaCodec = MediaCodec.createEncoderByType("video/avc");
} catch (IOException e) {
e.printStackTrace();
return;
}
MediaFormat format = MediaFormat.createVideoFormat("video/avc", mVideoSize.getWidth(), mVideoSize.getHeight());
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
format.setInteger(MediaFormat.KEY_BIT_RATE, 1250000);
format.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
format.setInteger(MediaFormat.KEY_ROTATION, 90);
format.setInteger(MediaFormat.KEY_REPEAT_PREVIOUS_FRAME_AFTER, 1000 / 30);
mMediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mEncoderSurface = mMediaCodec.createInputSurface();
and Camera2 Configuration is
mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
mPreviewBuilder.addTarget(mPreviewSurface);
if (isEncode) {
mPreviewBuilder.addTarget(mEncoderSurface);
}
setUpCaptureRequestBuilder(mPreviewBuilder);
mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, mBackgroundHandler);
get encode data from MediaCodec
MediaCodec.BufferInfo mBufferInfo = new MediaCodec.BufferInfo();
while (true) {
int outputBufferIndex = venc.dequeueOutputBuffer(mBufferInfo, 0);
if (outputBufferIndex >= 0) {
// outputBuffer is ready to be processed or rendered.
ByteBuffer buffer = venc.getOutputBuffer(outputBufferIndex);
onEncodedFrame(buffer, mBufferInfo);
getOutputBuffer
获取的数据使用 RTMP 推流到服务器的时候是旋转 90 度的,应该怎么修改?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.