ExoPlayer는 Android의 MediaDrm
API를 사용하여 DRM으로 보호되는 재생을 지원합니다.
지원되는 다양한 DRM 체계에 필요한 최소 Android 버전과
지원되는 스트리밍 형식에 대해서는
다음 표를 참조하세요.
DRM 방식 | Android 버전 번호 | Android API 레벨 | 지원되는 형식 |
---|---|---|---|
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만 해당) |
ExoPlayer로 DRM 보호 콘텐츠를 재생하기 위해 DRM의 UUID
시스템을 지정해야 합니다.
미디어 항목을 빌드할 때 및 기타
속성을 제공할 수도 있습니다. 그런 다음 플레이어는 이러한 속성을 사용하여
DrmSessionManager
의 기본 구현인
DefaultDrmSessionManager
: 대부분의 사용 사례에 적합합니다. 일부 용도
이 경우 아래 설명된 대로 추가 DRM 속성이 필요할 수 있습니다.
섹션으로 이동합니다.
키 순환
회전 키로 스트림을 재생하려면 true
를
미디어를 빌드할 때 MediaItem.DrmConfiguration.Builder.setMultiSession
있습니다.
여러 핵심 콘텐츠
멀티키 콘텐츠는 여러 스트림으로 구성되며 일부 스트림에서는 키를 사용하는 것입니다. 멀티키 콘텐츠는 다음 두 가지 방법 중 하나로 재생할 수 있습니다. 자세히 알아보겠습니다
사례 1: 라이선스 서버가 콘텐츠의 모든 키로 응답
이 경우 라이선스 서버는 요청이 있을 경우 콘텐츠의 모든 키로 응답합니다. 이 케이스는 특별한 구성 없이도 ExoPlayer에서 처리됩니다. 적응 다른 스트림 (예: SD 및 HD 동영상) 간에 키를 누릅니다.
가능한 경우 이 있습니다. 멀티키 재생을 지원하는 가장 효율적이고 강력한 방법입니다. 콘텐츠(클라이언트가 여러 개의 라이선스 요청을 할 필요가 없기 때문) 여러 스트림에 액세스할 수 있습니다.
사례 2: 라이선스 서버가 요청된 키만으로 응답
이 경우 라이선스 서버는
요청을 처리합니다 이 라이선스로 멀티키 콘텐츠를 재생할 수 있습니다.
true
를 전달하여 서버 구성을
미디어를 빌드할 때 MediaItem.DrmConfiguration.Builder.setMultiSession
있습니다.
이 방식으로 작동하도록 라이선스 서버를 구성하지 않는 것이 좋습니다. 그것은 멀티키 콘텐츠를 재생하려면 추가 라이선스 요청이 필요하며, 위에서 설명한 대안보다 효율적이고 강력합니다.
오프라인 키
키 세트 ID를
미디어 항목을 빌드할 때 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 }
자바
DrmSessionManager customDrmSessionManager = new CustomDrmSessionManager(/* ... */ ); // Pass a drm session manager provider to the media source factory. MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setDrmSessionManagerProvider(mediaItem -> customDrmSessionManager);
재생 성능 개선
YouTube Music에서 DRM으로 보호된 콘텐츠를 재생할 때 동영상 끊김 현상이 발생하는 경우 Android 6.0 (API 수준 23) 이상 버전 이상의 Android를 실행하는 기기 (Android 11(API 수준 30) 포함)에서 비동기 버퍼를 사용 설정하여 큐에 추가하는 방법을 자세히 알아보세요.