RTMP直播推送庫EasyRTMP視頻硬編碼的流程解析

所謂硬編碼,個人理解就是硬件加速編碼,intel硬編碼是使用其集顯中的視頻編解碼模塊加速,同理nvidia硬編碼使用nvidia顯卡中的視頻編解碼模塊進行加速。在命令行中使用 ffmpeg -hwaccels 能夠查看ffmpeg支持的硬件加速方法。git

由於項目須要,在研發RTMP推流組件的EasyRTMP中不少用戶諮詢關於音視頻硬解碼的流程,便於組件的集成,今天你們介紹流程以下。github

關於RTMP推流組件

EasyRTMP是一套調用簡單、功能完善、運行高效穩定的RTMP推流功能組件,通過多年客戶實戰和線上運行打造,支持RTMP推送斷線重連、環形緩衝、智能丟幀、網絡事件回調,支持Windows、Linux、ARM、Android、iOS平臺,支持市面上絕大部分的RTMP流媒體服務器,可以完美應用於各類行業的直播需求,手機直播、桌面直播、攝像機直播、課堂直播等方面。結合EasyDSS流媒體服務器,爲開發者提供專業、穩定的直播推流、轉碼、分發服務,全面知足低超低延遲、超高畫質、超大併發訪問量的要求。服務器

EasyRTMPiOS工做流程.png

提出問題:

EasyRTMP-iOS介紹下視頻硬編碼的簡單流程。網絡

分析問題:

H.264 HWEncoder.m文件實現了視頻的硬編碼功能。session

解決問題:

iOS處理音頻的庫是VideoToolbox,視頻硬編碼的流程以下:併發

一、-initVideoToolBox中調用
VTCompressionSessionCreate建立編碼session,並調用VTSessionSetProperty設置參數:ide

15.png

再調用VTCompressionSessionPrepareToEncodeFrames開始編碼:函數

16.png

二、將獲取到攝像頭的視頻幀,傳入-encode:
調用VTCompressionSessionEncodeFrame傳入須要編碼的視頻幀:編碼

17.png

三、每一幀視頻編碼完成後會調用預先設置的編碼函數didCompressH264,處理關鍵幀,以及取得PPS和SPS,由H264Packet來處理:spa

18.png

四、調用VTCompressionSessionCompleteFrames完成編碼,而後銷燬session:VTCompressionSessionInvalidate,釋放session。

19.png

相關文章
相關標籤/搜索