android_9527_ 2022-07-26 15:54 采纳率: 0%
浏览 42

为什么调用toByteArray()方法会造成三星手机卡顿

为什么调用toByteArray()方法会造成三星手机卡顿

业务场景:将手机录屏编码后得到的 byte[]序列化成 protobuf 类
问题:一秒编码 30 帧,随着时间推移,手机会越来越卡。
经过排查,发现是这行代码造成卡顿,
val toByteArray = screenMes.build().toByteArray()

完整的代码如下:

val byteBuffer: ByteBuffer = ByteBuffer.allocateDirect(1024 * 1024 * 3)
private lateinit var screenMes: Message.ScreencapMes.Builder
    /**
     * 编码回调
     * bytes 编码后的数据
     * flags 是否 I 帧
     */
    override fun onScreenInfo(bytes: ByteArray?, flags: Int) {
        isRecording = true
        if (bytes != null) {
            screenMes.data = ByteString.copyFrom(bytes)
            screenMes.sort = mFlowSort

            if (flags == MediaCodec.BUFFER_FLAG_KEY_FRAME) {
                screenMes.frameType = 0
            } else {
                screenMes.frameType = 1
            }

            val toByteArray = screenMes.build().toByteArray()


            byteBuffer.clear()
            byteBuffer.putInt(toByteArray.size + 4)
            byteBuffer.putInt(UdxType.Type_Send_Frame)
            byteBuffer.put(toByteArray)
            byteBuffer.flip()
            if (mConnState == 1) {
                if (mFlowSort > 999999999999999999) {
                    mFlowSort = 1
                }
                mFlowSort++
                SendUtils.getInstance().handlePacket(true, byteBuffer, screenMes.frameType)
            } else {
                mFlowSort = 1
            }

        }
    }

  • 写回答

1条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-07-26 17:18
    关注

    img


    画框的两块,是否可以替换成箭头部分?

    评论

报告相同问题?

问题事件

  • 创建了问题 7月26日

悬赏问题

  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错