边缘加速
  • 站点加速
    • 概述
    • 访问控制
      • Token authentication
        • Token 鉴权
        • 认证方法A
        • 认证方法B
        • 认证方法C
        • 认证方法D
        • 认证方法V
    • 智能加速
    • Cache configuration
      • 概述
      • EdgeOne caching rules introduction
        • EdgeOne 内容缓存规则
        • 缓存键(Cache Key)介绍
        • Vary 特性
      • 缓存配置
        • 自定义 Cache Key
        • 节点缓存 TTL
        • 状态码缓存 TTL
        • 浏览器缓存 TTL
        • 离线缓存
        • 缓存预刷新
      • 清除和预热缓存
        • 清除缓存
        • 预热缓存
        • Prefetch M3U8
      • How to improve the Cache Hit Rate of EdgeOne
    • 文件优化
      • 内容压缩
      • 智能压缩
    • 网络优化
      • HTTP/2
      • HTTP/3(QUIC)
        • 概述
        • 启用 HTTP/3
        • QUIC SDK
          • SDK 概览
          • SDK 下载和集成指引
          • 代码示例
            • Android
            • iOS
          • API 文档
            • Android
            • iOS
      • IPv6 访问
      • 最大上传大小
      • WebSocket
      • 携带客户端 IP 头部回源
      • 携带客户端 IP 地理位置头部回源
      • 开启 gRPC
      • Network Error Logging
    • URL 重写
      • 访问 URL 重定向
      • 回源 URL 重写
    • 修改头部
      • 修改 HTTP 节点响应头
      • 修改 HTTP 回源请求头
    • Modify response content
      • HTTP Response
      • Custom Error Page
    • 规则引擎
      • 概述
      • 规则管理
      • 变量
      • 规则引擎支持的匹配类型与操作
    • Image and video processing
      • Audio and Video Pre-pulling
      • Just-in-Time Image Processing
      • Video Just-In-Time Processing
      • VOD Media Origin
    • Speed limit for single connection download
    • 请求与响应行为
      • HTTP响应
      • 请求处理顺序
      • EdgeOne 默认 HTTP 回源请求头
      • EdgeOne 默认 HTTP 响应头
      • HTTP限制
    • 媒体服务
      • 音视频预拉取
      • 实时图片处理
      • 实时媒体处理
      • 点播媒体源
  • 四层代理
    • 概述
    • 新建四层代理实例
    • 修改四层代理实例配置
    • 停用/删除四层代理实例
    • 批量配置转发规则
    • 获取客户端真实IP
      • 通过 TOA 获取 TCP 协议客户端真实 IP
      • 通过 Proxy Protocol V1/V2 协议获取客户端真实 IP
        • 概述
        • 方式一:通过 Nginx 获取客户端真实 IP
        • 方式二:在业务服务器解析客户端真实 IP
        • Proxy Protocol V1/V2 获取的客户端真实 IP 格式
      • 通过 SPP 协议传递客户端真实 IP
  • 边缘 DNS
    • Domain Name Services
      • 概述
      • DNS resolution for managed domains
        • 修改 DNS 服务器
        • 配置域名 DNS 解析记录
        • 批量导入DNS记录
        • DNS 高级配置
      • Access accelerated domains
        • 添加加速域名
        • 站点/域名归属权验证
        • 修改 CNAME 解析
        • 验证业务访问
      • Traffic scheduling
        • 流量调度管理
    • HTTPS Certificate
      • Overview
      • Edge HTTPS Certificate
        • Overview
        • Deploying/Updating SSL Certificate for A Domain Name
        • Configuring A Free Certificate for A Domain Name
        • Using Keyless Certificate
      • Edge mTLS Authentication
      • Origin Certificate Validation
      • HTTPS configuration
        • Forced HTTPS Access
        • Enabling HSTS
        • SSL/TLS security configuration
          • Configuring SSL/TLS Security
          • TLS Versions and Cipher Suites
        • Enabling OCSP Stapling
      • Related References
        • Using OpenSSL to Generate Self-Signed Certificates
        • Certificate Format Requirements
        • The Difference Between one-way authentication and Mutual authentication
    • 源站配置
      • 负载均衡
        • 概述
        • 快速创建负载均衡实例
        • 健康检查策略介绍
        • 查看源站健康状态
        • 相关参考
          • 负载均衡相关概念
          • 请求重试策略介绍
      • Origin Group Configuration
      • 回源配置
        • 回源超时
        • 配置回源 HTTPS
        • Host Header 重写
        • 回源请求参数设置
        • 回源跟随重定向
        • HTTP/2 回源
        • 分片回源
        • Modify Origin
        • Origin-pull Rate Limiting Policy
      • Origin Protection(Obtaining/Updating Origin IP Address Range)
      • 相关参考
        • 旧版源站组兼容相关问题

Prefetch M3U8

