커스텀 통합 사용

시작하기 전에

이 가이드에서는 IMA DAI SDK가 없는 경우의 재생 안내만 다룹니다.

사전에 Google Ad Manager(GAM)와 라이브 스트림 통합 단계를 완료했는지 확인합니다.

원하는 플랫폼에서 IMA SDK를 사용할 수 없으면 애플리케이션에서 필요한 API를 호출하고 광고 노출 자체를 트리거하도록 해야 합니다.

이렇게 하려면 다음 정보가 필요합니다.

위치 The 라이브 구성이 생성된 Google Cloud 리전:
LOCATION
프로젝트 번호 Video Stitcher API를 사용하는 Google Cloud 프로젝트의 프로젝트 번호:
PROJECT_NUMBER
OAuth 토큰 Video Stitcher 사용자 역할이 포함된 서비스 계정의 단기 OAuth 토큰:
OAUTH_TOKEN

단기 OAuth 토큰 만들기에 대해 자세히 알아보세요.
네트워크 코드 광고 요청에 사용되는 Ad Manager 네트워크 코드:
NETWORK_CODE
라이브 구성 ID 라이브 스트림 이벤트를 만들 때 지정한 라이브 구성 ID:
LIVE_CONFIG_ID
커스텀 애셋 키 Video Stitcher API를 사용하여 라이브 스트림 이벤트 구성을 만드는 프로세스에서 생성된 Ad Manager 커스텀 애셋 키:
CUSTOM_ASSET_KEY

Ad Manager에 스트림 등록 요청 보내기

스트림 등록 엔드포인트에 POST 요청을 보냅니다. 그러면 동영상 병합 API로 전송할 스트림 ID가 포함된 JSON 응답이 수신됩니다.

API 엔드포인트

POST: /ssai/pods/api/v1/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream
Host: dai.google.com
Content-Type: application/x-www-form-urlencoded

경로 매개변수

NETWORK_CODE Google Ad Manager 360 네트워크 코드:
NETWORK_CODE
CUSTOM_ASSET_KEY Google Ad Manager에서 이 이벤트와 연결된 커스텀 식별자:
CUSTOM_ASSET_KEY

양식으로 인코딩된 본문 매개변수

양식으로 인코딩된 타겟팅 매개변수의 선택적 집합입니다.

응답 JSON

media_verification_url 재생 추적 이벤트를 핑하는 기준 URL입니다. 이 기준 URL에 광고 이벤트 ID를 추가하면 완전한 미디어 인증 URL이 구성됩니다.
MEDIA_VERIFICATION_URL
metadata_url 광고 모음 메타데이터를 요청하는 URL입니다.
METADATA_URL
polling_frequency `metadata_url`을 폴링할 권장 빈도(밀리초)입니다.
POLLING_FREQUENCY
stream_id 현재 스트림 세션을 식별하는 데 사용되는 문자열입니다.
STREAM_ID
valid_for 현재 스트림 세션이 만료될 때까지 남은 시간입니다(dhms(일, 시간, 분, 초) 형식). 예를 들어 2h0m0.000s는 2시간 기간을 나타냅니다.
valid_until 현재 스트림 세션이 만료되는 시간으로, yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm 형식의 ISO 8601 날짜/시간 문자열입니다.

요청 예시(cURL)

curl -X POST \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "cust_params=\"section%3Dsports%26page%3Dgolf%2Ctennis\"" \
  https://dai.google.com/ssai/pods/api/v1/network/51636543/custom_asset/ext-doc-ps-redirect-hls/stream

응답 예시

{
  "stream_id":"9fe8fe4f-f12e-4fed-b509-0ca269bb1668:TUL",
  "media_verification_url":"https://dai.google.com/.../media/",
  "metadata_url":"https://dai.google.com/.../metadata",
  "session_update_url":"https://dai.google.com/.../session",
  "polling_frequency":10
}

