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

Bạn chỉ có thể bật tính năng hỗ trợ CMCD trong ExoPlayer cho các định dạng truyền trực tuyến thích ứng, chẳng hạn như DASH, HLSSmoothStreaming.

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

Bạn có thể truyền dữ liệu CMCD bằng một trong hai phương thức sau:

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

Bật CMCD

Để bật CMCD, bạn cần tạo một thực thể của CmcdConfiguration.Factory và truyền thực thể này đến MediaSource.Factory. MediaSource.Factory được sử 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 mình. Nhà máy này được gọi mỗi khi tạo nguồn nội dung nghe nhìn thích ứng cho một mục nội dung nghe nhìn nhất định.

Bật CMCD bằng cấu hình gốc 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

Các ví dụ sau đây minh hoạ các tổ hợp dữ liệu hợp lệ của dữ liệu được gửi khi tìm nạp các đoạn nội dung nghe nhì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