天天看點

PingOS伺服器系統常見問題總結1. 如何支援H265編碼?2. 如何降低直播延時?3. 如何降低HLS直播延時?4. 如何支援拉取rtsp源?QQ交流群:697773082

轉載請注明出處:https://blog.csdn.net/impingo

我的開源項目位址:https://github.com/pingostack/pingos

開源項目:https://pingos.io

目錄

  • 1. 如何支援H265編碼?
  • 2. 如何降低直播延時?
    • 2.1 優化推流端
    • 2.2 優化PingOS伺服器配置
    • 2.3 優化播放器端
  • 3. 如何降低HLS直播延時?
  • 4. 如何支援拉取rtsp源?
  • QQ交流群:697773082

本篇内容記錄大家問的比較多的問題,持續更新…

1. 如何支援H265編碼?

PingOS支援H265編碼直播和H265編碼的mpegts、flv檔案錄制功能。rtmp和flv預設使用12(十六進制 0x0c)代表h265編碼。同時推流工具也要配合修改,使用12做為h265的。

你可以通過HLS、HLS+、http-flv、rtmp、http-ts協定播放h265編碼的流,其中http-flv和rtmp需要播放器做特殊改進才能支援,一般桌面版播放器都能直接支援H265編碼的HLS和HLS+直播流。

你也可以使用其他的codecid來作為H265編碼類型的擴充。配置方式如下:

https://pingos.io/docs/zh/config-core#hevc_codecid

PingOS伺服器系統常見問題總結1. 如何支援H265編碼?2. 如何降低直播延時?3. 如何降低HLS直播延時?4. 如何支援拉取rtsp源?QQ交流群:697773082

以ffmpeg推流工具為例,如果你需要能夠推送支援h265編碼的rtmp流,你需要下載下傳特殊的ffmpeg版本,ffmpeg源碼連接配接:https://github.com/im-pingo/CDN-Union_H265

ffmpeg編譯過程可參考ffmpeg官網文檔:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

ffmpeg編譯成功後使用ffmpeg推流:

ffmpeg -i input.mp4 -vcodec h265 -acodec aac -f flv rtmp://ip/app/name
           

2. 如何降低直播延時?

在直播過程中,推流端、伺服器端、播放器、網絡環境等因素都會影響延時。

對于每個端上的優化措施可以參考以下參數:

2.1 優化推流端

  • h264編碼一定不要開啟B幀, 解碼時B 幀依賴于前後的幀,會增加延遲。
  • h264 編碼使用 H.264 baseline profile,減少編碼時消耗的時間。
  • 音頻盡量使用AAC-LC Codec,這樣會減少編碼時消耗的時間。
  • 适當調整關鍵幀間隔(GOP大小),因為前文說過伺服器是以GOP個整數倍進行緩存的,如果GOP過大伺服器端的緩存也會變大,建議設定為2s(但是同等碼率下GOP越小清晰度也會越低,是以建議大家視場景而定,推薦不小于1s)。

以OBS推流工具為例,要想盡量減少延時,可以參考如下配置:

PingOS伺服器系統常見問題總結1. 如何支援H265編碼?2. 如何降低直播延時?3. 如何降低HLS直播延時?4. 如何支援拉取rtsp源?QQ交流群:697773082

2.2 優化PingOS伺服器配置

對于伺服器端來說,可優化的點并不多,無非是對緩存大小進行優化。直接以PingOS伺服器為例:

配置項 優化項 講解 配置示例
cache_time 緩存大小 以時間為機關的配置項,緩存大于等于整數倍個gop長度的資料,理論上這個值越小延時會越低。如果你不關心播放端的首屏顯示的速度,可以将cache_time設定為0,這樣伺服器就不會緩存任何資料,實時将内容下發。 cache_time 0s;
low_latency 開關 on/off 低延時選項,cache_time大于0時有效,開啟後伺服器緩存中如果有新的關鍵幀,則跳過P幀,從新的關鍵幀處開始分發 low_latency on
send_all 開關 on/off cache_time大于0時有效,第一次向播放端發送資料時,是否一次性将緩存資料全部下發。如果一次将緩存資料全部下發,則相當于将伺服器緩存積累的延時抛給了播放端,這樣的話,即使設定了low_latency也沒用,因為緩存中已經無資料可跳過。将這個配置設定成false,并且和low_latency配合使用可一定程度上降低延時。 send_all

伺服器配置示例:

application live {
    live on;
    cache_time 2s;
    low_latency on;
    send_all off;
}
           

2.3 優化播放器端

播放端的優化因播放器而定,這裡以flv.js播放器為例,圖中stashInitialSize的值就是播放器緩存大小,可按需調整。

PingOS伺服器系統常見問題總結1. 如何支援H265編碼?2. 如何降低直播延時?3. 如何降低HLS直播延時?4. 如何支援拉取rtsp源?QQ交流群:697773082

3. 如何降低HLS直播延時?

關于HLS的延時優化,除了在前文

2. 如何降低直播延時?

中提到的操作外,伺服器端主要是通過降低切片大小來實作。

這裡主要介紹三個配置:

hls_fragment 1300ms;
hls_max_fragment 1800ms;
hls_playlist_length 3900ms;
           
  • hls_fragment

    hls_max_fragment

    配置一起決定了一個ts切片檔案的時長,ts檔案的時長會小于

    hls_max_fragment

    ,大于等于

    hls_fragment

    。是以适當調整這兩個參數能夠使ts切片更實時,這裡建議hls_max_fragment大于等于2000ms,并且小于2 * hls_fragment。
  • hls_playlist_length

    設定成

    hls_fragment

    的三倍即可。

4. 如何支援拉取rtsp源?

目前PingOS還不支援直接拉取rtsp源,但是可以利用

exec_pull

配置配合ffmpeg工具拉取rtsp源。

exec_pull

配置的作用是允許在第一次有人請求播放某一條直播流的時候PingOS會執行一條

Shell

指令,你可以在這條

Shell

指令裡執行ffmpeg拉流轉推到PingOS的操作。

例如添加下面的配置:

exec_pull bash -c "ffmepg -i rtsp://$parg_ip/$parg_uri -vcodec copy -acodec aac -f flv rtmp://127.0.0.1/live/$name";
           

當你向PingOS請求播放http-flv流的時候,PingOS就會觸發ffmpeg向rtsp源拉流并且轉推到本地。

舉個栗子:

播放http-flv流:http://127.0.0.1/flv/cam01?ip=192.168.1.5&uri=/h264/channel1

ffmpeg則會向拉取rtsp流:rtsp://192.168.1.5/h264/channel1,并且将内容推送給PingOS伺服器。

關于配置中使用到的$name等變量的含義,可以參考PingOS的官方文檔

QQ交流群:697773082

QQ交流群:697773082

繼續閱讀