오류가 발생하면 JSON 응답 본문 없이 표준 HTTP 오류 코드가 반환됩니다.

JSON 응답을 파싱하고 관련 값을 저장합니다.

세션 재생 URI 생성

Video Stitcher API의 /livesessions 엔드포인트에 POST 요청을 보내 새 라이브 세션을 만듭니다. 그러면 동영상 플레이어에 로드할 스트림 매니페스트가 포함된 JSON 응답이 수신됩니다.

API 엔드포인트

POST: /v1/projects/PROJECT_NUMBER/locations/LOCATION/liveSessions
Host: videostitcher.googleapis.com
Authorization: Bearer OAUTH_TOKEN
Content-Type: application/json

경로 매개변수

PROJECT_NUMBER Video Stitcher API를 사용하는 Google Cloud 프로젝트의 프로젝트 번호:
PROJECT_NUMBER
LOCATION The 라이브 구성이 생성된 Google Cloud 리전:
LOCATION

승인 헤더 매개변수

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

JSON으로 인코딩된 본문 매개변수

liveConfig A 프로젝트 번호, 위치, 라이브 구성 ID가 포함된 다음 형식의 문자열:
projects/PROJECT_NUMBER/locations/LOCATION/liveConfigs/LIVE_CONFIG_ID
adTracking 클라이언트 측 추적을 사용 설정하려면 "CLIENT"로 설정합니다.
gamSettings 스트림 ID가 포함된 다음 형식의 객체:
{"streamId":"STREAM_ID"}

응답 JSON

name 세션 ID가 포함된 라이브 세션의 이름입니다.
playUri 재생할 동영상 플레이어에 로드할 병합된 스트림 매니페스트 URI입니다.
PLAY_URI
liveConfig 요청 본문에서 API에 전송된 문자열과 동일한 liveConfig 문자열입니다.
gamSettings 요청 본문에서 API에 전송된 객체와 동일한 gamSettings 객체입니다.

요청 예시(cURL)

curl -X POST \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer OAUTH_TOKEN" \
     -d '@request.json' \
  https://videostitcher.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/liveSessions

request.json

{
  "liveConfig": "projects/PROJECT_NUMBER/locations/LOCATION/liveConfigs/LIVE_CONFIG_ID",
  "adTracking": "CLIENT",
  "gamSettings": {
    "streamId": "STREAM_ID"
  }
}

응답 예시

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/liveSessions/SESSION_ID",
  "playUri": PLAY_URI,
  "liveConfig": "projects/PROJECT_NUMBER/locations/LOCATION/liveConfigs/LIVE_CONFIG_ID"
  "gamSettings": {
    "streamId": STREAM_ID
  }
}

응답이 수신된 후에 응답 객체의 playUri 필드에서 세션 재생 URI를 참조하여 광고 병합 라이브 스트림을 재생할 수 있습니다.

Video Stitcher API는 요청마다 고유한 세션 ID를 생성하며 응답 객체의 name 필드 마지막 섹션에서 이 ID를 검색할 수 있습니다.

유휴 상태 세션은 5분 후에 만료됩니다. 일정 기간 내에 매니페스트 가져오기가 수행되지 않으면 세션은 유휴 상태로 간주됩니다.

새 AdBreak 메타데이터 폴링

애플리케이션은 각 광고 시점의 메타데이터를 검색할 책임이 있으므로 트리거해야 하는 노출을 파악합니다. 이를 위해 DAI API metadata_url에서 새로운 광고 정보를 정기적으로 폴링하는 타이머를 설정합니다. 폴링 간격은 스트림 등록 응답의 polling_frequency 필드에 지정됩니다.

그러면 다음 매개변수가 포함된 JSON 객체가 수신됩니다.

