tencent cloud

Tencent Cloud EdgeOne

M3U8のプリフェッチ

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-15 17:46:55
AI翻訳
本記事では、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のプリフェッチタスクのステータスを照会する

DescribePrefetchTasksインターフェースを呼び出し、作成したプレヒートタスクが返すjob-idまたはtargetを通じてクエリできます。タスク状態の説明は以下の通りです:
処理中:処理中です。
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() {
// 認証オブジェクトをインスタンス化します。入力パラメータとしてTencent CloudアカウントのSecretIdとSecretKeyを渡す必要があります。また、キーペアの機密性にも注意してください。
// コードが漏洩すると、SecretIdとSecretKeyが漏洩し、アカウント内のすべてのリソースのセキュリティが脅かされる可能性があります。以下のコード例は参考用です。より安全な方法でキーを使用することをお勧めします。詳細はhttps://www.tencentcloud.com/document/product/1278/85305?from_cn_redirect=1をご参照ください。
// キーは公式サイトのコンソールhttps://console.tencentcloud.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())
}


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック