Các ứng dụng trình phát đa phương tiện có thể truyền thông tin có giá trị đến Mạng phân phối nội dung (CDN) trong mỗi yêu cầu đối tượng. Việc truyền dữ liệu đó có thể cải thiện hoạt động giám sát QoS, tối ưu hoá lưu lượng truy cập thích ứng và hiệu suất phân phối, từ đó 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 quy cách được xác định trong CTA-5004.
Hỗ trợ CMCD trong Exoplayer
Bạn chỉ có thể bật chế độ hỗ trợ CMCD trong ExoPlayer cho các định dạng truyền phát thích ứng, chẳng hạn như DASH, HLS và SmoothStreaming.
Khoá dữ liệu CMCD
Khoá dữ liệu CMCD được phân loại thành 4 loại riêng biệt:
- CMCD-Request: 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 được yêu cầu.
- CMCD-Status: các khoá có giá trị không thay đổi theo từng yêu cầu hoặc đối tượng.
- CMCD-Session: các khoá có giá trị dự kiến sẽ không thay đổi trong suốt thời gian của phiên.
Các 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:
- Là tiêu đề yêu cầu HTTP tuỳ chỉnh, đây là hành vi mặc định.
- Là đối số truy vấn HTTP.
Bật CMCD
Để bật CMCD, bạn cần tạo một phiên bản CmcdConfiguration.Factory và truyền phiên bản này đến MediaSource.Factory. MediaSource.Factory là đượ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 factory tuỳ chỉnh của riêng mình. Factory này sẽ được gọi mỗi khi một nguồn nội dung nghe nhìn thích ứng được tạo cho mục nội dung nghe nhìn đã cho.
Bật CMCD bằng nhà máy cấu hình 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 nhà máy cấu hình tuỳ chỉnh
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ủ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