安卓录屏使用VirtualDisplay虚拟屏幕;MediaRecorder,媒体录影机;

1.跟截屏一样,判断权限,然后在onActivityResult里面给mediaProjection赋能;
2.初始化录像机:
//初始化Recorder录像机

fun initRecorderStart() {
//新建Recorder
val displayMetrics = DisplayMetrics()
val width = displayMetrics.widthPixels
val height = displayMetrics.heightPixels
val density = displayMetrics.densityDpi
mediaRecorder = MediaRecorder()
//设置录像机的一系列参数
//设置音频来源
mediaRecorder!!.setAudioSource(MediaRecorder.AudioSource.MIC)
//设置视频来源
mediaRecorder!!.setVideoSource(MediaRecorder.VideoSource.SURFACE)
//设置视频格式为mp4
mediaRecorder!!.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
//设置视频存储地址,返回的文件夹下的命名为当前系统事件的文件
videoPath = getSaveDirectory() + System.currentTimeMillis() + “.mp4”
Log.e(“SSSS+++”, “videoPath” + videoPath)
//此电脑\Redmi K30 5G\内部存储设备\录屏文件
//保存在该位置
mediaRecorder!!.setOutputFile(videoPath)
//设置视频大小,清晰度
mediaRecorder!!.setVideoSize(500, 800)
//设置视频编码为H.264
mediaRecorder!!.setVideoEncoder(MediaRecorder.VideoEncoder.H264)
//设置音频编码
mediaRecorder!!.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
//设置视频码率
mediaRecorder!!.setVideoEncodingBitRate(2 * 1920 * 1080)
mediaRecorder!!.setVideoFrameRate(18)
//初始化完成,进入准备阶段,准备被使用
//截获异常,处理
try {
mediaRecorder!!.prepare()
} catch (e: IOException) {
e.printStackTrace()
//异常提示
Toast.makeText(
this,
“Recorder录像机prepare失败,无法使用,请重新初始化!”,
Toast.LENGTH_SHORT
).show()
}
}

3.开启虚拟屏幕:

fun createVirtualDisplayS() {
//虚拟屏幕通过MediaProjection获取,传入一系列传过来的参数
//可能创建时会出错,捕获异常
try {
mVirtualDisplay = mediaProjection!!.createVirtualDisplay(
“VirtualScreen”, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_DPI,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mediaRecorder!!.surface, null, null
)
} catch (e: java.lang.Exception) {
e.printStackTrace()
Toast.makeText(this, “virtualDisplay创建录屏异常,请退出重试!”, Toast.LENGTH_SHORT).show()
}
}

3.将视频文件存起来:
//获取存储文件夹的位置
fun getSaveDirectory(): String? {
return if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
//如果确认为视频类型,设置根目录,绝对路径下的自定义文件夹中
val rootDir = Environment.getExternalStorageDirectory()
.absolutePath + “/” + “录屏文件” + “/”
//创建该文件夹
val file = File(rootDir)
if (!file.exists()) {
//如果该文件夹不存在
if (!file.mkdirs()) {
//如果没有创建成功
return null
}
}
//创建成功了,返回该目录
rootDir
} else {
//不是音视频文件,不保存,无路径
null
}
}
(https://juejin.cn/post/6982854696553676808)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迪霸LZTXDY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值