DAI 라이브 스트림 관리

Google DAI API를 사용하면 IMA SDK 구현이 지원되지 않는 환경에서 Google DAI 지원 스트림을 구현할 수 있습니다. IMA SDK가 지원되는 플랫폼에서는 여전히 IMA를 사용하는 것이 좋습니다.

다음 플랫폼에서 DAI API를 사용하는 것이 좋습니다.

  • 삼성 스마트 TV (Tizen)
  • LG TV
  • HbbTV
  • Xbox (JavaScript 앱)
  • KaiOS

이 API는 IMA DAI SDK에서 제공하는 기본 기능을 지원합니다. 호환성 또는 지원되는 기능에 관한 구체적인 질문이 있는 경우 Google 계정 관리자에게 문의하세요.

라이브 스트림용 DAI API 구현

DAI API는 HLS 및 DASH 프로토콜을 모두 사용하여 선형 (라이브) 스트림을 지원합니다. 이 가이드에 설명된 단계는 두 프로토콜 모두에 적용됩니다.

라이브 스트림용 API를 앱에 통합하려면 다음 단계를 완료하세요.

1. 스트림 요청

DAI API에서 라이브 스트림을 요청하려면 스트림 엔드포인트에 POST 호출을 실행합니다. JSON 응답에는 스트림 매니페스트와 연결된 DAI API 엔드포인트 및 값이 포함됩니다.

요청 본문 예시:

https://dai.google.com/linear/v1/dash/event/0ndl1dJcRmKDUPxTRjvdog/stream

{
  "key1" : "value1",
  "stream_parameter1" : "value2"
}

응답 본문 예시

{
"stream_id":"c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS",
"stream_manifest":"https://dai.google.com/linear/dash/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS/manifest.mpd",
"media_verification_url":"https://dai.google.com/view/p/service/linear/stream/c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS/loc/ATL/network/51636543/event/0ndl1dJcRmKDUPxTRjvdog/media/",
"metadata_url":"https://dai.google.com/linear/v1/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS/metadata",
"session_update_url":"https://dai.google.com/linear/v1/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS/session",
"polling_frequency":10
}

오류 응답

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

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

stream_id
이 값은 반환된 스트림을 식별하는 데 사용할 수 있습니다.
stream_manifest
이 URL은 스트림 재생을 위해 미디어 플레이어에 전달됩니다.
media_verification_url
이 URL은 재생 이벤트를 추적하는 기본 엔드포인트입니다.
metadata_url
이 URL은 예정된 스트림 이벤트에 관한 주기적 정보를 폴링하는 데 사용됩니다.
session_update_url
이 URL은 초기 스트림 요청 중에 전송된 스트림 요청 매개변수를 업데이트하는 데 사용됩니다. 이 요청의 매개변수는 이전 스트림에 설정된 모든 매개변수를 대체합니다.
polling_frequency
DAI API에서 업데이트된 AdBreak 메타데이터를 요청하는 빈도(초)입니다.

2. 새 AdBreak 메타데이터 폴링

메타데이터 URL을 사용하여 폴링 빈도로 새 AdBreak 메타데이터를 폴링하도록 타이머를 설정합니다. 스트림 응답에 지정되지 않은 경우 기본 권장 간격은 10초입니다.

대역폭을 최적화하려면 다음 단계를 따르세요.

  1. metadata_url 엔드포인트에 초기 GET 요청을 수행합니다.
    • delta_token 쿼리 매개변수를 생략합니다. 이 프로세스를 통해 서버는 스트림의 디지털 동영상 녹화 (DVR) 구간에 대한 전체 메타데이터를 반환할 수 있습니다. DVR 창에는 시청자가 되감기하고 재생할 수 있는 방송 기간이 표시됩니다. 응답에는 next_delta_token 객체 필드가 포함됩니다.
  2. 클라이언트 측에 메타데이터를 저장합니다.
  3. 가장 최근 응답에서 반환된 next_delta_token 값을 사용하여 후속 호출을 합니다. 각 응답에는 next_delta_token 값이 포함됩니다. 수신한 최신 값을 항상 전송합니다.
  4. 저장된 메타데이터를 업데이트하여 변경사항을 병합하고 사용되지 않는 광고 시점을 삭제합니다.

델타 토큰을 파싱하거나, 구성하거나, 수정하려고 하지 마세요. 토큰의 형식은 변경될 수 있습니다. 수신된 토큰을 저장하고 다음 요청에서 변경되지 않은 토큰을 다시 전달합니다.

초기 요청 예시

초기 요청은 쿼리 매개변수를 사용하지 않으며 전체 메타데이터를 반환합니다.

https://dai.google.com/linear/v1/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS/metadata

후속 요청 예

각 후속 요청은 이전 응답의 next_delta_token 값을 delta_token 매개변수로 전달합니다. 응답에 다음이 포함됩니다.

  • 광고
  • 광고 시점
  • 서버가 토큰을 발급한 이후 서버에서 추가하거나 업데이트한 태그입니다.
  • 저장된 메타데이터에서 삭제할 광고 시점의 obsolete_ad_break_ids 목록

