동시 재생 제한 (CSL) 가이드

개요

동시 재생 제한(Concurrent Stream Limiting, 이하 CSL)DRM 라이선스 갱신(Renewal)을 통해 사용자 계정 당 동시 재생 중인 스트림의 수를 파악하고 제한할 수 있는 기능입니다. CSL 기능은 과도한 계정 공유로 인한 서비스 매출 감소를 방지하기 원하는 경우에 사용할 수 있습니다.

DRM 라이선스 갱신이란 라이선스의 유효 기간을 콘텐츠의 길이보다 짧게 (예: 10분) 설정해 콘텐츠 재생 중에 주기적으로 라이선스 갱신 요청과 응답이 발생하게 하는 기능입니다. 이를 통해 DRM 서버에서 해당 스트림의 재생 종료 여부를 정확하게 판단하고 동시 재생 수를 제어할 수 있게 됩니다.

라이선스 갱신을 통한 동시 재생 제한의 동작 원리는 아래 시나리오 예시를 참고하시기 바랍니다.

CSL 서비스 시나리오

CSL 기능 사용 시, PallyCon 서비스에 가입된 사이트(SiteID)마다 다음과 같은 사항을 설정할 수 있습니다.

  • 사용자(End user) 계정 당 최대 동시 재생 수
  • DRM 라이선스 갱신 주기

다음은 최대 동시 재생 수가 ‘2’로, 라이선스 갱신 주기가 ‘10분’으로 설정되어 있는 경우에 대한 시나리오 예시입니다.

  1. 사용자가 첫번째 기기에서 DRM 콘텐츠 재생 시작. 서버에 해당 사용자 계정의 현재 재생 중인 스트림 수가 1로 카운트되며, 재생 중에는 10분 간격으로 라이선스가 갱신되어 재생 종료 여부를 판단함.
  2. 동일한 사용자 계정으로 두번째 기기에서 DRM 콘텐츠 재생 시작. 서버의 동시 재생 카운트가 2로 증가함
  3. 세번째 기기에서 DRM 콘텐츠 재생 시도. 최대 동시 재생 수 제한으로 인해 DRM 라이선스 발급이 실패함. 해당 기기에는 ‘최대 동시 재생 수 제한으로 새로운 재생을 시작할 수 없습니다’와 같은 메시지가 표시됨 (고객사의 서비스 어플리케이션에서 DRM 에러 처리로 구현)
  4. 첫번째 기기에서의 콘텐츠 재생이 종료됨. 해당 클라이언트로부터 더 이상의 라이선스 갱신 요청이 없으므로 최대 10분 이내에 카운트가 1로 감소함
  5. 카운트 감소 후 세번째 기기에서 다시 재생 시도. 최대 동시 재생 수를 넘지 않으므로 DRM 라이선스가 발급되어 재생이 시작됨. 서버의 카운트는 2로 증가함
  6. 위와 같은 원리로 하나의 사용자 계정을 이용해 동시 재생되는 스트림 수는 최대 2 이하로 제한됨
CSL은 라이선스 갱신을 적용할 수 없는 VOD 다운로드/오프라인 시나리오의 경우에는 적용할 수 없습니다. (오프라인 재생은 카운트 안됨)

기존 방식과의 차이점

콘텐츠 서비스 업체들은 과도한 계정 공유를 제한하기 위하여 기존에 다음과 같은 방식들을 적용해왔습니다.

기기 대수 제한

기기 대수 제한 기능은 각 클라이언트 기기의 고유한 ID 정보를 이용해 사용자 계정 당 등록 가능한 기기 수를 제한하는 기능입니다.

이 방식은 여러 OTT 서비스에서 많이 사용되었지만 다음과 같은 문제점을 가지고 있습니다.

  • 고유 ID 정보를 획득하기 어려움: 크롬 등의 웹 브라우저의 경우 고유 ID를 획득하기 어려우며, 모바일 앱에서도 개인 정보 보호 등의 이슈로 해당 정보에 대한 접근이 점점 어려워지고 있습니다.

  • 기기 등록 및 해제를 위한 구현이 필요: 등록 기기 대수가 초과된 경우에 대한 고객 지원을 위해 등록 해제 기능을 구현해야 하며, 해당 구현이 해킹될 수 있는 가능성도 있습니다.

