使用camera2和mediacodec API录制和保存视频的步骤如下: 首先,需要获取相机的权限。在AndroidManifest.xml文件中添加相机权限的声明: 代码语言:txt 复制 创建一个CameraManager对象来管理相机设备。通过CameraManager的getCameraIdList()方法获取可用的相机设备列表。
配置MediaCodec进行视频编码:创建一个MediaCodec编码器实例,配置其编码格式为MP4。你需要指定输入和输出的媒体格式,以及编码器的配置参数。然后,使用MediaCodec的dequeueInputBuffer和dequeueOutputBuffer方法来处理摄像头捕获的原始视频数据。 整合Camera2和MediaCodec:将Camera2 API捕获的原始视频数据传递给MediaCodec编码器进行编码。
本文的主要内容是通过 Android 原生的硬编解码框架 MediaCodec 和复用器 MediaMuxer 实现 mp4 视频文件的录制,视频数据源由 Camera2 来提供,这里重点是编码、复用的这个过程而不是 mp4 的录制,如果仅仅是视频录制,可以选择更方便的 MediaRecorder,按照惯例还是以案列的形式学习 MediaCodec,其更多用法将在后续的文章中...
这里在强调一下,在我的实际使用中,测试了多款不同的手机,摄像头产生的 YUV420 数据出现过两种情况,而且不同手机的 MediaCodec 支持的 H.264 视频硬编码的颜色格式也大不相同。详见后文“附录”部分。这对于如何处理摄像头产生的数据有着非常大的影响,详见后文说明。 以下内容是对一些相关官方内容的引用,感兴趣的...
摄像头通话功能,是TRTCSDK对系统摄像头进行了封装,采集摄像头数据,编码传输通话。
一. Camera2Helper publicclassCamera2Helper{privateCamera2Listener camera2Listener;privateContext context;privateTextureView mTextureView;privateHandlerThread mBackgroundThread;privateHandler mBackgroundHandler;privateSize mPreviewSize;privatePoint previewViewSize;privateImageReader mImageReader;privateCameraDevice mCa...
MediaCodec:常用来录制视频。 SurfaceHolder:常用来显示预览画面。 SurfaceTexture:常用来显示预览画面。 由于我们使用的是 SurfaceTexture,所以显然这里我们就要传递 SurfaceTexture.class 获取支持的尺寸列表。如果我们把所有的预览尺寸都打印出来看时,会发现一个比较特别的情况,就是预览尺寸的宽是长边,高是短边,例如 192...
另外下面的实现不支持在Android6.0以下的手机上使用,因为使用到了API23的方法:MediaCodec.createPersistentInputSurface(),主要是为了能支持横屏录制的视频方向为横屏。 先看看演示效果: 二、实现方案和细节 使用的Camera2 和 MediaRecorder。 如果使用Camera1的话,可能会更简单一些,Camera2用起来确实相对麻烦一点。不过Ca...
接下来,步入正题。官方demo,总会在stopRecording()这里崩溃。甚至底层的camera服务崩溃,到了“除了重启别无他法”的境地。稍微理了一下,这个问题还是对数据流向不清楚的缘故,也许是最近被camera2+mediaCodec虐的体无完肤才能看到这一点吧。当然不排除官方大牛故意在这里埋个flag,好让大家都对camera2映像深刻吧!
. Each Surface has to be pre-configured with anappropriate size and format(if applicable) to match the sizes and formats available from the camera device. A target Surface can be obtained from a variety of classes, includingSurfaceView,SurfaceTextureviaSurface(SurfaceTexture),MediaCodec,MediaRecorder...