Android에서 IMA DAI SDK 사용

Google Cloud Video Stitcher API에 등록된 VOD 스트림 재생

이 가이드에서는 Android용 IMA DAI SDK를 사용하여 Google Cloud VOD 스트림 세션을 요청하고 재생하는 방법을 설명합니다.

이 가이드에서는 IMA DAI용 시작 가이드의 기본 예시를 설명합니다.

다른 플랫폼과 통합하거나 IMA 클라이언트 측 SDK를 사용하는 방법에 대한 자세한 내용은 양방향 미디어 광고 SDK를 참조하세요.

Google Cloud 프로젝트 설정

IMA SDK에서 사용할 다음 변수를 입력합니다.

위치
VOD 구성이 생성된 Google Cloud 리전: LOCATION
프로젝트 번호
Video Stitcher API를 사용하는 Google Cloud 프로젝트 번호: PROJECT_NUMBER
OAuth 토큰

Video Stitcher 사용자 역할이 포함된 서비스 계정의 단기 OAuth 토큰:

OAUTH_TOKEN

단기 OAuth 토큰 만들기에 대해 자세히 알아보세요. OAuth 토큰은 만료되지 않은 한 여러 요청에서 재사용될 수 있습니다.

네트워크 코드

광고 요청에 사용되는 Ad Manager 네트워크 코드: NETWORK_CODE

VOD 구성 ID

VOD 스트림의 VOD 구성 ID입니다. VOD_CONFIG_ID

클라우드 병합으로 VOD 구성 만들기 가이드에서 VOD 구성 ID 만들기에 대해 자세히 알아보세요.

기본 예시 설정

IMA Android DAI GitHub 출시 페이지로 이동하여 기본 예시를 다운로드합니다. 이 예시는 테스트 목적으로 Android 스튜디오에서 열 수 있는 Android 앱입니다.

Cloud 이외의 Video Stitcher VOD 스트림으로 테스트하려면 SampleAdsWrapper.java에서 CONTENT_TYPE 상수를 ContentType.VOD_HLS 또는 ContentType.VOD_DASH로 설정하여 스트림의 적절한 CMS ID 및 동영상 ID를 로드합니다. 그런 다음 SampleVideoPlayer.java에서 currentlyPlayingStreamTypeCONTENT_TYPE_HLS 또는 CONTENT_TYPE_DASH로 설정하여 선택한 스트림 유형의 메타데이터를 올바르게 처리합니다.

모두 제대로 작동하는 경우 동영상 플레이어에서 재생 버튼을 클릭하면 프리롤 광고 시점과 함께 단편 영화 'Tears of Steel'이 시작됩니다.

VOD 스트림 요청

샘플 스트림을 광고가 병합된 VOD 스트림으로 바꾸려면 sdkFactory.createVideoStitcherVodStreamRequest()를 사용하여 Google Ad Manager로 광고 세션을 만듭니다. Google Ad Manager UI를 사용하면 모니터링 및 디버깅용으로 생성된 DAI 세션을 찾을 수 있습니다.

sdkFactory.createVideoStitcherVodStreamRequest()는 IMA DAI SDK v3.30.0 이상에서 사용할 수 있습니다.

vodConfigId 매개변수와 함께 sdkFactory.createVideoStitcherVodStreamRequest()를 사용하려면 IMA DAI SDK 버전 3.33.0 이상이 필요합니다.

기존 샘플에는 VOD 스트림이나 실시간 스트림을 요청할 수 있는 조건문이 있습니다. Google Cloud Video Stitcher API를 사용하려면 sdkFactory.createVideoStitcherVodStreamRequest()를 사용하여 만든 StreamRequest를 반환하는 새 경로를 추가해야 합니다.

예를 들면 다음과 같습니다.

videoplayerapp/SampleAdsWrapper.java

...
private enum ContentType {
  LIVE_HLS,
  LIVE_DASH,
// Add a VOD HLS Google Cloud type. DASH streams are also supported.
  VOD_HLS_GOOGLE_CLOUD,
  VOD_DASH_GOOGLE_CLOUD,
  VOD_HLS,
  VOD_DASH,
}

// Set CONTENT_TYPE to the associated enum for the
// stream type you would like to test.
private static final ContentType CONTENT_TYPE =
    ContentType.VOD_HLS_GOOGLE_CLOUD;
...

@Nullable
  private StreamRequest buildStreamRequest() {
    StreamRequest request;
    switch (CONTENT_TYPE) {
      ...
      case VOD_HLS_GOOGLE_CLOUD:
      case VOD_DASH_GOOGLE_CLOUD:
        // VOD HLS or DASH stream generated by the
        // Google Cloud Video Stitcher API.
        request = sdkFactory.createVideoStitcherVodStreamRequest(
          "NETWORK_CODE",
          "LOCATION",
          "PROJECT_NUMBER",
          "OAUTH_TOKEN",
          "VOD_CONFIG_ID"
        );
        if (CONTENT_TYPE == ContentType.VOD_HLS_GOOGLE_CLOUD) {
          request.setFormat(StreamFormat.HLS);
        } else {
          request.setFormat(StreamFormat.DASH);
        }
        return request;
    }
    // Content type not selected.
    return null;
  }
  ...

앱을 새로고침하여 커스텀 VOD 스트림을 요청하고 재생합니다.

(선택사항) 스트리밍 세션 옵션 추가

StreamRequest.setVideoStitcherSessionOptions()를 사용하여 기본 Cloud Video Stitcher API 구성을 재정의하는 세션 옵션을 추가해 스트림 요청을 맞춤설정합니다. 인식할 수 없는 옵션을 제공하면 Cloud Video Stitcher API에서 HTTP 400 오류로 응답합니다. 도움이 필요하면 문제 해결 가이드를 참조하세요.

예를 들어 다음 코드 스니펫으로 매니페스트 옵션을 재정의할 수 있으며 이 옵션에서는 가장 낮은 비트 전송률에서 가장 높은 비트 전송률 순으로 변환되는 스트림 매니페스트 2개를 요청합니다.

public void requestAndPlayAds() {
  adsLoader.addAdErrorListener(this);
  adsLoader.addAdsLoadedListener(this);
  StreamRequest streamRequest = buildStreamRequest();

  // The following session options are examples. Use session options
  // that are compatible with your video stream.
  Map<String, Object> sessionOptions = Map.of(
    "manifestOptions", Map.of(
      "includeRenditions", List.of(
        Map.of(
          "bitrateBps", 3000, "codecs",
          "hvc1.1.4.L126.B0, mp4a.40.2"),
        Map.of(
          "bitrateBps", 2000,
          "codecs", "avc1.64001f, mp4a.40.2")
      ),
      "bitrateOrder", "ascending"
    )
  );

  /* sessionOptions JSON structure.
   * {
   *  "manifestOptions": {
   *    "includeRenditions": [
   *      {"bitrateBps": 3000, "codecs": "hvc1.1.4.L126.B0, mp4a.40.2"},
   *      {"bitrateBps": 2000, "codecs": "avc1.64001f, mp4a.40.2"},
   *    ],
   *    "bitrateOrder": "ascending"
   *  }
   * };
   */

  streamRequest.setVideoStitcherSessionOptions(sessionOptions);
  adsLoader.requestStream(streamRequest);
}

삭제

이제 Google Cloud Video Stitcher API를 사용하여 VOD 스트림을 성공적으로 호스팅하고 Android용 IMA DAI SDK를 사용하여 요청했으므로 모든 제공 리소스를 삭제해야 합니다.

VOD 삭제 가이드에 따라 불필요한 리소스와 애셋을 삭제합니다.