DRM 라이선스 갱신 방식으로 구현된 CSL 기능은 위와 같은 문제점이 없으며, 기기 대수 제한 대비 사용자 불편이 적다는 장점이 있습니다.

어플리케이션에서 직접 CSL 구현

DRM 라이선스 갱신 방식의 CSL 대신, 서비스 어플리케이션과 백엔드 서버의 통신을 통해 콘텐츠의 재생 시작과 종료 시점을 체크해 동시 재생 제한을 구현할 수도 있습니다.

이 방식도 기기 대수 제한과 더불어 많은 서비스에 적용되어 있지만, 다음과 같은 문제점을 가지고 있습니다.

  • 해킹을 통한 우회 가능성: 클라이언트 어플리케이션 해킹을 통한 동시 재생 수 카운트 로직의 우회가 가능합니다.

  • 카운트 차감이 안되는 문제: 클라이언트 어플리케이션의 비정상 종료 등의 상황 발생 시, 재생 종료 이벤트가 발생하지 않아 서버의 동시 재생 수가 줄어들지 않는 문제가 발생할 수 있습니다. (실제 동시 재생 수와 카운트가 맞지 않게 되는 문제)

CSL의 DRM 라이선스 갱신 로직은 클라이언트 해킹에 의한 우회가 불가능하며, 비정상 종료 등의 상황이 발생해도 갱신 주기 이내에 자동으로 서버의 카운트가 차감되어 정확한 동시 재생 수 제어가 가능합니다.

CSL 활성화를 위한 PallyCon 콘솔 설정

CSL 기능을 사용하려면 PallyCon 계정의 멀티 DRM 요금제에 따라 콘솔에서 다음과 같은 처리가 필요합니다.

트라이얼 계정

상용 요금제로 전환하기 전인 트라이얼 기간에 CSL 기능을 테스트하려면 PallyCon 콘솔의 멀티DRM > DRM 세팅 화면에서 동시 재생 제한 옵션을 사용으로 설정합니다.

  • 유저 당 최대 동시 재생 수: 최종 사용자 계정 당 동시에 재생할 수 있는 스트리밍의 수가 해당 값 이하로 제한됩니다. (기본값 3)

  • 갱신 간격: CSL 기능을 위한 스트리밍 라이선스의 갱신 간격을 설정합니다. 간격이 짧을 수록 재생 종료 시점을 더 정확하게 판단할 수 있으나, 그 만큼 라이선스 발급(갱신) 수가 증가하게 됩니다. (기본값 10분)

트라이얼 플랜에서 CSL을 활성화하는 경우, 해당 기능에 대한 요금이 과금되지는 않습니다. 그러나 CSL의 라이선스 갱신으로 인해 트라이얼 사용량 제한(최대 월 1,000개 라이선스)에 도달하면 라이선스 발급이 중단되니 주의하시기 바랍니다. 사용량 제한에 도달한 후에도 추가 테스트가 필요하면 헬프데스크로 문의해 주시기 바랍니다.

상용 계정

상용 계정에서 CSL 기능을 이용하려면, 상용 요금제 신규 가입 또는 요금제 변경을 통해 다음과 같은 요금제에 가입되어 있어야 합니다.

  • MAU(월간 사용자 수 기반) 요금제: MAU 요금제에서 CSL 기능을 사용하려면 플랜 가입 화면에서 동시 재생 제한 기능 사용하기 옵션을 선택해야 합니다. 해당 옵션 선택 시 MAU 기본 요금에 추가적인 CSL 요금(기본 월 200불)이 매월 청구됩니다.

  • MAL(월간 라이선스 수 기반) 요금제: MAL 요금제를 이용하는 경우, 별도의 요금제 옵션 선택이나 기본 요금의 변동 없이 CSL 기능 사용이 가능합니다. 다만 라이선스 갱신에 따른 MAL 증가량이 요금 정산에 반영됩니다.

