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

        }
    }
}
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头有以下响应:(安卓和iOS不需要配置)

Access-Control-Allow-Methods: GET, OPTIONS
Access-Control-Allow-Methods: GET, OPTIONS

RANGE请求

要开启RANGE请求,一般只需要配置伺服器使Http头有以下响应:

Access-Control-Allow-Headers: Range
Access-Control-Allow-Headers: 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;
}
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配置建议

安卓SDK配置建议

部署超级节点

请参考这里

粤ICP备18075581号