일반 스트림 동시성

이 문서는 DRM 없이 하트비트 메커니즘을 사용하여 최종 뷰어로 스트림 동시성을 제한하는 방법을 설명합니다.

서문

Generic Stream Concurrency를 사용하면 특정 사용자가 동시에 볼 수 있는 비디오 스트림의 수를 정의할 수 있습니다. 스트림 동시성을 제한하면 자격 증명의 도난 또는 부적절한 공유를 통해 콘텐츠가 도난당하거나 불법적으로 시청되는 것을 방지할 수 있습니다.

이 기능은 재생 제한의 일부이며 대체 솔루션인 DRM과의 스트림 동시성 에 대한 대안입니다.

GSC를 사용하는 경우

Brightcove는 동시성 관리를 위한 두 가지 솔루션을 제공합니다.

아래 표는 상황에 더 적합한 것을 결정하는 데 도움이 되도록 두 가지를 비교한 것입니다.

스트림 동시성 솔루션
일반 스트림 동시성 DRM을 사용한 스트림 동시성
이점:
  • DRM이 필요하지 않음
  • 활성 스트림 세션은 API를 통해 나열될 수 있습니다.
장점
  • 클라이언트 측에서 비활성화할 방법이 없습니다.
  • 갱신 메커니즘은 맞춤형 구현에 대해 투명합니다.
  • 더 안전한
단점
  • 하트비트는 클라이언트 측에서 실행됩니다.
  • 사용자 지정 구현에는 하트비트 메커니즘 통합이 필요합니다.
단점
  • 많은 DRM 라이센스가 필요합니다.
  • 특정 사용자의 모든 활성 세션을 나열할 방법이 없습니다.

작동 원리

하트 비트

하트비트는 전체 재생을 통해 유효한 세션임을 강제하기 위해 특정 사용자에 대한 활성 세션을 주파수 기반으로 요청하는 메커니즘입니다. 하트비트는 Brightcove 웹 플레이어 및 기본 SDK 플레이어에 대해 활성화할 수 있습니다.

하트비트의 빈도는 플레이어가 재생 조건이 여전히 충족되는지 확인하기 위해 중간 스트림 검사를 수행하는 빈도를 정의합니다. 기본적으로 빈도는 1분으로 설정되지만 변경할 수 있습니다.

스트림 차단

최대 동시 스트림 수에 도달하고 뷰어 또는 계정 자격 증명이 있는 사람이 추가 스트림을 열려고 하면 다른 스트리밍 위치로 식별된 해당 사용자의 새 스트림이 차단됩니다.

상관기 식별자

상관자 식별자는 뷰어 스트리밍 위치를 정의하는 데 사용됩니다. 이 식별자의 특징은 다음과 같습니다.

  • 동일한 뷰어의 모든 요청을 연관시킬 수 있을 만큼 구체적이어야 합니다. 상관자가 너무 일반적이면 동일한 뷰어 ID를 가진 여러 뷰어를 함께 묶고 모두 동일한 슬롯으로 그룹화합니다.
  • 동일한 뷰어에 대한 모든 비디오 보기에서 일관성이 있어야 합니다.

"상관자"가 다른 경우 뷰어 ID의 "슬롯"을 채우려고 시도합니다. 즉, 동일한 시청 중에 해당 값이 변경되면 다른 뷰어인 것처럼 처리되어 재생이 방지됩니다.

sid클레임을 사용하여 JWT에서 상관자를 설정합니다.

구현

Brightcove 웹 또는 SDK 플레이어 사용

  1. 하트비트 빈도를 기본값 (1분) 에서 변경하려면지원팀에 문의하십시오 .
  2. 재생 제한을위한 JWT를 생성하십시오.

    다음 클레임이 필요합니다.

    • climit - 동시성 한도 클레임은 동시에 플레이할 수 있는 시청자 또는 스트리밍 수를 나타냅니다.
    • uid - 시청자 식별자는 여러 세션을 상호 연결하여 스트림 동시성을 적용하는 데 사용됩니다.
    • sid - 코렐레이터 식별자는 시청자의 스트리밍 위치를정의합니다.

      예:
      • 크롬 MAC(카드뮴) HTML 5 - 1112223334
      • 애플 아이패드 7세대 10.2(와이파이) - 2223334444
      • 애플 애플 TV 미정 애플 TV - 3334445555
      • Android DefaultWidevineL3Phone Android 전화 - 1112224567
      • Firefox MAC(카드뮴) HTML 5 - 1112226754
      • Google Chromecast 스트리밍 스틱 - 1112346677
  3. JWT용 공개 키를 Brightcove에 등록합니다. 자세한 내용은 인증 API 사용을 참조하세요.
  4. 클라이언트 플레이어에서 일반 스트림 동시성 활성화: 아래 플레이어에서 구현 참조
샘플JSON Web Token (JWT) 클레임
{
// account id: JWT is only valid for this account
"accid":"4590388311111",
// limit of concurrent users
"climit": 3,
// user id
"uid": "108.26.184.3_1634052241",
// correlator identifier
"sid": "Firefox MAC (Cadmium) HTML 5 - 1112346677"
}
}

참고 사항

  • 뷰어의 최대 세션 수를 초과하면 세션이 중지됩니다. 세션이 중지되는 데 하트비트 빈도만큼 오래 걸릴 수 있습니다.
  • 클라이언트 플레이어가 서버에 연결할 수 없으면 세 번 다시 시도합니다. 여전히 연결할 수 없으면 재생이 중지됩니다.

플레이어에서 구현