위와 같은 요금제가 적용된 후에는 트라이얼 계정과 동일하게 멀티DRM > DRM 세팅 화면에서 CSL 기능을 활성화하고 설정할 수 있습니다.

트라이얼 계정에서 상용으로 전환하는 경우, 전환된 요금제가 MAL 기반이거나 MAU 기반에 CSL 옵션을 선택하지 않았다면 기존에 CSL을 활성화 했더라도 자동으로 비활성화 처리됩니다. 이때 MAL 요금제를 사용한다면 DRM 세팅 화면에서 다시 CSL 활성화가 가능하며, MAU 요금제인 경우는 요금제 옵션 변경이 필요합니다. (사업팀 또는 헬프데스크를 통해 문의)

DRM 별 클라이언트 설정

동시 접속 제한을 위해 사용되는 DRM 라이선스 갱신(Renewal) 기능은 각 DRM 별로 지원 규격과 클라이언트 지원이 상이합니다. 이에 따라 클라이언트 환경마다 다음과 같은 플레이어 솔루션과 추가 연동이 필요합니다.

Widevine 지원 환경

Widevine DRM이 지원되는 클라이언트 환경(크롬 브라우저, 안드로이드 앱 등)에서는 플레이어의 제한 없이 Widevine의 라이선스 리뉴얼 규격을 통해 CSL 기능 사용이 가능합니다. (임의의 플레이어 사용 가능)

이때 데스크탑 크롬 브라우저 환경에 대해서는 고유한 클라이언트 ID를 적용할 수 있도록 다음과 같은 설정이 플레이어에 추가되어야 합니다. 아래는 Bitmovin 플레이어에서 고유 ID 지원을 위해 persistentState 옵션을 required로 설정하는 예제입니다.

widevine: {
    'mediaKeySystemConfig': {
        'persistentState':'required'
    }
}
Widevine 지원 환경에서의 CSL 기능 연동에는 임의의 플레이어 사용이 가능하지만, 아래 설명된 PlayReady 환경의 제약을 고려할 때 크롬과 엣지 브라우저 환경에 대한 웹 플레이어 솔루션은 Bitmovin 플레이어의 사용을 권장합니다.

PlayReady 지원 환경

윈도우즈 엣지 브라우저와 같은 PlayReady DRM 환경에서는 라이선스 갱신 주기에 따라 수동으로 갱신 요청을 할 수 있도록 플레이어 측에 라이선스 갱신 API가 필요합니다. 현재까지 확인된 HTML5 플레이어 중에서는 Bitmovin 플레이어가 유일하게 해당 API를 제공하고 있습니다. (Bitmovin Player API 참고)

아래 링크된 예제 코드를 참고해 PallyCon 콘솔에서 설정한 라이선스 갱신 주기마다 위 API를 호출하는 코드를 Bitmovin 플레이어가 사용되는 페이지에 적용해야 합니다. 자세한 내용은 아래 GitHub 저장소의 샘플 코드를 참고하시기 바랍니다.

HTML5 플레이어 샘플 - CSL 관련 코드
콘솔에서 설정한 갱신 주기와 플레이어에 적용한 주기가 다를 경우, 라이선스 갱신 처리가 안되어 콘텐츠 재생이 중단됩니다. 동일한 갱신 주기 값이 사용되도록 주의해주시기 바랍니다.

FairPlay 지원 환경

사파리 브라우저

사파리 브라우저에서의 FairPlay 라이선스 갱신 기능을 지원하려면 현재 사파리에 내장된 기본 HLS 플레이어 기능만 사용 가능합니다. 다른 HTML5 플레이어 솔루션에서는 아직 FairPlay 라이선스 갱신 기능이 지원되지 않으며, Bitmovin 플레이어의 경우 향후 개발 로드맵에 추가될 예정이라고 합니다.

사파리 내장 플레이어의 경우에도 기본적인 연동 방식은 엣지(PlayReady) 브라우저의 Bitmovin 플레이어 연동과 유사합니다. 상세한 연동 방법은 아래 링크된 예제 코드를 참고하시기 바랍니다.