서버는 변경되지 않은 광고 시점을 생략합니다. 다음 예시에서는 델타 토큰을 사용하여 최근 변경사항만 가져오는 후속 폴링을 보여줍니다.

https://dai.google.com/linear/v1/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS/metadata?delta_token=eyJyYW5nZXMiOlt7InMiOjEsImUiOjJ9XX0

성공하면 다음과 비슷한 출력이 표시됩니다.

{
   "next_delta_token": "eyJyYW5nZXMiOlt7InMiOjEsImUiOjN9XX0",
   "obsolete_ad_break_ids": ["0003069407"],
   "tags":{
      "google_1022389921":{
         "ad":"0003069408_ad1",
         "ad_break_id":"0003069408",
         "type":"start"
      },
      ...
   },
   "ads":{
      "0003069408_ad1":{
         "ad_break_id":"0003069408",
         "position":1,
         "duration":10.01,
         "title":"External - Pod Midroll 1",
         ...
      }
   },
   "ad_breaks":{
      "0003069408":{
         "type":"mid",
         "duration":30,
         "expected_duration":30,
         "ads":3
      }
   }
}

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

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

  1. 미디어 이벤트를 큐에 저장하고 플레이어에 표시되는 경우 각 미디어 ID를 타임스탬프와 함께 저장합니다.
  2. 플레이어의 업데이트마다 또는 설정된 빈도 (500ms 권장)로 이벤트 타임스탬프를 플레이헤드와 비교하여 미디어 이벤트 큐에서 최근 재생된 이벤트를 확인합니다.
  3. 재생된 것으로 확인된 미디어 이벤트의 경우 저장된 광고 시점 태그에서 미디어 ID를 조회하여 유형을 확인합니다. 저장된 태그에는 미디어 ID의 접두사만 포함되므로 정확한 일치는 불가능합니다.
  4. 동영상 플레이어 앱이 메타데이터 URL을 주기적으로 폴링하므로 동영상 플레이어가 스트림에서 ID3 태그를 발견한 시점과 연결된 메타데이터가 제공되는 시점 사이에 지연이 발생할 수 있습니다. 저장된 태그에서 ID3 태그를 찾을 수 없는 경우 태그를 대기열에 유지하고 다음 메타데이터 폴링 후 태그를 다시 처리합니다. 처리가 완료될 때까지 이벤트를 대기열에 유지합니다.
  5. 메타데이터에서 태그를 찾은 후 다음 섹션에 나열된 광고 이벤트 유형과 태그의 type 필드를 비교합니다. 동영상 플레이어가 광고 시점을 재생하는지 추적하려면 type 필드에서 progress 값이 있는 이벤트를 사용하세요. 이러한 이벤트를 미디어 인증 엔드포인트로 전송하지 마세요. 다른 모든 이벤트 유형의 경우 미디어 ID를 미디어 인증 엔드포인트에 추가하고 GET 요청을 보내 재생을 추적합니다.
  6. 큐에서 미디어 이벤트를 삭제합니다.

광고 이벤트 유형

메타데이터 tags 객체의 각 태그에는 다음 이벤트 유형 중 하나가 있습니다.

이벤트 유형 설명
start 광고 시작 시 실행됩니다.
firstquartile 광고의 첫 번째 사분위수 끝에서 실행됩니다.
midpoint 광고의 중간 지점에서 실행됩니다.
thirdquartile 광고의 3번째 사분위수 끝에서 실행됩니다.
complete 광고가 끝날 때 실행됩니다.
progress 광고 시점 중에 주기적으로 실행되어 광고 시점이 재생 중임을 알립니다. 이러한 이벤트를 미디어 인증 엔드포인트로 전송하지 마세요.

요청 예시

https://dai.google.com/view/p/service/linear/stream/c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS/loc/ATL/network/51636543/event/0ndl1dJcRmKDUPxTRjvdog/media/google_1022389921

응답 예

Accepted for asynchronous verification - HTTP/1.1 202 Accepted
Successful empty response - HTTP/1.1 204 No Content
Media verification not found - HTTP/1.1 404 Not Found
Media verification sent by someone else - HTTP/1.1 409 Conflict

스트림 활동 모니터링 도구에서 추적 이벤트를 확인할 수 있습니다.

4. 라이브 스트림 세션 매개변수 업데이트

스트림이 생성된 후 세션 매개변수를 조정할 수 있습니다. 이렇게 하려면 세션 업데이트 URL에 요청을 전송합니다.

요청 본문 예시:

https://dai.google.com/linear/v1/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS/session

{
  key1 : "value1",
  stream_parameter1 : "value2"
}

응답 본문 예시

Successful response would be to look for - HTTP/1.1 200

제한사항

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

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

권장사항

라이브 스트림 색인의 메타데이터 엔드포인트는 해당 ID3 태그의 접두사를 기반으로 합니다. 이는 모든 확인 노드를 즉시 핑하는 데 메타데이터 엔드포인트를 사용하지 못하도록 설계된 것입니다.

추가 리소스