如何在 Android 中录制屏幕内容,并以H.264数据流形式发送(屏幕广播)

本文介绍了在Android中如何录制屏幕内容并以H.264数据流形式发送,主要涉及权限申请、MediaCodec编码器创建、VirtualDisplay的使用以及录屏编码的关键步骤。适用于教育产品等需要屏幕广播的场景。
摘要由CSDN通过智能技术生成

如何在 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 MediaProjectionManager
        val 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) {
   
                //保存intent
                GlobalConfig.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</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值