HTML5 플레이어 샘플 - CSL 관련 코드

iOS 어플리케이션

최신 버전의 PallyCon FPS iOS SDK 또는 Bitmovin Player iOS SDK를 이용해 개발한 iOS 앱의 경우, SDK 라이브러리에 라이선스 수동 갱신 처리가 구현되어 비교적 쉽게 CSL 연동이 가능합니다.

PallyCon FPS iOS SDK로 개발한 앱에서의 갱신 주기 설정은 라이선스 토큰의 응답 형식(Response Format)에 따라 다음과 같은 두 가지 방식으로 설정할 수 있습니다.

  • original: DRM 서버에서 응답하는 데이터가 실제 라이선스 데이터 형식으로 응답되므로, 라이선스 갱신 주기는 웹 플레이어 연동과 마찬가지로 콘솔의 설정과 동일한 값을 코드에 직접 입력해야 합니다.

  • json: JSON 형식의 커스텀 라이선스 데이터가 응답되며, 이 경우 별도의 갱신 주기 입력 없이 JSON 데이터에 입력된 해당 값(콘솔에 설정된 라이선스 갱신 주기와 동일한 값)이 자동으로 적용됩니다.

기타 유의 사항

CSL 적용을 위한 라이선스 토큰 설정

서비스 시나리오 항목에서 설명한 것과 같이, CSL 기능은 스트리밍 시나리오에만 적용 가능합니다. 따라서 CSL 기능이 적용될 콘텐츠에 대한 라이선스 토큰 생성 시 playback_policypersistent 항목은 false로 설정해야 합니다.

CSL이 활성화되고 persistent: false로 설정된 토큰의 경우, license_duration 등의 각종 라이선스 유효 기간에 대한 토큰 설정 값은 무시되고 콘솔에서 설정한 갱신 주기 값이 대신 적용됩니다.

  • CSL은 ‘최종 사용자 계정 당’ 동시 재생 수를 제한하는 기능이므로, 정상적인 동작을 위해서는 고유한 사용자 ID를 라이선스 토큰에 필수적으로 설정해야 합니다. DRM 서버에서 최종 사용자를 구분할 수 있도록 고유한 사용자 ID를 토큰 데이터의 user_id 항목에 입력해 주시기 바랍니다.

  • CSL 기능은 V2 이후 버전의 라이선스 정책(Policy) 규격에서만 사용 가능합니다. V1 버전의 라이선스 토큰 규격을 사용 중인 고객사에서 CSL 기능을 사용하려면 토큰의 Policy 규격을 V2로 업데이트해야 합니다.

서비스 요금제 또는 콘텐츠 계약에 따른 최대 동시 재생 수 설정

PallyCon 콘솔에 설정된 최대 동시 재생 수 값은 기본적으로 해당 서비스 사이트의 모든 스트림에 동일하게 적용됩니다. 하지만 다음과 같은 경우에는 서비스 사이트의 스트림 세션마다 서로 다른 설정 값을 적용해야 할 수 있습니다.

  • 서비스 요금제에 따른 설정: 최종 사용자가 구독 중인 서비스 요금제 별로 최대 동시 재생 수를 다르게 설정하기 원하는 경우 (예시: 베이직 요금제 - 최대 2 개, 프리미엄 요금제 - 최대 5 개)
  • 콘텐츠 계약에 따른 설정: 콘텐츠 계약 시 헐리우드 스튜디오와 같은 콘텐츠 소유자 측에서 최대 동시 재생 수를 지정해 요구할 경우, 콘텐츠마다 사용자 계정 당 최대 동시 재생 수를 다르게 설정

라이선스 토큰 규격playback_policy에 새로 추가된 max_stream_per_user 항목을 사용하면 필요에 따라 라이선스 발급 시점에 최대 동시 재생 수를 유연하게 적용할 수 있습니다. 라이선스 토큰에 해당 항목이 적용되어 있는 경우, PallyCon 콘솔에서 설정된 값 대신 토큰의 설정 값이 반영됩니다.

