當你(nǐ)和(hé)朋友(yǒu)利用直播軟件進行(xíng)語音(yīn)或視(shì)頻聊天時(shí),這時(shí)突然畫(huà)面卡住不動了,而且聲音(yīn)變得(de)斷斷續續,是不是會(huì)感到特别的尴尬?為(wèi)了避免這些(xiē)情況,那(nà)麽在直播系統源碼開(kāi)發過程中,針對于延遲這個(gè)令人(rén)頭疼的問題,能在哪些(xiē)方面進行(xíng)優化呢?下面就來(lái)給大(dà)家(jiā)簡單介紹下。
一、編碼環節
首先,在編碼過程中,确保在編碼譯碼器(qì)(Codec)開(kāi)啓了最低(dī)延遲的設置。編碼譯碼器(qì)一般都會(huì)有(yǒu)低(dī)延遲優化的開(kāi)關,對于H.264來(lái)說,其優化效果尤其明(míng)顯。另外,編碼譯碼器(qì)一般都會(huì)有(yǒu)碼控造成的延遲,如果把它當成編碼器(qì)和(hé)解碼器(qì)比特流之間(jiān)的緩存,在不影(yǐng)響視(shì)頻質量的情況下,并将其設置得(de)盡可(kě)能小(xiǎo)的話(huà),也能夠降低(dī)延遲。還(hái)有(yǒu),最好不要使用視(shì)頻MJPEG的視(shì)頻壓縮格式,至少(shǎo)使用不帶B幀的MPEG4視(shì)頻壓縮格式,最好使用像H.264baseline profile的編碼。這樣的話(huà)可(kě)以有(yǒu)效的降低(dī)延遲,因為(wèi)它能夠以更低(dī)的碼率編碼全幀率視(shì)頻。
二、傳輸協議
簡單來(lái)說,就是在服務端節點和(hé)節點之間(jiān)盡量使用RTMP而非HLS協議進行(xíng)傳輸,這樣可(kě)以降低(dī)整體(tǐ)的傳輸延遲。如果終端用戶使用RTMP來(lái)播放,盡量在靠近推流端的收流節點進行(xíng)轉碼,這樣傳輸的視(shì)頻流要比原始視(shì)頻流更小(xiǎo)。此外,如果有(yǒu)必要,可(kě)以使用定制(zhì)的UDP協議來(lái)替換TCP協議,省去弱網環節下的丢包重傳也可(kě)以降低(dī)延遲。
三、傳輸網絡
在直播系統源碼開(kāi)發過程中,于服務器(qì)節點中緩存當前GOP,并配合播放端優化視(shì)頻首開(kāi)時(shí)間(jiān)。還(hái)可(kě)以讓服務端實時(shí)記錄每個(gè)視(shì)頻流流向每個(gè)環節時(shí)的秒(miǎo)級幀率和(hé)碼率,用于實時(shí)監控碼率和(hé)幀率的波動,然後針對此情況進行(xíng)技(jì)術(shù)調節即可(kě)。
四、推流、播放優化
播放端緩存控制(zhì)對于視(shì)頻的首開(kāi)延遲也有(yǒu)較大(dà)影(yǐng)響,如果僅優化首開(kāi)延遲,可(kě)以在零緩存情況下在數(shù)據到達的時(shí)候立即解碼。但(dàn)如果在弱網環境下為(wèi)了消除網絡抖動造成的影(yǐng)響,那(nà)麽設置一定的緩存也有(yǒu)必要,因此需要在直播的穩定性和(hé)首開(kāi)延遲優化上(shàng)找到平衡,從而調整優化緩沖區(qū)大(dà)小(xiǎo)值。除了動态調整buffer大(dà)小(xiǎo)的策略之外,也可(kě)以利用實時(shí)監測的網絡信息來(lái)動态調整播放過程中的碼率,在網絡帶寬不足的情況下降低(dī)碼率進行(xíng)播放,減少(shǎo)延遲。
以上(shàng)就是在直播系統源碼開(kāi)發中,針對延遲方面,在技(jì)術(shù)層面所能做(zuò)的優化。如果您對直播系統開(kāi)發感興趣的話(huà),歡迎咨詢官方客服。