本文将详细为您介绍如何通过 EdgeOne 实现 M3U8 预热,从而系统性规避首播阶段的缓存穿透问题,确保用户请求可直接从节点获取完整资源,提升访问质量。
说明:
该能力为白名单功能,如需使用,请 联系我们

背景介绍

对于 HLS/DASH 等采用 M3U8 分片协议的流媒体服务,缓存预热能够有效解决首播阶段的性能瓶颈。由于传统分发模式中,用户首次访问需从源站逐级拉取M3U8 索引文件及关联 TS 分片资源,若边缘节点无缓存,将导致显著的首播延迟与播放卡顿。M3U8 预热的核心原理在于,获取 M3U8 索引文件关联的所有 TS 分片资源进行预热。

核心价值

降低访问延迟:用户请求直接从最近的 EdgeOne 节点获取资源,无需回源到源站。
提升播放成功率:减少因网络波动导致的视频中断。
优化源站成本:高频热点资源通过 EdgeOne 的缓存能力,降低源站带宽压力。

操作步骤

示例场景

假设您是一家视频厂商,已将站点域名 www.example.com 接入到 EdgeOne 加速,因为有热门剧集更新,期望提交影片的 M3U8 资源即可自动将关联的 TS 资源预热至 EdgeOne。

步骤 1:创建 M3U8 的预热任务

注意:
M3U8 描述文件需要确保可正常请求,并按行业标准描述分片路径,支持的格式如下:
假设请求 URL 为:https://www.example.com/c8679239vodtranssgp1500031474/5fac87c91397757892217228202/adp.1505647.m3u8
该 URL 的内容格式为相对路径,如 1505647_0_0.ts,则 EdgeOne 会自行拼接为如下的 TS URL:
https://www.example.com/c8679239vodtranssgp1500031474/5fac87c91397757892217228202/1505647_0_0.ts
M3U8 描述文件递归解析深度不超过 3 层。
解析获取的分片数会正常累加每日预热用量,当用量超出配额时,会静默处理,不再执行预热。
调用 CreatePrefetchTask 接口,其中:
1. Targets 字段:值为 M3U8 的 URL,如 https://www.example.com/c8679239vodtranssgp1500031474/5fac87c91397757892217228202/adp.1505647.m3u8
2. PrefetchMediaSegments 字段,值为 on。该字段取值说明:
on:预热 M3U8 描述文件的同时,递归解析描述文件的 TS 资源进行预热。
off:不填时,默认值为 off。仅预热提交的 M3U8 描述文件。
3. 其它入参字段按需填写即可。

步骤 2:查询 M3U8 的预热任务状态

调用 CreatePrefetchTask 接口,可以根据创建预热任务返回的 job-id 或者通过 target 进行查询,任务状态的说明如下:
processing:处理中。
success:成功。
failed:失败。
timeout:超时。
invalid:无效。

调用示例

curl
Golang
curl -X POST https://teo.tencentcloudapi.com -H "Authorization: TC3-HMAC-SHA256 Credential=******************************/2025-02-19/teo/tc3_request, SignedHeaders=content-type;host, Signature=9ec53d3ba8d4049c219052b0a2275ff3a30d3429d6295ae4c799c74d32c8f015" -H "Content-Type: application/json" -H "Host: teo.tencentcloudapi.com" -H "X-TC-Action: CreatePrefetchTask" -H "X-TC-Timestamp: 1739965395" -H "X-TC-Version: 2022-09-01" -H "X-TC-Language: zh-CN" -d '{"ZoneId":"zone-xxx","Targets":["https://www.example.com/c8679239vodtranssgp1500031474/5fac87c91397757892217228202/adp.1505647.m3u8"]}'
package main
import (
"fmt"

"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901"
)
func main() {
// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
// 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
credential := common.NewCredential(
"SecretId",
"SecretKey",
)
// 实例化一个client选项,可选的,没有特殊需求可以跳过
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = "teo.tencentcloudapi.com"
// 实例化要请求产品的 client 对象,国内站可填 ap-guangzhou 作为接入地域,国际站可填写 ap-singapore 作为接入地域,clientProfile 是可选的
client, _ := teo.NewClient(credential, "ap-guangzhou", cpf)

// 实例化一个请求对象,每个接口都会对应一个 request 对象
request := teo.NewCreatePrefetchTaskRequest()
request.ZoneId = common.StringPtr("zone-364ni75dvzva")
request.Targets = common.StringPtrs([]string{"https://www.example.com/1.m3u8"})
request.PrefetchMediaSegments = common.StringPtr("on")

// 返回的 resp 是一个 CreatePrefetchTaskResponse 的实例,与请求对象对应
response, err := client.CreatePrefetchTask(request)
if _, ok := err.(*errors.TencentCloudSDKError); ok {
fmt.Printf("An API error has returned: %s", err)
return
}
if err != nil {
panic(err)
}
// 输出 json 格式的字符串回包
fmt.Printf("%s", response.ToJsonString())
}