Android视频录制--屏幕录制

上一篇介绍了MediaProjection,这个类可以用来实现安卓屏幕数据的采集,也就是手机一帧帧的截图,并输出成byte流的格式。
有兴趣的同学可以看这篇:
Android视频录制--MediaProjection

但其实只用MediaProjection,并无法生成一个视频,因为我们得到的只是流,还需要把流编码成视频格式。MediaProjection官方的demo里,也仅仅是把输出内容放到了surfaceview里面,在app内部展示。

这次我们就讲一下,如何把MediaProjection输出的流转化成为视频。
其实这个过程,我在另外一篇博客里面也讲过:
android视频直播-直播流程概述

简单说一下,一个视频的生成,最少要有以下两步:
1. 视频的采集,比如摄像头,比如我们讲的MediaProjection,这一步最终的输出,通常是一个流
2. 视频的编码压缩,这一步是对第一步中获取到的流做处理,编码可能采用硬编码,比如h264,也可能采用软编码,自己写编码逻辑,最终生成的是一个解码器(也就是我们通常说的播放器)可以解码(播放)的视频文件(比如mp4)

所以MediaProjection其实帮我们实现了第一步,也就是视频的采集,我们还需要自己来实现视频的编码。
所幸Google给我们提供了另外一个类MediaCodec来实现视频的硬编码,而不需要我们自己写太多的逻辑。
废话不多说,直接上代码,首先,我们需要在开始编码之前,先做一下准备,定义我们要编码的格式等信息:

//MediaFormat这个类是用来定义视频格式相关信息的
//video/avc,这里的avc是高级视频编码Advanced Video Coding
//mWidth和mHeight是视频的尺寸,这个尺寸不能超过视频采集时采集到的尺寸,否则会直接crash
MediaFormat format = MediaFormat.createVideoFormat("video/avc", mWidth, mHeight);

//COLOR_FormatSurface这里表明数据将是一个graphicbuffer元数据
format.setInteger(MediaFormat.KEY_COLOR_FORMAT,  MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);  

//设置码率,通常码率越高,视频越清晰,但是对应的视频也越大,这个值我默认设置成了2000000,也就是通常所说的2M,这已经不低了,如果你不想录制这么清晰的,你可以设置成500000,也就是500k         
format.setInteger(MediaFormat.KEY_BIT_RATE, mB
  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值