メディア プレーヤー クライアントは、オブジェクト リクエストごとに有用な情報をコンテンツ配信ネットワーク(CDN)に送信できます。そのデータを送信すると、QoS モニタリング、適応型トラフィック最適化、配信パフォーマンスが向上し、最終的に消費者のエクスペリエンスが向上します。
ExoPlayer での実装は、CTA-5004 で定義されている仕様に基づいています。
ExoPlayer での CMCD サポート
ExoPlayer での CMCD サポートは、DASH、HLS、SmoothStreaming などのアダプティブ ストリーミング形式に対してのみ有効にできます。
CMCD データキー
CMCD データキーは 4 つのタイプに分類されます。
- CMCD-Request: リクエストごとに異なる値を持つキー。
- CMCD-Object: リクエストされたオブジェクトによって値が変化するキー。
- CMCD-Status: リクエストやオブジェクトごとに異なる値を持つキー。
- CMCD-Session: セッションの存続期間中は値が不変であることが想定されるキー。
データ送信モード
CMCD データは、次のいずれかの方法で送信できます。
- カスタム HTTP リクエスト ヘッダーとして使用する(デフォルトの動作)。
- HTTP クエリ引数として使用する。
CMCD を有効にする
CMCD を有効にするには、CmcdConfiguration.Factory
のインスタンスを作成し、プレーヤーをビルドするときに使用する MediaSource.Factory
に渡す必要があります。デフォルトの CmcdConfiguration.Factory
を使用するか、特定のメディア アイテムに対してアダプティブ メディアソースが作成されるたびに呼び出される独自のカスタム ファクトリを指定できます。
デフォルト設定ファクトリで CMCD を有効にする
Kotlin
// Create media source factory and set default cmcdConfigurationFactory. val mediaSourceFactory = DefaultMediaSourceFactory(context) .setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT)
Java
// Create media source factory and set default cmcdConfigurationFactory. MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT);
カスタム構成ファクトリを使用して CMCD を有効にする
Kotlin
val cmcdConfigurationFactory = object : CmcdConfiguration.Factory { override fun createCmcdConfiguration(mediaItem: MediaItem): CmcdConfiguration { val cmcdRequestConfig = object : CmcdConfiguration.RequestConfig { override fun isKeyAllowed(key: String): Boolean { return key == "br" || key == "bl" } override fun getCustomData(): ImmutableListMultimap<@CmcdConfiguration.HeaderKey String, String> { return ImmutableListMultimap.of( CmcdConfiguration.KEY_CMCD_OBJECT, "key1=stringValue") } override fun getRequestedMaximumThroughputKbps(throughputKbps: Int): Int { return 5 * throughputKbps } } val sessionId = UUID.randomUUID().toString() val contentId = UUID.randomUUID().toString() return CmcdConfiguration(sessionId, contentId, cmcdRequestConfig, MODE_QUERY_PARAMETER) } } // Create media source factory and set your custom cmcdConfigurationFactory. val mediaSourceFactory = DefaultMediaSourceFactory(context) .setCmcdConfigurationFactory(cmcdConfigurationFactory)
Java
CmcdConfiguration.Factory cmcdConfigurationFactory = mediaItem -> { CmcdConfiguration.RequestConfig cmcdRequestConfig = new CmcdConfiguration.RequestConfig() { @Override public boolean isKeyAllowed(String key) { return key.equals("br") || key.equals("bl"); } @Override public ImmutableListMultimap<@HeaderKey String, String> getCustomData() { return ImmutableListMultimap.of( CmcdConfiguration.KEY_CMCD_OBJECT, "key1=stringValue"); } @Override public int getRequestedMaximumThroughputKbps(int throughputKbps) { return 5 * throughputKbps; } }; String sessionId = UUID.randomUUID().toString(); String contentId = UUID.randomUUID().toString(); return new CmcdConfiguration(sessionId, contentId, cmcdRequestConfig, MODE_QUERY_PARAMETER); }; // Create media source factory and set your custom cmcdConfigurationFactory. MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setCmcdConfigurationFactory(cmcdConfigurationFactory);
CMCD データの例
次の例は、メディア チャンクを取得するときに送信されたデータの有効なデータの組み合わせを示しています。
カスタム HTTP リクエスト ヘッダーとして使用する
CMCD-Session:sid="6e2fb550-c457-11e9-bb97-0800200c9a66"
CMCD-Request:mtp=25400 CMCD-Object:br=3200,d=4004,ot=v,tb=6000 CMCD-Status:bs,rtp=15000 CMCD-Session:sid="6e2fb550-c457-11e9-bb97-0800200c9a66"
HTTP クエリ引数として
?CMCD=sid%3D%226e2fb550-c457-11e9-bb97-0800200c9a66%22
?CMCD=br%3D3200%2Cbs%2Cd%3D4004%2Cmtp%3D25400%2Cot%3Dv%2Crtp %3D15000%2Csid%3D%226e2fb550-c457-11e9-bb97- 0800200c9a66%22%2Ctb%3D6000