LFLiveSession
LFLiveSession 是整個sdk的核心,提供對外部的主要接口。主要功能有:管理推流開關、管理音視頻錄制及渲染、管理錄制渲染后的音視頻編碼、管理編碼后的數據上傳、管理音視頻的基礎配置,回調推流狀態和異常上報等。
LFLiveAudioConfiguration
音配配置,配置相關音頻信息(音頻質量、碼率、采樣率、聲道數)
LFLiveVideoConfiguration
視頻配置,配置相關視頻的基本信息(視頻質量、碼率、幀數、分辨率)和應用配置如最大、最小幀率等。
LFVideoCapture
視頻管理類,管理視頻的輸入和輸出。同時處理業務需求,如:美顏、亮度、水印等效果,使用了一個第三方GPUImage處理渲染效果。
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的一個屬性,可以管理視頻類的輸入的輸入設備的輸出設備,並且通過GPUImage來進行一些圖片的濾鏡的操作,然后輸出,通過代理方法回調給LFLiveSession。
4、LFH264VideoEncoder,LFHardwareVideoEncoder,LFHardwareAudioEncoder是管理音視頻編碼的類。LFLiveSession接收到經過濾鏡處理后的回調后,通過音視頻編碼類對buffer進行編碼,並且在編碼結束以后通過代理方法回調給LFLiveSession。
5、LFStreamRTMPSocket是數據上傳管理類(目前只用rtmp上傳),在LFLiveSession接收到編碼結束的回調后,就可以用LFStreamRTMPSocket進行數據上傳,並提供網絡狀態回調和網絡異常回調。
6、LFStreamingBuffer相對就比較靈活了,其功能主要是提供了一套根據本地緩沖區在規定時間內的量來回調緩沖區buffer是增加還是減少。如果需要在這方面進行一定的優化可以在回調中實現切換幀率等方法。在LFLiveKit里面是沒有具體實現這種策略的后續處理方法,只是回調了增加還是減少的狀態。
缺點:每一個buffer數據上傳后,沒有回調上傳的結果。如果可以這樣的話,可以根據上傳的結果來判斷推流端的具體網絡狀況。自身邏輯可以添加切換線路或者降低碼率來實現直播質量的優化。
視頻配置
分辨率:視頻畫面的大小,分辨率越高畫面越清晰,分辨率控制着畫面的清晰度。
采樣幀數:每秒的畫面數,視頻是由很多幀畫面連貫起來的。幀數越高越流暢。人眼識別16幀(別人統計的數字我也不清楚)以上就很難感覺出來畫面的卡頓。幀率控制畫面的流暢度。
碼率:每秒顯示的圖片壓縮后的數據量。碼率控制着畫面的清晰度。
注:
1、體積 = 碼率 * 時間
2、壓縮前每秒的數據量= 幀率 * 分辨率 = 碼率 * 壓縮比
1.分辨率是被AVCaptureSession控制的,它有長寬固定比例的值提供選擇,不能自定義比例。例:AVCaptureSessionPreset640x480
2.幀率和碼率雖然能自定義設置,但是不建議自定義設置,可以通過直接設置LFLiveVideoQuality來配套的配置這些屬性的值。
3.LFLiveVideoConfiguration還包含了最大最小幀率、最大最小碼率和最大關鍵幀的設置。
聲道數:單聲道的聲道數為1個聲道,雙聲道的聲道數為2個聲道,立體聲道的聲道數默認是2個聲道,立體聲道(4聲道)的聲道數為4個聲道。普通食品是兩個聲道,左右聲道。也就是左耳麥和右耳麥,多數視頻都是左右混合到一起了,有的配音視頻區分左右聲道,一邊是原聲,一邊是配音。還有第三種聲道形式,就是2.1省道,那個.1只的是低頻段環繞立體聲。
采樣率:音頻采樣率是指錄音設備在一秒鍾內對聲音信號的采樣次數,采樣頻率越高聲音的還原就越真是自然。在當今的主流的采集卡上,采樣頻率一般分為22.05KHz、44.1KHz、48KHz三個等級。22.05KHz只能達到FM廣播的聲音品質,44.1KHz則是理論上的CD音質界限,48KHz則更加准確一些。LFLiveKit中默認是44.1KHz。
音頻碼率(比特率)比特率是指將數字聲音由模擬格式轉化成數字格式的采樣率。比特率表示單位時間(1秒)內傳送的比特數bps的速度。通常我們使用kbps(通俗的講就是每秒鍾1000比特)作為單位。128kbps = 磁帶(手機立體聲MP3播放器最佳設定值,低檔MP3播放器最佳設定值)。LFLive默認是96kbps。
緩存區的長度:這個也是SDK自己定義的,用於聲音在視頻編碼的時候判斷,內存過大的時候暫緩編碼的作用,保證內存的穩定性的作用。緩存區長度和聲道數相關,這個在SDK里面是定位1024*2* numberOfChannels