Klienci korzystający z odtwarzacza multimediów mogą przesyłać cenne informacje do systemu Dostawy treści Sieci (CDN) z każdym żądaniem obiektu. Przekazywanie tych danych może poprawić QoS monitorowania, optymalizacji ruchu adaptacyjnego oraz wydajności dostarczania. Dbanie o wrażenia konsumentów.
Implementacja w ExoPlayer opiera się na specyfikacji zdefiniowanej w CTA-5004.
Obsługa CMCD w odtwarzaczu Exo
Obsługa CMCD w odtwarzaczu ExoPlayer może zostać włączona tylko w przypadku adaptacyjnych formatów strumieniowania, takich jak DASH, HLS i SmoothStreaming.
Klucze danych w CMCD
Klucze danych CMCD dzielą się na 4 rodzaje:
- Żądanie CMCD: klucze, których wartości różnią się w zależności od żądania.
- CMCD-Object: klucze, których wartości różnią się w zależności od żądanego obiektu.
- CMCD-Status: klucze, których wartości nie różnią się w zależności od żądania i obiektu.
- CMCD-Session: klucze, których wartości powinny być niezmienne w ciągu argumentu w czasie trwania sesji.
Tryby przesyłania danych
Dane CMCD można przesyłać za pomocą jednej z 2 metod:
- Jako niestandardowy nagłówek żądania HTTP, które jest domyślne.
- Jako argument zapytania HTTP.
Włącz CMCD
Aby włączyć CMCD, musisz utworzyć instancję CmcdConfiguration.Factory
i przekazać ją do MediaSource.Factory
, która jest używana podczas tworzenia
. Możesz użyć domyślnego elementu CmcdConfiguration.Factory
lub podać
własną fabrykę, która jest wywoływana za każdym razem, gdy
utworzona dla danego elementu multimedialnego.
Włącz CMCD z fabryką domyślną
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);
Włącz platformę CMCD z fabryką niestandardową
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);
Przykłady danych w CMCD
Te przykłady ilustrują prawidłowe kombinacje danych wysyłanych podczas pobierania fragmenty multimediów:
Jako niestandardowe nagłówki żądań HTTP
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"
Jako argumenty zapytania 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