背景分析
RTMP協議是應用層協議,是要靠底層可靠的傳輸層協議(通常是TCP)來保證信息傳輸的可靠性的。在基於傳輸層協議的鏈接建立完成后,一個RTMP協議的流媒體推流需要經過以下幾個步驟:握手,建立連接,建立流,推流。RTMP連接都是以握手作為開始的。建立連接階段用於建立客戶端與服務器之間的“網絡連接”;建立流階段用於建立客戶端與服務器之間的“網絡流”;推流階段用於傳輸視音頻數據。
EasyPlayer-RTMP播放器是一套RTMP專用的播放器,包括有:Windows、Android、iOS三個平台,區別於市面上大部分的通用播放器,EasyPlayer-RTMP系列始於成熟的商業項目,得到了各行各業(尤其是安防行業)的廣泛應用,EasyPlayer-RTMP更加精煉、更加專注,具備非常低的延時,非常高RTMP協議兼容性,編碼數據解析等方面,都有非常大的優勢,尤其是在有特殊參數/私有自定義字段的情況下,非常容易進行定制和兼容。
EasyPlayer-RTMP方案架構
EasyPlayer-RTMP-iOS-工作流程
EasyPlayer-RTMP-Android-工作流程
EasyPlayer-RTMP-iOS如何使用YUV渲染畫面?
分析問題:
解碼后獲取的視頻幀,需要分解成Y、U、V的值,再送到OpenGL去渲染。
解決問題:
解碼后獲取的視頻幀的數據,添加到KxVideoFrameYUV,並通過
- (instancetype) handleVideoFrame:(AVFrame *)videoFrame
videoCodecCtx:(AVCodecContext *)videoCodecCtx;方法,分解出Y、U、V的值:
最后通過KxMovieGLView渲染:
[kxGlView render:frame]