การจัดการสิทธิ์ดิจิทัล

ExoPlayer ใช้ API MediaDrm ของ Android เพื่อรองรับการเล่นที่ได้รับการปกป้องด้วย DRM Android เวอร์ชันขั้นต่ำที่จำเป็นสำหรับรูปแบบ DRM ที่รองรับต่างๆ พร้อมด้วยรูปแบบการสตรีมที่รองรับจะอธิบายไว้ในตารางต่อไปนี้

รูปแบบ DRM หมายเลขเวอร์ชันของ Android ระดับ API ของ Android รูปแบบที่รองรับ
Widevine "cenc" 4.4 19 DASH, HLS (FMP4 เท่านั้น)
Widevine "cbcs" 7.1 25 DASH, HLS (FMP4 เท่านั้น)
ClearKey "cenc" 5.0 21 DASH
PlayReady SL2000 "cenc" Android TV Android TV DASH, SmoothStreaming, HLS (FMP4 เท่านั้น)

หากต้องการเล่นเนื้อหาที่ได้รับการคุ้มครองโดย DRM ด้วย ExoPlayer คุณต้องระบุ UUID ของระบบ DRM เมื่อสร้างรายการสื่อ และระบุพร็อพเพอร์ตี้อื่นๆ ได้ด้วย จากนั้นเพลเยอร์จะใช้พร็อพเพอร์ตี้เหล่านี้เพื่อ สร้างการติดตั้งใช้งานเริ่มต้นของ DrmSessionManager ที่เรียกว่า DefaultDrmSessionManager ซึ่งเหมาะกับกรณีการใช้งานส่วนใหญ่ สำหรับกรณีการใช้งานบางอย่าง คุณอาจต้องใช้พร็อพเพอร์ตี้ DRM เพิ่มเติมตามที่ระบุไว้ในส่วนต่อไปนี้

การหมุนเวียนคีย์

หากต้องการเล่นสตรีมที่มีคีย์ที่หมุนเวียน ให้ส่ง true ไปยัง MediaItem.DrmConfiguration.Builder.setMultiSession เมื่อสร้างรายการสื่อ

เนื้อหาแบบหลายคีย์

เนื้อหาแบบหลายคีย์ประกอบด้วยสตรีมหลายรายการ โดยบางสตรีมใช้คีย์ที่แตกต่างจากสตรีมอื่นๆ คุณจะเล่นเนื้อหาแบบหลายคีย์ได้ 2 วิธี ขึ้นอยู่กับ การกำหนดค่าเซิร์ฟเวอร์ใบอนุญาต

กรณีที่ 1: เซิร์ฟเวอร์ใบอนุญาตตอบกลับด้วยคีย์ทั้งหมดสำหรับเนื้อหา

ในกรณีนี้ เซิร์ฟเวอร์ใบอนุญาตจะได้รับการกำหนดค่าเพื่อให้เมื่อได้รับคำขอคีย์ 1 รายการ เซิร์ฟเวอร์จะตอบกลับด้วยคีย์ทั้งหมดสำหรับเนื้อหา กรณีนี้ ExoPlayer จะจัดการโดยไม่ต้องมีการกำหนดค่าพิเศษใดๆ การปรับ ระหว่างสตรีม (เช่น วิดีโอ SD และ HD) จะเป็นไปอย่างราบรื่นแม้ว่าจะใช้คีย์ที่แตกต่างกัน

เราขอแนะนำให้กำหนดค่าเซิร์ฟเวอร์ใบอนุญาตให้ทำงานในลักษณะนี้หากเป็นไปได้ ซึ่งเป็นวิธีที่มีประสิทธิภาพและเสถียรที่สุดในการรองรับการเล่นเนื้อหาแบบหลายคีย์ เนื่องจากไม่จำเป็นต้องให้ไคลเอ็นต์ส่งคำขอใบอนุญาตหลายรายการ เพื่อเข้าถึงสตรีมต่างๆ

กรณีที่ 2: เซิร์ฟเวอร์ใบอนุญาตตอบกลับด้วยคีย์ที่ขอเท่านั้น

