SGAI 시작하기

서버 가이드 광고 삽입 (SGAI)은 클라이언트 기기에서 병합할 준비가 된 광고 모음 매니페스트를 제공합니다. Google Ad Manager 네트워크에서 Pod Serving DAI를 사용 설정한 경우 SGAI를 사용할 수 있습니다. Pod Serving DAI가 사용 설정되어 있지 않으면 계정 관리자에게 문의하세요.

SGAI를 사용하면 광고 메타데이터 및 광고 포드 매니페스트를 검색하는 스트림을 만들 때 포드 게재 API 엔드포인트를 사용합니다.

매니페스트 조작 서버가 있는 경우 원하는 사양에 따라 광고 모음 매니페스트 URL을 생성하고 콘텐츠 스트림에 광고 모음 매니페스트 정보를 전달하는 광고 마커를 삽입할 수 있습니다.

또는 스트림 매니페스트의 광고 마커가 아닌 다른 메커니즘을 사용하여 광고 시점을 예약할 수 있습니다. 이 경우 앱은 스트림, 앱 자체 또는 푸시 알림과의 사용자 상호작용과 같은 다른 이벤트를 수신 대기할 수 있습니다. 이러한 이벤트가 발생하면 앱은 광고 모음 매니페스트 URL을 생성하고 플레이어에게 광고 모음 매니페스트 로드를 시작하도록 지시할 수 있습니다.

기본 요건

계속하기 전에 다음 사항을 확인하세요.

  • Google Ad Manager 네트워크에서 DAI 광고 모음 게재가 사용 설정되어 있습니다.
  • 유형이 광고 모음 게재 매니페스트인 라이브 스트림 이벤트입니다. 이벤트를 만들려면 DAI용 라이브 스트림 설정하기를 참고하세요.

권장사항 따르기

광고 모음 매니페스트 URL을 생성하기 전에 EABN (Early Ad Break Notification) API를 호출하여 각 광고 시점의 예상 시간, 타겟팅 정보, 기타 매개변수를 지정하는 것이 좋습니다.

프로덕션 및 테스트 스트림의 경우, 특히 광고 네트워크에 프로그래매틱 캠페인이 있는 경우 EABN API를 호출합니다. 자세한 내용은 프로그래매틱 다이렉트 기능 및 가이드라인을 참고하세요.

스트림 등록 요청

사용자가 동영상 플레이어 앱에서 콘텐츠 스트림을 시작하면 타겟팅 매개변수를 사용하여 스트림 등록 요청을 실행하여 Ad Manager에서 스트리밍 세션을 만듭니다. 스트림 등록 요청에 관한 자세한 내용은 Method:stream을 참고하세요. 그런 다음 요청에서 응답 데이터를 수신합니다.

다음 예에서는 스트림 등록 요청을 실행합니다.

  • 요청:
authority: dai.google.com
method: POST
path: /ssai/pods/api/v1/network/51636543/custom_asset/hls-podserving-manifest/stream
scheme: https
content-type: application/x-www-form-urlencoded

cust_params=customID%253D1543216789%2526anotherKey%253Dvalue1%252Cvalue2
  • 응답:
{
    "manifest_format": "hls",
    "media_verification_url": "https://dai.google.com/view/p/service/linear/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/loc/TUL/network/51636543/event/TFyZF0IoSpqvCLtLv8JdCw/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/metadata",
    "polling_frequency": 10,
    "session_update_url": "https://dai.google.com/linear/v1/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/session",
    "stream_id": "24fd4e7c-95a0-42be-8874-00625139b9db:TUL"
}
  • 명령줄:
