如何在 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 回调中保存 resultCodedata,这两个参数将会在后续用于实例化 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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部