ในกรณีนี้ ระบบจะกำหนดค่าเซิร์ฟเวอร์ใบอนุญาตให้ตอบกลับด้วยคีย์ที่ระบุในคำขอเท่านั้น คุณสามารถเล่นเนื้อหาแบบหลายคีย์ด้วยการกำหนดค่าเซิร์ฟเวอร์ ใบอนุญาตนี้ได้โดยส่ง true ไปยัง MediaItem.DrmConfiguration.Builder.setMultiSession เมื่อสร้างรายการสื่อ

เราไม่แนะนำให้กำหนดค่าเซิร์ฟเวอร์ใบอนุญาตให้ทำงานในลักษณะนี้ โดยต้องมีการขอใบอนุญาตเพิ่มเติมเพื่อเล่นเนื้อหาที่มีหลายคีย์ ซึ่งมีประสิทธิภาพและความเสถียรน้อยกว่าทางเลือกที่อธิบายไว้ข้างต้น

คีย์ออฟไลน์

คุณโหลดชุดคีย์แบบออฟไลน์ได้โดยส่งรหัสชุดคีย์ไปยัง MediaItem.DrmConfiguration.Builder.setKeySetId เมื่อสร้างรายการสื่อ ซึ่งจะช่วยให้เล่นได้โดยใช้คีย์ที่จัดเก็บไว้ในชุดคีย์ออฟไลน์ที่มี รหัสที่ระบุ

เซสชัน DRM สำหรับเนื้อหาที่ไม่มีการป้องกัน

การใช้ตัวยึดตำแหน่ง DrmSessions ช่วยให้ ExoPlayer ใช้ตัวถอดรหัสเดียวกันสำหรับ เนื้อหาที่ไม่มีการเข้ารหัสได้เช่นเดียวกับที่ใช้เมื่อเล่นเนื้อหาที่เข้ารหัส เมื่อสื่อมีทั้งส่วนที่ชัดเจนและส่วนที่เข้ารหัส คุณอาจต้องใช้ตัวยึดตำแหน่ง DrmSessions เพื่อหลีกเลี่ยงการสร้างตัวถอดรหัสใหม่เมื่อมีการเปลี่ยนจากส่วนที่ชัดเจนเป็นส่วนที่เข้ารหัส การใช้ตัวยึดตำแหน่ง DrmSessions สำหรับแทร็กเสียงและวิดีโอจะเปิดใช้ได้โดยส่ง true ไปยัง MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks เมื่อสร้างรายการสื่อ

การใช้ DrmSessionManager ที่กำหนดเอง

หากแอปต้องการปรับแต่ง DrmSessionManager ที่ใช้สำหรับการเล่น ก็สามารถ ใช้ DrmSessionManagerProvider และส่งไปยัง MediaSource.Factory ซึ่งใช้เมื่อสร้างเพลเยอร์ ผู้ให้บริการสามารถ เลือกได้ว่าจะสร้างอินสแตนซ์ของเครื่องมือจัดการใหม่ทุกครั้งหรือไม่ หากต้องการใช้ อินสแตนซ์เดียวกันเสมอ ให้ทำดังนี้

Kotlin

val customDrmSessionManager: DrmSessionManager = CustomDrmSessionManager()
// Pass a drm session manager provider to the media source factory.
val mediaSourceFactory =
  DefaultMediaSourceFactory(context).setDrmSessionManagerProvider { customDrmSessionManager }

Java

DrmSessionManager customDrmSessionManager = new CustomDrmSessionManager(/* ... */ );
// Pass a drm session manager provider to the media source factory.
MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setDrmSessionManagerProvider(mediaItem -> customDrmSessionManager);

การปรับปรุงประสิทธิภาพการเล่น

หากวิดีโอเล่นติดขัดเมื่อเล่นเนื้อหาที่ได้รับการปกป้องด้วย DRM ในอุปกรณ์ที่ใช้ Android เวอร์ชันใดก็ได้ตั้งแต่ Android 6.0 (API ระดับ 23) จนถึง Android 11 (API ระดับ 30) คุณสามารถลองเปิดใช้การจัดคิวบัฟเฟอร์แบบอะซิงโครนัส