LFLiveKit的背景什么的就不一一介紹了送挑,這里主要介紹它的功能實現(xiàn)的基礎架構如下表:
LFLiveSession 是整個sdk核心暖眼,提供對外部的主要接口。其主要功能有:管理推流開關诫肠,管理音視頻錄制及渲染,管理錄制渲染后的音視頻編嗎挤安,管理編嗎后的數(shù)據(jù)上傳丧鸯,管理音視頻的基礎配置,回調推流狀態(tài)和異常上報等丛肢。
LFLiveAudioConfiguration 音頻配置,配置相關音頻信息(音頻質量穆刻,碼率杠步,采樣率,聲道數(shù))
LFLiveVideoConfiguration 視頻配置幽歼,配置相關音頻基本信息(視頻質量,碼率猪勇,幀數(shù)颠蕴,分辨率)和應用配置如最大最小幀率等。
LFVideoCapture 視頻管理類犀被,管理視頻的輸入和輸出。同時處理業(yè)務需求如:美顏掀泳,亮度,水印等效果员舵。用了一個第三方:GPUIImage處理渲染效果
LFAudioCapture 音頻管理,管理音頻的輸入開關庄拇。這一塊兒沒有多大的定制韭邓,應用的原生的API即可。LFH264VideoEncoder,LFHardwareVideoEncoder 視頻編碼類女淑,分別對應8.0以前和8.0以后的兩種設備的視頻編碼類。都遵守LFVideoEncoding協(xié)議屈张,并設置LFStreamSocketDelegate協(xié)議給session管理
LFHardwareAudioEncoder 音頻編碼類苇本,遵守LFVideoEncoding協(xié)議菜拓,并設置LFStreamSocketDelegate協(xié)議給session管理
LFFrame 數(shù)據(jù)信息的基類,作為上傳到服務器數(shù)據(jù)的基本模型
LFVideoFrame 視頻信息纳鼎,作為上傳到服務器視頻數(shù)據(jù)的模型
LFAudioFrame 音頻信息,作為上傳到服務器音頻數(shù)據(jù)的模型
LFLiveStreamInfo 推流信息:推流地址(目前主要應用rtmp推流)劝贸;流狀態(tài);音視頻配置信息映九;異常信息
LFStreamRTMPSocket 數(shù)據(jù)上傳管理類:開關數(shù)據(jù)上傳瞎颗,回調連接狀態(tài)和異常。遵循LFStreamSocket協(xié)議哼拔,并設置LFStreamSocketDelegate給session管理
LFLiveDebug 調試信息:這個是開發(fā)時候的內部表示,主要用于記錄調試作用譬正。
LFStreamingBuffer 本地采樣:通過本地采樣監(jiān)控緩沖區(qū),可實現(xiàn)相關切換幀率碼率等策略
其主要功能流程如下:
1.其中:LFLiveSession是整個sdk對外主要提供的接口粉怕,除了對外提供業(yè)務需求接口您单,而且管理了整個推流過程的不同功能的實現(xiàn),并添加了一系列的回調接口虐秦。
2.通過LFLiveAudioConfiguration,LFLiveVideoConfiguration這兩個配置信息作為一個參數(shù)蜈彼,給各個類傳值基本碼率等基本信息。
3.LFVideoCapture幸逆,LFAudioCapture作為LFLiveSession的一個屬性暮现,可以管理視頻類的輸入的輸入設備和輸出設備,并且通過GPUIImage來進行一些圖片的濾鏡的操作栖袋,然后輸出,通過代理方法回調給LFLiveSession昔案。
4.LFH264VideoEncoder,LFHardwareVideoEncoder电媳,LFHardwareAudioEncoder是管理音視頻編嗎的類。LFLiveSession接受到經過濾鏡處理后的回調后匾乓,通過音視頻編碼類對buffer進行編碼,并且在編碼結束以后通過代理方法回調給LFLiveSession娱局。
5.LFStreamRTMPSocket是數(shù)據(jù)上傳管理類(目前只用rtmp上傳),在LFLiveSession接收到編嗎結束的回調后珍促,就可以用LFStreamRTMPSocket進行數(shù)據(jù)上傳。并提供網絡狀態(tài)回調和網絡異持硇穑回調仁卷。
6.LFStreamingBuffer相對就比較靈活了锦积,其功能呢主要是提供了一套根據(jù)本地緩沖區(qū)在規(guī)定時間內的量來回調緩沖區(qū)buffer是在增加還是在減少。如果需要在這方面進行一定的優(yōu)化可以在回調中實現(xiàn)切換幀率等方法丰介。在LFLiveKit里面是沒有具體實現(xiàn)這種策略的后續(xù)處理方法鉴分,只是回調了增加還是減少的狀態(tài)。
缺點:每一個buffer數(shù)據(jù)上傳后志珍,沒有回調上傳的結果瓤的。如果可以這樣的話,可以根據(jù)上傳的結果來判斷推流端的具體網絡狀況沧烈。自身邏輯可以添加切換線路或者降低碼率來實現(xiàn)直播質量的優(yōu)化喂击。