โปรแกรมเล่นสื่อสามารถส่งข้อมูลที่มีค่าไปยังเครือข่ายการนำส่งเนื้อหา (CDN) ไปพร้อมกับคำขอออบเจ็กต์แต่ละรายการ การส่งข้อมูลดังกล่าวจะช่วยปรับปรุงการตรวจสอบ QoS, การเพิ่มประสิทธิภาพการเข้าชมแบบปรับเปลี่ยนได้ และประสิทธิภาพการแสดงผล ซึ่งท้ายที่สุดจะปรับปรุงประสบการณ์ของผู้บริโภค
การใช้งานใน ExoPlayer จะอิงตามข้อกำหนดที่ระบุไว้ใน CTA-5004
การรองรับ CMCD ใน Exoplayer
คุณจะเปิดใช้การรองรับ CMCD ใน ExoPlayer ได้เฉพาะสำหรับรูปแบบสตรีมมิงแบบปรับได้เท่านั้น เช่น DASH, HLS และ SmoothStreaming
คีย์ข้อมูล CMCD
คีย์ข้อมูล CMCD แบ่งออกเป็น 4 ประเภทดังนี้
- CMCD-Request: คีย์ที่มีค่าแตกต่างกันไปตามคําขอแต่ละรายการ
- CMCD-Object: คีย์ที่มีค่าแตกต่างกันไปตามออบเจ็กต์ที่ขอ
- สถานะ CMCD: คีย์ที่มีค่าไม่ได้แตกต่างกันไปตามคำขอหรือออบเจ็กต์ทุกรายการ
- CMCD-Session: คีย์ที่ค่ามีการเปลี่ยนแปลงตลอดอายุการใช้งานของเซสชัน
โหมดการส่งข้อมูล
ข้อมูล CMCD สามารถส่งได้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
- เป็นส่วนหัวคำขอ HTTP แบบกำหนดเอง ซึ่งเป็นลักษณะการทำงานเริ่มต้น
- ใช้เป็นอาร์กิวเมนต์การค้นหา HTTP
เปิดใช้ CMCD
หากต้องการเปิดใช้ CMCD คุณต้องสร้างอินสแตนซ์ของ CmcdConfiguration.Factory
แล้วส่งไปยัง MediaSource.Factory
ซึ่งใช้เมื่อสร้างเพลเยอร์ คุณจะใช้ CmcdConfiguration.Factory
เริ่มต้นหรือระบุ
โรงงานที่กำหนดเองของคุณ ซึ่งจะถูกเรียกในแต่ละครั้งที่แหล่งที่มาของสื่อแบบปรับอัตโนมัติ
ที่สร้างขึ้นสำหรับรายการสื่อนั้นๆ
เปิดใช้ CMCD ด้วยการกำหนดค่าเริ่มต้นจากโรงงาน
// Create media source factory and set default cmcdConfigurationFactory.
val mediaSourceFactory =
DefaultMediaSourceFactory(context)
.setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT)
// Create media source factory and set default cmcdConfigurationFactory.
MediaSource.Factory mediaSourceFactory =
new DefaultMediaSourceFactory(context)
.setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT);
เปิดใช้ CMCD พร้อมการกำหนดค่าจากโรงงานที่กำหนดเอง
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)
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
ตัวอย่างต่อไปนี้แสดงชุดค่าผสมข้อมูลที่ถูกต้องของข้อมูลที่ส่งเมื่อดึงข้อมูลกลุ่มสื่อ
เป็นส่วนหัวคำขอ 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"เป็นอาร์กิวเมนต์การค้นหา 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