轉載請註明出處:https://blog.csdn.net/impingo
項目地址:https://github.com/im-pingo/pingos
上篇文章《直播延時講解》介紹了直播過程中延時出現的位置,如果想要降低延時需要對上文中提到的三處位置同時優化。
推流端優化
- h264編碼一定不要開啓B幀, 解碼時B 幀依賴於前後的幀,會增加延遲。
- h264 編碼使用 H.264 baseline profile,減少編碼時消耗的時間。
- 音頻儘量使用AAC-LC Codec,這樣會減少編碼時消耗的時間。
- 適當調整關鍵幀間隔(GOP大小),因爲前文說過服務器是以GOP個整數倍進行緩存的,如果GOP過大服務器端的緩存也會變大,建議設置爲2s(同等清晰度夏,GOP越小視頻碼率越大,如果你對延時比較敏感,可以考慮設置爲1s)。
OBS設置示例
服務器端優化
對於服務器端來說,可優化的點並不多,無非是對緩存大小進行優化。直接以PingOS服務器爲例:
配置項 | 優化項 | 講解 | 配置示例 |
---|---|---|---|
cache_time | 緩存大小 | 以時間爲單位的配置項,緩存大於等於整數倍個gop長度的數據 | cache_time 2s; |
low_latency | 開關 on/off | 低延時選項,開啓後服務器緩存中如果有新的關鍵幀,則跳過P幀,從新的關鍵幀處開始分發 | low_latency on |
send_all | 開關 on/off | 第一次向播放端發送數據時,是否一次性將緩存數據全部下發,如果一次將緩存數據全部下發,則相當於將服務器緩存積累的延時拋給了播放端,這樣的話,即使設置了low_latency也沒用,因爲緩存中已經無數據可跳過 | send_all |
服務器配置示例
application live {
live on;
cache_time 2s;
low_latency on;
send_all off;
}
播放端優化
播放端的優化因播放器而定,這裏以flv.js播放器爲例,圖中stashInitialSize的值就是播放器緩存大小,可按需調整。
QQ交流羣:697773082
QQ交流羣:697773082