Dữ liệu ứng dụng đa phương tiện chung (CMCD)

Những khách hàng sử dụng trình phát nội dung đa phương tiện có thể truyền thông tin có giá trị đến công cụ Phân phối nội dung Mạng (CDN) với từng yêu cầu đối tượng. Việc truyền dữ liệu đó có thể cải thiện chất lượng dịch vụ (QoS) theo dõi, tối ưu hoá lưu lượng truy cập thích ứng và hiệu suất phân phối nâng cao trải nghiệm của người tiêu dùng.

Việc triển khai trong ExoPlayer dựa trên thông số kỹ thuật được xác định trong CTA-5004.

Hỗ trợ CMCD trong Exoplayer

Chỉ có thể bật tính năng hỗ trợ CMCD trong ExoPlayer cho các định dạng phát thích ứng, chẳng hạn như DASH, HLSsuốt luồng.

Khoá dữ liệu CMCD

Khoá dữ liệu CMCD được phân loại thành 4 loại riêng biệt:

  • Yêu cầu CMCD: các khoá có giá trị thay đổi theo từng yêu cầu.
  • CMCD-Object: các khoá có giá trị thay đổi theo đối tượng đang được yêu cầu.
  • CMCD-Status: các khoá có giá trị không thay đổi theo mọi yêu cầu hoặc đối tượng.
  • Phiên CMCD: các khoá có giá trị dự kiến là bất biến trong vòng đời của phiên hoạt động.

Phương thức truyền dữ liệu

Dữ liệu CMCD có thể được truyền bằng một trong hai phương thức:

  • Dưới dạng tiêu đề yêu cầu HTTP tuỳ chỉnh, đây là hành vi mặc định.
  • Làm đối số truy vấn HTTP.

Bật CMCD

Để bật CMCD, bạn cần tạo một bản sao của CmcdConfiguration.Factory và truyền mã này vào MediaSource.Factory. Mã này được dùng khi tạo trình phát. Bạn có thể sử dụng CmcdConfiguration.Factory mặc định hoặc cung cấp nhà máy tuỳ chỉnh của riêng bạn được gọi mỗi khi có một nguồn phương tiện truyền thông thích ứng được tạo cho mục nội dung đa phương tiện đã cho.

Bật CMCD với cấu hình ban đầu mặc định

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

Bật CMCD bằng cấu hình tuỳ chỉnh gốc

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

Ví dụ về dữ liệu CMCD

Những ví dụ này minh hoạ các tổ hợp dữ liệu hợp lệ được gửi khi tìm nạp phân đoạn nội dung đa phương tiện:

  • Dưới dạng tiêu đề yêu cầu HTTP tuỳ chỉnh

       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"
    
  • Dưới dạng đối số truy vấn 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