tags 스트림 내에서 발생할 광고 미디어 이벤트를 설명하는 키-값 쌍 세트입니다. 각 키는 스트림의 ID3 메타데이터에 표시되는 광고 미디어 ID의 첫 17자나 `progress` 이벤트의 경우 전체 광고 미디어 ID로 구성됩니다. 각 값은 다음 속성을 가진 객체입니다.
  • ad: 광고 미디어 이벤트가 포함된 광고의 ID입니다.
  • ad_break_id: 광고 미디어 이벤트가 포함된 광고 시점의 ID입니다.
  • type: 광고 미디어 이벤트 유형입니다. 값은 다음 중 하나입니다.
    • start - 광고가 시작되었습니다.
    • firstquartile - 광고가 25% 완료되었습니다.
    • midpoint - 광고가 50% 완료되었습니다.
    • thirdquartile - 광고가 75% 완료되었습니다.
    • complete - 광고가 종료되었습니다.
    • progress - 광고가 재생되는 동안 1초마다 실행됩니다.
ads 스트림 내에 표시될 광고를 설명하는 키-값 쌍 세트입니다. 각 키는 광고 ID입니다. 각 값은 다음 속성을 가진 객체입니다.
  • ad_break_id: 광고 미디어 이벤트가 포함된 광고 시점의 ID입니다.
  • position: 광고 시점 내 광고의 위치입니다. 광고 시점의 첫 번째 광고는 1 위치입니다.
  • duration: 광고 길이(부동 소수점 초)입니다.
  • title: VAST에 정의된 광고의 제목입니다.
  • description: VAST에 정의된 광고의 설명입니다.
  • ad_system: VAST에 정의된 광고 시스템입니다.
  • ad_system: VAST에 정의된 광고 ID입니다.
  • ad_system: VAST에 정의된 광고 소재 ID입니다.
  • clickthrough_url: 사용자가 광고와 상호작용할 때 열리는 URL입니다.
  • universal_ad_id: VAST에 정의된 범용 광고 ID를 나타내는 객체입니다.
ad_breaks 스트림 내에서 발생할 광고 시점을 설명하는 키-값 쌍 세트입니다. 각 키는 광고 시점 ID입니다. 각 값은 다음 속성을 가진 객체입니다.
  • type: 광고 시점 유형입니다. 값은 다음 중 하나입니다.
    • pre: 프리롤 광고를 나타냅니다.
    • mid: 미드롤 광고를 나타냅니다.
    • post: 포스트롤 광고를 나타냅니다.
  • duration: 광고 시점 길이(부동 소수점 초)입니다.
  • expected_duration: 광고 시점의 예상 기간(부동 소수점 초)입니다.
  • ads: 광고 시점에 포함된 광고 수입니다.

각 폴링 후에 이러한 값을 저장하여 동영상 스트림 내에서 시간 표시 메타데이터 이벤트를 연결합니다.

요청 예시(cURL)

curl https://dai.google.com/.../metadata/

응답 예시

{
   "tags":{
      "google_0492266569":{
         "ad":"0000229836_ad1",
         "ad_break_id":"0000229836",
         "type":"firstquartile"
      },
      "google_1560331148":{
         "ad":"0000229836_ad1",
         "ad_break_id":"0000229836",
         "type":"thirdquartile"
      },
      "google_1877686714378797835":{
         "ad":"0000229836_slate",
         "ad_break_id":"0000229836",
         "type":"progress"
      },
      "google_1vRyQBYPw_7Gg3MrZ6S5EjmV9aLje-YpW8QHed1DSlU":{
         "ad":"0000229835_ad1",
         "ad_break_id":"0000229835",
         "type":"progress"
      },
      "google_2032765498":{
         "ad":"0000229835_ad1",
         "ad_break_id":"0000229835",
         "type":"midpoint"
      },
      ...
      "google_5646900623":{
         "ad":"0000229837_ad1",
         "ad_break_id":"0000229837",
         "type":"complete"
      }
   },
   "ads":{
      "0000229834_ad1":{
         "ad_break_id":"0000229834",
         "position":1,
         "duration":15.01,
         "title":"truman-e2e-creativeset4",
         "description":"truman-e2e-creativeset4 ad",
         "ad_system":"GDFP",
         "ad_id":"39066884",
         "creative_id":"58092079124",
         "clickthrough_url":"https://pubads.g.doubleclick.net/...",
         "universal_ad_id":{
            "id_value":"58092079124",
            "id_registry":"GDFP"
         }
      },
      "0000229834_slate":{
         "ad_break_id":"0000229834",
         "position":-1,
         "duration":14.974977777,
         "slate":true
      },
      ...
   },
   "ad_breaks":{
      "0000229834":{
         "type":"mid",
         "duration":15.01,
         "expected_duration":29.984977776999997,
         "ads":1
      },
      ...
   }
}

