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, 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:
- 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