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

ExoPlayer ใช้ MediaDrm API ของ 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 แดชบอร์ด
Play Ready SL2000 "CEnc" Android TV Android TV DASH, SmoothStreaming, HLS (FMP4 เท่านั้น)

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

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

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

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

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

กรณีที่ 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) คุณอาจลองเปิดใช้บัฟเฟอร์แบบไม่พร้อมกัน การจัดคิว