Kunden von Mediaplayern können wertvolle Informationen an die Inhaltsübermittlung übertragen. Netzwerke (CDNs) mit jeder Objektanfrage. Durch das Übertragen dieser Daten kann die Dienstqualität verbessert werden. das Monitoring, die adaptive Traffic-Optimierung und die Bereitstellungsleistung. die Nutzererfahrung verbessern.
Die Implementierung in ExoPlayer basiert auf der im folgenden Abschnitt definierten Spezifikation. CTA-5004:
CMCD-Unterstützung im Exoplayer
Die CMCD-Unterstützung im ExoPlayer kann nur für adaptive Streamingformate aktiviert werden. DASH, HLS und SmoothStreaming.
CMCD-Datenschlüssel
CMCD-Datenschlüssel werden in vier verschiedene Typen unterteilt:
- CMCD-Anfrage: Schlüssel, deren Werte bei jeder Anfrage variieren.
- CMCD-Object: Schlüssel, deren Werte je nach angefordertem Objekt variieren.
- CMCD-Status: Schlüssel, deren Werte nicht bei jeder Anfrage oder jedem Objekt variieren.
- CMCD-Session: Schlüssel, deren Werte voraussichtlich gegenüber der während der Sitzung.
Arten der Datenübertragung
CMCD-Daten können mit einer der beiden Methoden übertragen werden:
- Als benutzerdefinierten HTTP-Anfrageheader (Standardverhalten).
- Als HTTP-Abfrageargument.
CMCD aktivieren
Zum Aktivieren von CMCD müssen Sie eine Instanz von CmcdConfiguration.Factory
erstellen
und an den MediaSource.Factory
übergeben, der beim Erstellen der
Player Sie können entweder die Standardeinstellung CmcdConfiguration.Factory
verwenden oder
Ihre eigene benutzerdefinierte Factory, die jedes Mal aufgerufen wird, wenn eine adaptive Medienquelle
das für das jeweilige Medienelement erstellt wurde.
CMCD mit Standardkonfiguration auf Werkseinstellungen aktivieren
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);
CMCD mit benutzerdefinierter Konfigurations-Factory aktivieren
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);
CMCD-Datenbeispiele
Diese Beispiele veranschaulichen gültige Datenkombinationen von Daten, die beim Abrufen gesendet werden. Medienblöcke:
Als benutzerdefinierte HTTP-Anfrageheader
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"
Als HTTP-Abfrageargumente
?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