요구 사항

  • 일반 스트림 동시성에는 Brightcove 웹 플레이어 6.63.2 이상이 필요합니다.
  • 일반 스트림 동시성에는 Brightcove iOS SDK 플레이어 6.10.1 이상이 필요합니다.
  • 일반 스트림 동시성에는 Brightcove Android SDK 플레이어 6.17.2 이상이 필요합니다.

Brightcove 웹 플레이어

브라이트코브 플레이어의 일반 스트림 동시성은video_cloud.stream_concurrency플레이어 구성을 사용하여 활성화할 수 있습니다.

현재 Studio에는 이 기능에 대한 전용 UI가 없으므로 JSON 편집기를 사용해야 합니다. 구성은 다음과 같습니다.

"stream_concurrency" : true
...
  "video_cloud": {
    "stream_concurrency": true,
    "policy_key": "BCpk..."
  },
  "player": {
    "template": {
      "name": "single-video-template",
      "version": "6.63.1"
    }
  },
...

이 키/값 쌍이 JSON에 없거나 값이 false이면 플레이어에 대해 GSC 기능이 활성화되지 않습니다.

런타임 시 JWT 설정

EPA 스트림 동시성 제한 기능과 유사하게 일반 스트림 동시성은 JSON 웹 토큰에 의존합니다.

위와 같이 플레이어가 일반 스트림 동시성에 대해 구성되면 나머지 단계는 런타임 시 플레이어에 JWT를 제공하는 것입니다. 이는 EPA를 사용할 때와 동일한 프로세스입니다.

player.catalog.setBcovAuthToken('');

JWT 토큰을 추가한 후 마지막 단계는 Playback API에서 데이터를 요청하고 플레이어에 로드하는 것입니다. 이 예는 단일 비디오를 가져오는 방법을 보여줍니다.

// Set the authorization token.
  player.catalog.setBcovAuthToken('');
  
  // Initiate a catalog request. API selection will occur each time this
  // is called.
  player.catalog.get({id: '1', type: 'video'}).
    then(function(data) {
  
      // When the request is complete, you must load the returned metadata
      // and sources into the player.
      player.catalog.load(data);
    }).
    catch(function(error) {
      throw new Error(error);
    });

iOS

iOS SDK용 일반 스트림 동시성 기능을 활성화하려면streamConcurrencyEnabled에서 옵션을 활성화해야 합니다playbackController . 원하는 경우 에 대한 값을 보낼 수sid있습니다. sid가 비어 있는 경우 이 값은 헤더로 전송되지 않습니다.

오브젝티브 C

self.playbackController.streamConcurrencyEnabled = YES;
// Optional. Set custom sid
self.playbackController.options ■ (?{ kBCOVAuthHeartbeatPropertyKeySessionld: G'sessionld" };

스위프트

self.playbackController.streamConcurrencyEnabled ■ true
// Optional. Set custom sid
self.playbackController.options = [ kBCOVAuthHeartbeatPropertyKeySessionld: "sessionld" ]

자세한 내용은 iOS용 Brightcove Native Player 참조를 참조하십시오.

Android

플레이어 활동의 onCreate 메소드에서 다음 행을 추가하십시오.

brightcoveVideoView.setStreamConcurrencyEnabled(true);

onCreate메서드에서 이 코드와 함께 이벤트에 대한DID_SET_VIDEO이벤트 리스너를 추가하여 하트비트 헤더를 설정합니다. 여기서는 동영상을 검색하는 데 사용한 것과 동일한 JWT를 사용하며uid클레임 (및 선택적으로 클레임) 을sid포함해야 합니다.

Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put(ConcurrencyClient.HEARTBEAT_VIDEO_HEADER_KEY, video.getId());
requestHeaders.put(ConcurrencyClient.HEARTBEAT_ACCOUNTID_HEADER_KEY, accountId);
requestHeaders.put(BrightcoveTokenAuthorizer.BRIGHTCOVE_AUTHORIZATION_HEADER_KEY, jwtToken);
brightcoveVideoView.setStreamConcurrencyRequestHeaders(requestHeaders);

자세한 내용은 Android용 Native SDK를 사용하는 GSC(Generic Stream Concurrency) 문서를 참조하세요.

API를 통한 구현

이 기능은 Brightcove 웹 플레이어 또는 SDK 플레이어를 사용하지 않고 Concurrency Service API를 통해 구현할 수 있습니다. 자세한 내용은 API 참조를 참조하십시오.

Concurrency Service API의 기본 URL은 다음과 같습니다.

https://edge-gsc.api.brightcove.com

인증 방법은Authorization헤더로 전송된 JWT를 통해 이루어집니다.

Authorization: Bearer code translate="No">{token}

플레이어/앱이 수행해야 하는 기본 논리는 아래 다이어그램에 나와 있습니다.

동시성을 위한 논리
동시성을 위한 논리

API 엔드포인트

세션
이 끝점은 동시성 관리를 위해 하트비트가 있는 새 스트리밍 세션을 만드는 데 사용됩니다.
/api/v1/accounts/{account_id}/sessions

메서드: POST

요청 본문:

{
  "video": "the_video_id"
}
활성 세션
이 끝점을 사용하면 스트리밍 세션을 나열하여 추적할 수 있습니다. 주로 동시성 제한에 도달한 경우 중지할 세션을 결정하는 논리를 구현하는 경우에 유용합니다.
/api/v1/accounts/{account_id}/sessions

메서드: POST

세션 중지
이 끝점을 사용하면 스트리밍 세션을 중지할 수 있습니다. 새 재생 요청이 동시성 제한을 초과할 때 중지할 세션을 결정하는 논리를 구현하는 경우 이 끝점을 사용합니다. 이 끝점은 주로 완료 시 세션을 제거하기 위한 백엔드용입니다.
/api/v1/accounts/{account_id}/sessions

메서드: DELETE