共通メディア クライアント データ(CMCD)

メディア プレーヤー クライアントは有用な情報をコンテンツ配信に送信できる 各オブジェクト リクエストを持つネットワーク(CDN)。これらのデータを送信することで、QoS モニタリング、適応型トラフィック最適化、配信パフォーマンスを改善し、最終的にはユーザー エクスペリエンスを向上させることができます。

ExoPlayer の実装は、CTA-5004 で定義されている仕様に基づいています。

Exoplayer での CMCD のサポート

ExoPlayer の CMCD サポートは、DASHHLSSmoothStreaming などのアダプティブ ストリーミング形式でのみ有効にできます。

CMCD データキー

CMCD データキーは、次の 4 つのタイプに分類されます。

  • CMCD-Request: 値がリクエストごとに異なるキー。
  • CMCD-Object: リクエストされるオブジェクトによって値が異なるキー。
  • CMCD-Status: リクエストやオブジェクトごとに値が変化するわけではないキー。
  • CMCD-Session: 値が変わらないことが想定されるキー あります。

データ送信モード

CMCD データは、次の 2 つの方法のいずれかで送信できます。

  • カスタム HTTP リクエスト ヘッダーとして(これはデフォルトの動作です)。
  • HTTP クエリ引数。

CMCD を有効にする

CMCD を有効にするには、CmcdConfiguration.Factory のインスタンスを作成する必要があります。 これを MediaSource.Factory に渡します。これは できます。デフォルトの CmcdConfiguration.Factory を使用するか、 アダプティブ メディアソースが呼び出されるたびに呼び出される独自のカスタム ファクトリ 指定されたメディア アイテムに対して作成されたものです。

デフォルトの構成ファクトリで CMCD を有効にする

KotlinJava
// Create media source factory and set default cmcdConfigurationFactory.
val mediaSourceFactory =
   
DefaultMediaSourceFactory(context)
       
.setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT)
// Create media source factory and set default cmcdConfigurationFactory.
MediaSource.Factory mediaSourceFactory =
   
new DefaultMediaSourceFactory(context)
       
.setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT);

カスタム構成ファクトリで CMCD を有効にする

KotlinJava
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)
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