Android 音视频入门 (四)- 记录一次MediaCodec

本文详细介绍了如何使用Android的MediaCodec进行视频录制,包括摄像头预览设置、编码器声明、数据记录到文件的过程。通过实例代码展示了如何处理色彩格式转换、编码与混合器操作,最后生成MP4文件。
摘要由CSDN通过智能技术生成

private fun openCameraPreview(surfaceTexture: SurfaceTexture, width: Int, height: Int) {
//初始化预览尺寸,这些属性必须等到Texture可用后再回调,否则会出问题。
mPreviewSize = Size(1080, 1920) //初始化编码器,强制声明成1080*1920,也可以根据这的长宽来定,1080P是一个比较通用的尺寸,但是放到全面屏中的全屏TextureView可能会导致画面拉伸等等问题,需要另外去解决。

mTextureView.setAspectRation(mPreviewSize.width, mPreviewSize.height);
mCameraDevice = Camera.open(0)
mCameraDevice.setDisplayOrientation(90)
/** * 获得捕获的视频信息。 /
mCameraDevice.parameters = mCameraDevice.parameters.apply {
this!!.setPreviewSize(mPreviewSize.height, mPreviewSize.width)
this.setPictureSize(mPreviewSize.height, mPreviewSize.width) 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】
this.previewFormat = CAMERA_COLOR_FORMAT
}
/
*

  • Camera作为生产者,生产的图像数据,交给SurfaceTexture处理。
  • 或者是进一步渲染
  • 或者是显示,这里设置的PreviewTexture自然是显示。
  • 这里的surfaceTexture实际上是当我们‘预览’TextureView可用的时候,被回调的这个回调函数中提供了一个钩子:surfaceTexture
  • 这个surfaceTexure将会作为显示的载体,直接被显示出来。
    */
    mCameraDevice.setPreviewTexture(surfaceTexture)
    mCameraDevice.setPreviewCallback { data, camera ->
    //注意:照片的宽高是反着的,曰,而不是日
    if (::mHandler.isInitialized) {
    mHandler.post {
    //把横版视频分辨率:1920 * 1080 转换成竖版: 1080 * 1920
    val verticalData = ImageFormatUtils.rotateYUV420Degree90(data, mPreviewSize.height,mPreviewSize.width)
    onFrameAvailable(verticalData)
    }
    }
    }
    mCa
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值