LFLiveKit的背景什么的就不一一介紹了,這里主要介紹它的功能實現的基礎架構如下表:
|
LFLiveKit |
LFLiveSession |
是整個sdk核心,提供對外部的主要接口。其主要功能有:管理推流開關,管理音視頻錄制及渲染,管理錄制渲染后的音視頻編嗎,管理編嗎后的數據上傳,管理音視頻的基礎配置,回調推流狀態和異常上報等。 |
LFLiveAudioConfiguration |
音頻配置,配置相關音頻信息(音頻質量,碼率,采樣率,聲道數) |
LFLiveVideoConfiguration |
視頻配置,配置相關音頻基本信息(視頻質量,碼率,幀數,分辨率)和應用配置如最大最小幀率等。 |
LFVideoCapture |
視頻管理類,管理視頻的輸入和輸出。同時處理業務需求如:美顏,亮度,水印等效果。用了一個第三方:GPUIImage處理渲染效果 |
LFAudioCapture |
音頻管理,管理音頻的輸入開關。這一塊兒沒有多大的定制,應用的原生的API即可。 |
LFH264VideoEncoder,LFHardwareVideoEncoder |
視頻編碼類,分別對應8.0以前和8.0以后的兩種設備的視頻編碼類。都遵守LFVideoEncoding協議,並設置LFStreamSocketDelegate協議給session管理 |
LFHardwareAudioEncoder |
音頻編碼類,遵守LFVideoEncoding協議,並設置LFStreamSocketDelegate協議給session管理 |
LFFrame |
數據信息的基類,作為上傳到服務器數據的基本模型 |
LFVideoFrame |
視頻信息,作為上傳到服務器視頻數據的模型 |
LFAudioFrame |
音頻信息,作為上傳到服務器音頻數據的模型 |
LFLiveStreamInfo |
推流信息:推流地址(目前主要應用rtmp推流);流狀態;音視頻配置信息;異常信息 |
LFStreamRTMPSocket |
數據上傳管理類:開關數據上傳,回調連接狀態和異常。遵循LFStreamSocket協議,並設置LFStreamSocketDelegate給session管理 |
LFLiveDebug |
調試信息:這個是開發時候的內部表示,主要用於記錄調試作用。 |
LFStreamingBuffer |
本地采樣:通過本地采樣監控緩沖區,可實現相關切換幀率碼率等策略 |
其主要功能流程如下:
1.其中:LFLiveSession是整個sdk對外主要提供的接口,除了對外提供業務需求接口,而且管理了整個推流過程的不同功能的實現,並添加了一系列的回調接口。
2.通過LFLiveAudioConfiguration,LFLiveVideoConfiguration這兩個配置信息作為一個參數,給各個類傳值基本碼率等基本信息。
3.LFVideoCapture,LFAudioCapture作為LFLiveSession的一個屬性,可以管理視頻類的輸入的輸入設備和輸出設備,並且通過GPUIImage來進行一些圖片的濾鏡的操作,然后輸出,通過代理方法回調給LFLiveSession。
4.LFH264VideoEncoder,LFHardwareVideoEncoder,LFHardwareAudioEncoder是管理音視頻編嗎的類。LFLiveSession接受到經過濾鏡處理后的回調后,通過音視頻編碼類對buffer進行編碼,並且在編碼結束以后通過代理方法回調給LFLiveSession。
5.LFStreamRTMPSocket是數據上傳管理類(目前只用rtmp上傳),在LFLiveSession接收到編嗎結束的回調后,就可以用LFStreamRTMPSocket進行數據上傳。並提供網絡狀態回調和網絡異常回調。
6.LFStreamingBuffer相對就比較靈活了,其功能呢主要是提供了一套根據本地緩沖區在規定時間內的量來回調緩沖區buffer是在增加還是在減少。如果需要在這方面進行一定的優化可以在回調中實現切換幀率等方法。在LFLiveKit里面是沒有具體實現這種策略的后續處理方法,只是回調了增加還是減少的狀態。
缺點:每一個buffer數據上傳后,沒有回調上傳的結果。如果可以這樣的話,可以根據上傳的結果來判斷推流端的具體網絡狀況。自身邏輯可以添加切換線路或者降低碼率來實現直播質量的優化。
-----------------------------分割線-------------------------------------
新手上路,共同進步群號:240970537