前言
通过 文2 我们知道了 MediaRecorder 各个接口 Framework 中的实现。
通过 文3 我们 知道了 MediaRecorder 底层音频的采集、编码、写入文件等详细流程。
本文主要介绍 MediaRecorder 视频的采集、编码等相关流程。
视频采集
在 文1 我们知道了如何使用 MediaRecorder 录制音频,那么如何同时录制声音和视频呢,可以参见 Demo Camera2Video,这里不再贴代码。
通过此示例,我们知道录制视频需要如下设置
val surface = MediaCodec.createPersistentInputSurface()
...
setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
setVideoSource(MediaRecorder.VideoSource.SURFACE)
setVideoEncoder(videoEncoder)
setInputSurface(surface)
也就是视频采集源,就是这个 surface = MediaCodec.createPersistentInputSurface()。
也就是 mInputSurface,也是 PreviewFragment 中 encoderSurface,最终传递到 eglEncoderSurface
eglEncoderSurface = EGL14.eglCreateWindowSurface(eglDisplay, eglConfig, encoderSurface, surfaceAttribs, 0)
在 HardwarePipeline中,可以看到添加了一路预览流:
// 创建一个 GL_TEXTURE_EXTERNAL_OES 纹理
cameraTexId = createTexture()
cameraTexture = SurfaceTexture(cameraTexId)
...
session.device.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).apply {
// 添加预览 surface target

最低0.47元/天 解锁文章
1914

被折叠的 条评论
为什么被折叠?