ID3 이벤트 리슨 및 재생 이벤트 추적

동영상 스트림에서 특정 이벤트가 발생했는지 확인하려면 다음 단계를 수행하여 ID3 이벤트를 처리합니다.

  1. 미디어 이벤트를 큐에 저장하고 플레이어에 표시되는 경우 각 미디어 ID를 타임스탬프와 함께 저장합니다.
  2. 플레이어의 업데이트마다 또는 설정된 빈도(500ms 권장)로 이벤트 타임스탬프를 플레이헤드와 비교하여 미디어 이벤트 큐에서 최근 재생된 이벤트를 확인합니다.
  3. 재생된 것으로 확인된 미디어 이벤트의 경우 저장된 광고 시점 태그에서 미디어 ID를 조회하여 유형을 확인합니다. 광고 시점 태그 객체에는 google_ 프리픽스 뒤의 첫 10자리로 제한된 미디어 ID의 잘린 버전만 포함되므로 ID3 미디어 확인 ID와 태그 객체의 키가 직접 일치하지 않습니다. 이는 ID3 이벤트가 도착하기 전에 이벤트 확인 핑이 전송되는 것을 방지하기 위함입니다. 광고 이벤트의 전체 미디어 인증 URL을 생성하려면 전체 광고 이벤트 ID를 스트림 생성 응답의 media_verification_url 값에 추가합니다.
  4. 'progress' 이벤트를 사용하여 사용자가 광고 시점 내에 있는지 추적합니다. HTTP 오류 코드를 방지하려면 이러한 이벤트를 미디어 인증 엔드포인트로 전송하지 마세요. 다른 이벤트 유형의 경우 미디어 ID를 미디어 인증 URL에 추가하고 GET 요청을 보내 재생을 추적합니다.
  5. 큐에서 미디어 이벤트를 삭제합니다.

API 엔드포인트

GET: MEDIA_VERIFICATION_URLAD_MEDIA_ID
Host: dai.google.com

경로 매개변수

MEDIA_VERIFICATION_URL 스트림 등록 엔드포인트에서 반환한 media_verification_url 필드 값:
MEDIA_VERIFICATION_URL
AD_MEDIA_ID 스트림의 ID3 메타데이터에 표시되는 전체 광고 미디어 ID:
AD_MEDIA_ID

예상 반환 값

HTTP/1.1 204 No Content 성공적인 빈 응답입니다.
HTTP/1.1 404 Not Found 미디어 확인 ID가 인식되지 않습니다.
HTTP/1.1 409 Conflict 미디어 확인 ID가 이미 전송되었습니다.

요청 예시(cURL)

curl MEDIA_VERIFICATION_URLAD_MEDIA_ID

응답 예시

HTTP/1.1 204 No Content

제한사항

WebView 내에서 API를 사용하면 타겟팅과 관련하여 다음 제한사항이 적용됩니다.

  • UserAgent: 사용자 에이전트 매개변수가 기본 플랫폼 대신 브라우저별 값으로 전달됩니다.
  • rdid, idtype, is_lat: 기기 ID가 올바르게 전달되지 않아 다음 기능 작동이 제한됩니다.
    • 최대 게재빈도 설정
    • 순차적 광고 로테이션
    • 잠재고객 분류 및 타겟팅