Skip to content

簡介

P2P效果受多種因素影響,包括:緩衝時長、位元率高低、編碼方式、電信業者、使用者地理分布、終端裝置效能等等。
m3u8的設定(或mpd)對P2P效果也會產生很大的影響,適當的設定(包括每個切片的時長和每個m3u8/mpd包含的切片數量等)可以顯著提高P2P率。建議不要使用多位元率m3u8/mpd。

直播模式m3u8/mpd參考設定

  • 切片時長:3到4秒
  • 每個m3u8/mpd切片數量:不少於10個

以NGINX為例:

rtmp {
    server {
        ...

        application show {
            ...

            hls_fragment 4;                # 4 seconds fragments
            hls_playlist_length 60;        # 60 seconds playlist

        }
    }
}

允許Http Range請求

Http Range請求用於下載指定範圍的資料,可以在一部分資料已用P2P下載的情況下,剩餘部分用http下載補足。如果從對等端P2P下載速度較慢,那麼在達到逾時時間後,就可以把剩餘資料交給http range請求下載,而不需要重新完整下載整個資料,從而節省CDN的頻寬,下圖闡述了不採用和採用Http Range的差異:
http-range
要啟用Http Range請求,需要同時在來源伺服器和CDN開啟OPTIONS和RANGE請求:(Native端不需要開啟OPTIONS)

OPTIONS請求

OPTIONS請求是瀏覽器在跨網域情況下發起Range請求之前的預檢請求,一般只需要設定伺服器使Http標頭有以下回應:(Android和iOS不需要設定)

Access-Control-Allow-Methods: GET, OPTIONS

RANGE請求

要開啟RANGE請求,一般只需要設定伺服器使Http標頭有以下回應:

Access-Control-Allow-Headers: Range
Access-Control-Expose-Headers: Content-Length, Content-Range

NGINX 範例

add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
add_header 'Access-Control-Allow-Headers' 'Range';
add_header 'Access-Control-Allow-Origin' '*';
add_header Accept-Ranges bytes;
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
    add_header 'Access-Control-Allow-Headers' 'Range';
    add_header 'Access-Control-Max-Age' 1728000;
    add_header 'Content-Type' 'text/plain charset=UTF-8';
    add_header 'Content-Length' 0;
    return 204;
}

Web SDK設定建議

Android SDK設定建議

部署超級節點

請參考這裡

粤ICP备18075581号