安防攝像頭視頻流媒體播放器EasyPlayer-RTSP硬解碼ByteBuffer渲染如何轉換?

關於視頻流媒體播放器EasyPlayer-RTSP的渲染,其實有很多東西我們都需要進行比較深入的研究,我們目前使用的渲染就是通過硬解碼之後,分解YUV渲染。本文我們來聊一下EasyPlayer-RTSP渲染問題中ByteBuffer轉換問題。

Player.png

我們先來解釋一下什麼叫堆外內存:

堆外內存是相對於堆內內存的一個概念。堆內內存是由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渲染。

574.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章