CSL과 키 로테이션 기능 동시 사용 불가

현재 PallyCon DRM 서버의 구현 상 제약으로 인해, 하나의 서비스 사이트에 키 로테이션과 CSL을 함께 적용할 수 없습니다. 라이브 스트림과 VOD 콘텐츠를 모두 서비스하는 고객사라면 아래 두 가지 기능의 중요도에 따라 둘 중 하나만을 선택해 적용하시기 바랍니다.

  • 동시 재생 제한으로 과도한 계정 공유 방지가 우선 -> CSL 기능 사용. 라이브 스트림에 키 로테이션 적용 불가
  • 키 로테이션으로 라이브 스트림에 대한 보안 강화 및 BM 적용이 우선 -> 키 로테이션 기능 사용. CSL 적용 불가

크롬캐스트 또는 에어플레이 지원 관련

서비스 어플리케이션(클라이언트 플레이어)에서 구글 크롬캐스크 또는 애플 에어플레이 기능을 지원하는 경우, CSL 기능 적용 시 다음과 같은 사항을 유의해야 합니다.

아래 명시된 크롬캐스트와 에어플레이 관련 유의 사항은 크롬캐스트 캐스팅 또는 에어플레이 스트리밍 시나리오에 해당되는 것으로, 미러링 시나리오에는 해당 사항이 없습니다. 두 가지 시나리오의 차이점에 대해서는 아래 설명을 참고하시기 바랍니다.

  • 크롬캐스트 캐스팅, 에어플레이 스트리밍: 크롬 캐스트 또는 에어플레이 기기(애플TV)에서 직접 스트림을 전송받아 재생하는 방식
  • 크롬캐스트 미러링, 에어플레이 미러링: 스트림은 미러링을 시작하는 기기(모바일 또는 브라우저)로 계속 전송되며, 해당 화면과 음성을 크롬캐스트 또는 에어플레이 기기로 공유하는 화면 공유 방식

화면 공유 방식인 미러링 기능의 특성 상, DRM 콘텐츠의 미러링 방식 재생 시 영상이 검은 화면으로 표시되거나 미러링이 중단될 수 있습니다. (미러링 시작 기기의 환경에 따라 다름)

CSL과 크롬캐스트

CSL이 적용된 DRM 콘텐츠의 스트리밍 중에 크롬캐스트 기기로 캐스팅하는 경우, 크롬캐스트 기기의 모델(세대)에 따라 최초 재생이 시작된 기기만 동시 재생 수로 카운트되거나 두 기기 모두 카운트될 수 있습니다. 두 기기가 모두 카운트되는 경우 동일 사용자 계정으로 재생 중인 기기가 이미 제한에 도달한 상황이라면 크롬캐스트에서의 재생은 시작할 수 없게 됩니다.

동시 재생 수 제한을 넘지 않은 경우에는 크롬캐스트 기기로의 캐스팅 재생이 가능합니다. (라이선스 리뉴얼 정상 동작함)

CSL과 에어플레이

Widevine DRM 라이선스 리뉴얼 기능이 정상 동작하는 크롬캐스트와 달리, 에어플레이 대상 기기인 애플TV에서는 FairPlay DRM에 대한 라이선스 리뉴얼이 지원되지 않습니다. 이 문제의 해결을 위해 PallyCon 멀티 DRM 라이선스 서버에서는 에어플레이 스트리밍으로 애플TV 기기에서 FairPlay DRM 콘텐츠를 재생할 때는 해당 라이선스에 리뉴얼을 적용하지 않는 예외 처리가 되어 있습니다.

따라서 에어플레이 스트리밍의 경우 최초 재생이 시작된 모바일 또는 웹 플레이어만 동시 재생 수로 카운트되며 애플TV에서의 에어플레이 재생은 카운트에 추가되지 않습니다. 에어플레이가 아닌 애플TV에서 직접 재생을 시작하는 경우에는 해당 기기가 카운트에 반영됩니다.

이전
다음