首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Camera2中使用MediaCodec?

如何在Camera2中使用MediaCodec?
EN

Stack Overflow用户
提问于 2017-11-28 22:16:11
回答 1查看 1.2K关注 0票数 6

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

EN

回答 1

Stack Overflow用户

发布于 2018-08-31 03:28:45

(对于VP8):

代码语言:javascript
运行
复制
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()....);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47533726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档