curl \
-H "Host: dai.google.com" \
-H "content-type: application/x-www-form-urlencoded" \
  --data-binary "cust_params=channelID%253D1543216789%2526anotherKey%253Dvalue1%252Cvalue2" \
  --compressed "https://dai.google.com/ssai/pods/api/v1/network/51636543/custom_asset/hls-podserving-manifest/stream"
  • 출력:
{
    "manifest_format": "hls",
    "media_verification_url": "https://dai.google.com/view/p/service/linear/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/loc/TUL/network/51636543/event/TFyZF0IoSpqvCLtLv8JdCw/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/metadata",
    "pod_manifest_url": "https://dai.google.com/linear/pods/v1/hls/event/TFyZF0IoSpqvCLtLv8JdCw/pod/$pod-id$.m3u8?stream_id=24fd4e7c-95a0-42be-8874-00625139b9db%3ATUL",
    "polling_frequency": 10,
    "session_update_url": "https://dai.google.com/linear/v1/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/session",
    "stream_id": "24fd4e7c-95a0-42be-8874-00625139b9db:TUL"
}
  • Fetch API 사용:
const response = await fetch("https://dai.google.com/ssai/pods/api/v1/network/51636543/custom_asset/hls-podserving-manifest/stream", {
  "headers": {
    "content-type": "application/x-www-form-urlencoded",
  },
  "body": "cust_params=channelID%3D1543216789%26anotherKey%3Dvalue1%2Cvalue2",
  "method": "POST",
});

  const stream = await response.json();
  console.log(stream);
  • 콘솔 로그:
{
    "stream_id": "24fd4e7c-95a0-42be-8874-00625139b9db:TUL",
    "media_verification_url": "https://dai.google.com/view/p/service/linear/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/loc/TUL/network/51636543/event/TFyZF0IoSpqvCLtLv8JdCw/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/metadata",
    "session_update_url": "https://dai.google.com/linear/v1/pa/event/TFyZF0IoSpqvCLtLv8JdCw/stream/24fd4e7c-95a0-42be-8874-00625139b9db:TUL/session",
    "polling_frequency": 10,
    "pod_manifest_url": "https://dai.google.com/linear/pods/v1/hls/event/TFyZF0IoSpqvCLtLv8JdCw/pod/$pod-id$.m3u8?stream_id=24fd4e7c-95a0-42be-8874-00625139b9db%3ATUL",
    "manifest_format": "hls"
}

광고 시점 메타데이터 폴링

스트림 등록 요청을 한 후 광고 메타데이터를 폴링합니다. 폴링하려면 등록 단계에서 스트림 응답의 polling_frequence를 사용하여 타이머를 설정하여 광고 metadata를 호출합니다. 설문조사별로 메타데이터가 포함된 광고의 일부 목록이 제공될 수 있습니다.

광고 포드 매니페스트 URL 생성

광고 모음 게재 API의 광고 모음 리소스 URL을 생성합니다. 그런 다음 URL을 동영상 플레이어에 전달하여 광고 모음 로드를 시작합니다.

다음 예는 광고 모음 매니페스트 URL의 구조를 보여줍니다.

https://dai.google.com/linear/pods/v1/hls/network/51636543/custom_asset/pod_serving_hls_manifest_mp4/ad_break_id/ab101.m3u8?stream_id=24fd4e7c-95a0-42be-8874-00625139b9db:TUL&pd=120000

동영상 플레이어 또는 서버 알림에서 가져온 광고 시점 정보를 기반으로 광고 모음 매니페스트 URL 매개변수를 계산할 수 있습니다. 이러한 매개변수의 요구사항은 메서드: 포드 매니페스트를 참고하세요.

광고 포드 매니페스트 재생

클라이언트 동영상 플레이어 앱에서 기본 동영상 플레이어로 콘텐츠 스트림 재생을 시작하고 재생 및 광고 일정을 준수하는 방법에 관한 동영상 플레이어 문서를 따릅니다(해당하는 경우).

광고 모음 매니페스트 URL을 생성하고 서버 측의 매니페스트에 삽입하는 경우 동영상 플레이어의 예정된 광고 시점 이벤트를 관찰하고 각 광고 시점 재생 중에 id3 이벤트를 구독해야 합니다. 클라이언트 측에서 광고 시점 이벤트를 예약하는 경우 생성 시 id3 이벤트를 구독합니다.

노출 및 광고 이벤트 보고

동영상 플레이어가 광고 모음을 재생하고 ID3 시간 메타데이터를 발견하면 동영상 플레이어가 트리거하는 광고 이벤트를 수신하고 이를 처리하여 미디어 인증 핑을 전송합니다.