如何在 Android 中录制屏幕内容,并以H.264数据流形式发送(屏幕广播)
如何在 Android 中录制屏幕内容,并以H.264数据流形式发送(屏幕广播)
这是一个不太常见的需求,因为博主本人所在公司是做教育相关产品的,故而有此需求,通过录制学生端pad屏幕,进行屏幕广播,本文主要介绍其中需要注意的一些关键点,详细代码可以在文末的 Github 仓库中查看。
1. 权限申请
不同于普通的动态权限申请,屏幕录制的权限在每次使用 App 时都需要重新申请一次。
object Utils {const val REQUEST_MEDIA_PROJECTION = 1/*** 申请录屏权限*/fun createPermission(activity: Activity) {val mediaProjectionManager =activity.application.getSystemService(Context.MEDIA_PROJECTION_SERVICE) as MediaProjectionManagerval intent = mediaProjectionManager.createScreenCaptureIntent()activity.startActivityForResult(intent, REQUEST_MEDIA_PROJECTION)}
}
在 onActivityResult 回调中保存 resultCode 与 data,这两个参数将会在后续用于实例化 MediaProjection 对象
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {super.onActivityResult(requestCode, resultCode, data)//授权成功,保存intent,在后续需要使用该intent申请相关屏幕录制的对象if (requestCode == Utils.REQUEST_MEDIA_PROJECTION) {if (resultCode == Activity.RESULT_OK) {//保存intentGlobalConfig.intent = data!!}}}
2. 创建 MediaCodec 编码器
mMediaCodecEncoder = MediaCodec.createEncoderByType("video/avc") // H.264编码格式
//配置编码器
val mediaFormat = Utils.getMediaFormat()
mMediaCodecEncoder.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
//该surface用于下一步中创建VirtualDisplay
surface = mMediaCodecEncoder.createInputSurface()
mMediaCodecEncoder.start()
3. 创建虚拟显示器 VirtualDisplay
GlobalConfig.intent?.let
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
