zoukankan      html  css  js  c++  java
  • 安防摄像头视频流媒体播放器EasyPlayerRTSP硬解码ByteBuffer渲染如何转换?

    关于视频流媒体播放器EasyPlayer-RTSP的渲染,其实有很多东西我们都需要进行比较深入的研究,我们目前使用的渲染就是通过硬解码之后,分解YUV渲染。本文我们来聊一下EasyPlayer-RTSP渲染问题中ByteBuffer转换问题。

    我们先来解释一下什么叫堆外内存:

    堆外内存是相对于堆内内存的一个概念。堆内内存是由JVM所管控的Java进程内存,我们平时在Java中创建的对象都处于堆内内存中,并且它们遵循JVM的内存管理机制,JVM会采用垃圾回收机制统一管理它们的内存。那么堆外内存就是存在于JVM管控之外的一块内存区域,因此它是不受JVM的管控。

    ByteBuffer常用方法:

    ByteBuffer.allocateDirect(int capacity)是不使用JVM堆栈而是通过操作系统来创建内存块用作缓冲区,它与当前操作系统能够更好的耦合,因此能进一步提高I/O操作速度。但是分配直接缓冲区的系统开销很大,因此只有在缓冲区较大并长期存在,或者需要经常重用时,才使用这种缓冲区。

    put(byte[] src, int offset, int length)
    

    从src数组中的offset到offset+length区域读取数据并使用相对写入此byteBuffer

    clear()
    

    设置position = 0;limit = capacity;mark = -1; 即初始化。

    最终代码

    获取的ByteBuffer需要先转成byte[],经过JNIUtil.yuvConvert后,再转成ByteBuffer渲染。

  • 相关阅读:
    mysql 快速生成百万条测试数据
    DEV SIT UAT
    云计算的三层SPI模型
    go的下载
    redis主从 哨兵
    Mybatis 插入操作时获取主键 (Oracle 触发器与SEQ)
    oracle创建表空间
    mycat源码分析
    js判断是否是数字通用写法
    spring aop获取目标对象的方法对象(包括方法上的注解)
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/13156282.html
Copyright © 2011-2022 走看看