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, HLS và suố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