

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 광고 추적 데이터 보고
<a name="ad-reporting"></a>

MediaTailor는 시청자가 시청한 광고의 양을 추적하고 보고하는 두 가지 옵션을 제공합니다. 서버 측 광고 보고 접근 방식에서 MediaTailor는 광고를 추적하고 비컨(추적 신호)을 광고 서버로 직접 전송합니다. 또는 클라이언트 측 추적 접근 방식에서 클라이언트 플레이어(사용자의 디바이스)는 광고를 추적하고 비컨을 광고 서버로 전송합니다. 재생 세션에 사용되는 광고 보고 유형은 플레이어가 MediaTailor에서 세션을 시작하기 위해 수행하는 특정 요청에 따라 달라집니다.

동적 변수를 사용하여 세션 및 플레이어 데이터를 광고 서버에 전달하는 방법에 대한 자세한 내용은 섹션을 참조하세요[ADS 요청에 대한 MediaTailor 동적 광고 변수](variables.md). 세션 초기화 파라미터에 대한 자세한 내용은 섹션을 참조하세요[MediaTailor 매니페스트 쿼리 파라미터](manifest-query-parameters.md).

**Topics**
+ [MediaTailor 서버 측 광고 추적 및 보고](ad-reporting-server-side.md)
+ [클라이언트 측 광고 추적](ad-reporting-client-side.md)

# MediaTailor 서버 측 광고 추적 및 보고
<a name="ad-reporting-server-side"></a>

AWS Elemental MediaTailor 는 포괄적인 광고 추적 및 측정을 위해 기본적으로 서버 측 보고를 사용합니다. 서버 측 보고인 경우, 플레이어가 매니페스트에 광고 URL을 요청할 때 서비스는 즉시 광고 추적 URL에 광고 조회량을 보고합니다. 플레이어가 MediaTailor로 재생 세션을 초기화한 후에는 서버 측 보고를 수행하기 위해 사용자 또는 플레이어의 추가 입력이 필요하지 않습니다. 각 광고가 재생되면 MediaTailor는 광고 서버에 비컨을 전송하여 광고가 얼마나 많이 보였는지 보고합니다. MediaTailor는 첫 번째 사분위수, 중간점, 세 번째 사분위수, 광고 완료 등 광고 시작 및 사분위수의 광고 진행에 대한 비컨을 전송합니다.

**서버 측 광고 보고를 수행하려면**
+ 플레이어에서 프로토콜에 따라 다음 형식 중 하나의 요청을 사용하여 새 MediaTailor 재생 세션을 초기화합니다.
  + 예: HLS 형식

    ```
    GET <mediatailorURL>/v1/master/<hashed-account-id>/<origin-id>/<asset-id>?ads.<key-value-pairs-for-ads>&<key-value-pairs-for-origin-server>
    ```
  + 예: DASH 형식

    ```
    GET <mediatailorURL>/v1/dash/<hashed-account-id>/<origin-id>/<asset-id>?ads.<key-value-pairs-for-ads>&<key-value-pairs-for-origin-server>
    ```

  키-값 페어는 광고 추적을 위한 동적 타겟팅 파라미터입니다. 요청에 파라미터를 추가하는 방법에 대한 자세한 내용은 [ADS 요청에 대한 MediaTailor 동적 광고 변수](variables.md) 단원을 참조하십시오.

AWS Elemental MediaTailor 는 매니페스트 URL을 사용하여 요청에 응답합니다. 매니페스트에는 미디어 매니페스트용 URL이 포함됩니다. 미디어 매니페스트에는 광고 세그먼트 요청 링크가 포함되어 있습니다.

**참고**  
MediaTailor가 추적 URL에서 이중 슬래시(//)를 발견하면 슬래시를 1(/)로 축소합니다.

플레이어가 광고 세그먼트 URL(`/v1/segment` 경로)에 재생을 요청하면 AWS Elemental MediaTailor 은 광고 추적 URL을 통해 광고 서버에 적절한 비콘을 전송합니다. 동시에 서비스는 실제 `*.ts` 광고 세그먼트로 리디렉션을 발행합니다. 광고 세그먼트는 MediaTailor가 트랜스코딩된 광고를 저장하는 Amazon CloudFront 배포 또는 광고를 캐싱한 콘텐츠 전송 네트워크(CDN)에 있습니다.

다음 섹션에서는 MediaTailor의 서버 측 광고 추적 작업에 대한 자세한 정보를 제공합니다.

**Topics**
+ [SGAI 서버 측 추적](ad-reporting-server-side-sgai.md)
+ [비컨 용어집](ad-reporting-server-side-beacon-glossary.md)
+ [타이밍 및 캐싱 동작](ad-reporting-server-side-timing-behavior.md)
+ [추적 기능](ad-reporting-server-side-features.md)

# 서버 가이드 광고 삽입(SGAI)을 사용한 서버 측 추적
<a name="ad-reporting-server-side-sgai"></a>

서버 가이드 광고 삽입(SGAI)을 사용하는 경우 서버 측 추적은 위에서 설명한 연결 모드 접근 방식과 다른 *세션 없는 비컨 메커니즘*을 사용합니다. MediaTailor는 광고 세그먼트를 콘텐츠 매니페스트(`/v1/segment`요청 추적)에 스티칭하는 대신 SGAI는 광고 URIs.

## 세션 없는 서버 측 비컨 작동 방식
<a name="ad-reporting-server-side-sgai-how-it-works"></a>

다음 단계에서는 SGAI 세션에서 서버 측 비컨이 작동하는 방식을 설명합니다.

1. **세션 초기화**: 플레이어가를 사용하여 HLS 다변량 재생 목록을 요청합니다`aws.insertionMode=GUIDED`. 서버 측 보고가 기본값입니다(`aws.reportingMode`파라미터 필요 없음). 연결 모드와 달리 세션 초기화 응답에는가 포함되지 *않습니다*`trackingUrl`.

1. **캐시 가능 매니페스트**: MediaTailor는 MediaTailor 중간 자산 목록 엔드포인트를 가리키는 `CLASS="com.apple.hls.interstitial"` 및 `X-ASSET-LIST` 속성이 있는 `EXT-X-DATERANGE` 태그가 포함된 캐시 가능 매니페스트를 반환합니다.

1. **비컨 메타데이터가 포함된 자산 목록**: 플레이어가 광고 시간을 발견하면 자산 목록을 가져옵니다. MediaTailor는 각 광고 URI에 암호화된 비컨 메타데이터가 포함된 JSON 응답을 반환합니다.

   ```
   {
     "ASSETS": [
       {
         "DURATION": 30.0,
         "URI": "https://cdn.example.com/ad/master.m3u8?awsBeaconData=<encrypted>&awsBeaconDomain=<MediaTailor-endpoint>&awsConfigurationName=<config-name>"
       }
     ]
   }
   ```

   서버 측 보고가 활성 상태이면 응답에 `TRACKING` 섹션이 포함되지 *않습니다*. 광고 URIs는 모든 비컨 데이터를 전달합니다.

1. **HLS 변수 대체**: 플레이어가 광고 다변량 재생 목록을 가져옵니다. 광고 매니페스트는 `#EXT-X-DEFINE:QUERYPARAM` 지시문을 사용하여 HLS 변수 대체를 통해 URI 쿼리 문자열의 비컨 파라미터를 세그먼트 URLs로 전달합니다.

   ```
   #EXTM3U
   #EXT-X-DEFINE:QUERYPARAM="awsBeaconData"
   #EXT-X-DEFINE:QUERYPARAM="awsBeaconDomain"
   #EXT-X-DEFINE:QUERYPARAM="awsConfigurationName"
   #EXTINF:5.0,
   {$awsBeaconDomain}/segment/hash/{$awsConfigurationName}/{$awsBeaconData}/0/0?aws.segmentRelativePath=asset_00001.ts
   ```

   플레이어는 광고 매니페스트 URI 쿼리 문자열의 값을 사용하여 `{$awsBeaconData}``{$awsBeaconDomain}`, 및 `{$awsConfigurationName}` 변수를 확인한 다음 MediaTailor를 통해 각 광고 세그먼트를 요청합니다.

1. **세그먼트 요청 시 비컨 실행**: 플레이어가 각 광고 세그먼트를 요청하면 요청은 MediaTailor를 통해 라우팅됩니다. 서비스는 비컨 데이터를 복호화하고, 광고 내 세그먼트의 위치(억제, 1사분위수, 중간점, 3사분위수 또는 완료)를 결정하고, 광고 서버에 적절한 VAST 추적 비컨을 실행합니다. 그런 다음 MediaTailor는 플레이어를 실제 광고 콘텐츠 세그먼트로 리디렉션합니다.

## SGAI 서버 측 비컨에 대한 플레이어 요구 사항
<a name="ad-reporting-server-side-sgai-requirements"></a>

SGAI에서 서버 측 비컨을 사용하려면 플레이어가 다음 요구 사항을 충족해야 합니다.
+ HLS 버전 11 이상
+ HLS Interstitials `EXT-X-DATERANGE` `CLASS` 속성 지원
+ `#EXT-X-DEFINE:QUERYPARAM` 변수 대체 지원(RFC 8216bis). 플레이어는 쿼리 파라미터 값을 세그먼트 URLs로 대체하기 전에 백분율 디코딩해야 합니다.

**참고**  
SGAI 서버 측 비컨은 현재 HLS에서만 지원됩니다. DASH는 아직 SGAI 서버 측 비컨에 대해 지원되지 않습니다.

## 스티칭 모드 서버 측 추적과의 비교
<a name="ad-reporting-server-side-sgai-comparison"></a>

다음 표에는 서버 측 추적이 스티칭 광고 삽입과 서버 가이드 광고 삽입 간에 어떻게 다른지 요약되어 있습니다.


| 속성 | Stitched(SSAI) | 서버 가이드(SGAI) | 
| --- | --- | --- | 
| 매니페스트 캐시 가능성 | 세션당, 캐시할 수 없음 | 캐시 가능, 최종 사용자 간에 공유 | 
| 광고 세그먼트 라우팅 | 세션 ID를 /v1/segment/ 사용하여 | 암호화된 비컨 데이터 BLOB을 /v1/segment/ 사용하여 | 
| 비컨의 세션 상태 | MediaTailor에 세션당 저장됨 | 세션 없음 - 모든 상태가 암호화된 awsBeaconData 파라미터로 전달됩니다. | 
| 세션 시작 시 URL 추적 | 세션 초기화 응답에 반환됨 | 제공되지 않음 - 비컨 데이터가 각 자산 목록 응답의 광고 URIs에 포함됩니다. | 
| DASH 지원 | 지원됨 | 아직 지원되지 않음 | 

**참고**  
라이브 SGAI 세션의 경우를 사용하여 매니페스트 기반 광고 미리 가져오기를 활성화할 수 있습니다`aws.guidedPrefetchMode=MANIFEST`. 이는 연결된 (SSAI) 세션과 함께 사용되는 일정 기반 미리 가져오기 API와는 별개입니다. 자세한 내용은 [매니페스트 하트비트를 사용한 안내 미리 가져오기](sgai-guided-prefetch.md)을 참조하세요.

# 서버 측 추적 비컨 용어집
<a name="ad-reporting-server-side-beacon-glossary"></a>

MediaTailor 서버 측 추적은 표준화된 비컨 세트를 사용하여 광고 서버 및 확인 서비스에 광고 시청 진행 상황을 보고합니다. 이러한 비컨은 비디오 광고 측정에 대한 대화형 광고국(IAB) 표준에 부합하며 광고 노출 및 완료율을 정확하게 보고합니다.


**서버 측 추적 비컨 유형**  

| 비컨 유형 | 실행 시 | 용도 | 타이밍 세부 정보 | 
| --- | --- | --- | --- | 
| 노출 | 플레이어가 첫 번째 광고 세그먼트를 요청하는 경우 | 광고 콘텐츠가 로드를 시작했으며 최종 사용자에게 표시되려고 함을 나타냅니다. | 광고에 대한 첫 번째 /v1/segment 요청 시 실행됩니다. 노출을 계산하기 전에 광고 콘텐츠 로딩을 시작하도록 요구하는 IAB 지침에 부합합니다. 전체 시퀀스는 [서버 측 추적 워크플로](ad-reporting-server-side-timing-behavior.md#ad-reporting-server-side-timing-behavior-workflow) 단원을 참조하십시오. | 
| 시작 | 플레이어가 광고 콘텐츠를 렌더링하기 시작하는 경우 | 광고 재생이 실제로 시작되었는지 확인합니다. | 일반적으로 첫 번째 세그먼트 요청의 노출 비컨과 동시에 실행되지만 광고 렌더링의 실제 시작을 나타냅니다. 이러한 구분은 노출 이벤트와 시작 이벤트를 별도로 추적하는 확인 서비스에 중요합니다. | 
| 첫 번째 사분위수 | 플레이어가 광고 기간의 25%에 도달한 경우 | 광고의 1분기까지 지속적인 광고 시청을 측정합니다. | 플레이어가 광고 기간의 25% 지점이 포함된 세그먼트를 요청할 때 실행됩니다. 예를 들어 2초 세그먼트가 있는 20초 광고에서는 일반적으로 세 번째 세그먼트에 대한 요청 시(광고 후 약 4\$16초) 실행됩니다. | 
| 중간점 | 플레이어가 광고 기간의 50%에 도달한 경우 | 광고의 절반을 통해 지속적인 광고 시청을 측정합니다. | 플레이어가 광고 기간의 50% 지점이 포함된 세그먼트를 요청할 때 실행됩니다. 예를 들어 2초 세그먼트가 있는 20초 광고에서는 일반적으로 5번째 세그먼트에 대한 요청 시(광고 후 약 8\$110초) 실행됩니다. | 
| 세 번째 사분위수 | 플레이어가 광고 기간의 75%에 도달하는 경우 | 광고의 4분의 3을 통해 지속적인 광고 시청을 측정합니다. | 플레이어가 광고 기간의 75% 지점이 포함된 세그먼트를 요청할 때 실행됩니다. 예를 들어 2초 세그먼트가 있는 20초 광고에서는 일반적으로 8번째 세그먼트에 대한 요청 시(광고 후 약 14\$116초) 실행됩니다. | 
| 완료 | 플레이어가 광고 끝에 도달하면 | 전체 광고가 최종 사용자에게 전달되었는지 확인합니다. | 플레이어가 광고의 최종 세그먼트를 요청할 때 실행됩니다. 이는 최종 사용자가 전체 광고 콘텐츠를 볼 수 있음을 나타냅니다. 예를 들어 2초 세그먼트가 있는 20초 광고에서는 일반적으로 10번째 세그먼트에 대한 요청 시(광고 후 약 18\$120초) 실행됩니다. | 

**참고**  
비컨 실행의 정확한 타이밍은 세그먼트 지속 시간 및 광고 길이에 따라 달라집니다. MediaTailor는 특정 광고 기간 및 세그먼트 구조를 기반으로 각 사분위수 위치에 해당하는 적절한 세그먼트 요청을 계산합니다.

# 서버 측 추적 타이밍 및 캐싱 동작
<a name="ad-reporting-server-side-timing-behavior"></a>

서버 측 보고에서 MediaTailor는 매니페스트 구문 분석 또는 사전 로드 활동이 아닌 플레이어의 실제 세그먼트 요청을 기반으로 추적 이벤트를 실행합니다. 이 접근 방식은 비디오 광고 측정에 대한 업계 표준에 부합하는 정확한 노출 계수를 보장합니다.

## 주요 타이밍 원칙
<a name="ad-reporting-server-side-timing-behavior-principles"></a>

MediaTailor 서버 측 추적은 다음과 같은 기본 타이밍 원칙을 따릅니다.
+ **실제 세그먼트 요청에서 이벤트 추적 실행** - 플레이어가 매니페스트 구문 분석 또는 캐싱이 아닌 `/v1/segment` URLs에 HTTP 요청을 하는 경우에만 비컨이 전송됩니다.
+ 매**니페스트의 플레이어 캐싱 및 사전 로드는 이벤트를 트리거하지 않습니다**. 플레이어는 추적 이벤트를 생성하지 않고도 매니페스트 정보를 구문 분석, 캐시 또는 사전 로드할 수 있습니다.
+ **세그먼트 사전 가져오기*는* 이벤트를 트리거합니다** - 플레이어가 재생 전에 실제 광고 세그먼트를 미리 가져오는 경우 세그먼트 요청이 유효한 노출을 구성하는 업계 표준 동작을 따릅니다.
+ **각 /v1/세그먼트 요청은 적절한 비컨을 트리거합니다**. 특정 추적 이벤트(억제, 사분위수, 완료)는 요청되는 광고 위치 및 세그먼트에 따라 결정됩니다.
+ **타이밍은 IAB 표준에 부합** -이 접근 방식은 비디오 광고 측정 및 노출 계산에 대한 대화형 광고국 지침을 따릅니다.

## 서버 측 추적 워크플로
<a name="ad-reporting-server-side-timing-behavior-workflow"></a>

다음 다이어그램은 플레이어 요청과 관련하여 이벤트 추적이 실행되는 시기를 보여주는 전체 서버 측 추적 워크플로를 보여줍니다.

**1단계: 세션 초기화**  
플레이어가 MediaTailor에서 매니페스트를 요청하면 광고 세그먼트 URLs.  

![\[MediaTailor에서 매니페스트를 요청하고 광고 세그먼트 URLs.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/ss-track-phase1.png)


**2단계: 광고 요청 및 노출 추적**  
플레이어가 첫 번째 광고 세그먼트를 요청하면 MediaTailor는 노출을 실행하고 광고 결정 서버와 광고 확인 서비스 모두에 비컨을 시작합니다.  

![\[플레이어가 첫 번째 광고 세그먼트를 요청할 때 MediaTailor가 광고 결정 서버 및 광고 확인 서비스에 노출 및 시작 비컨을 모두 전송하는 것을 보여주는 광고 노출 추적 단계입니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/ss-track-phase2.png)


**3단계: 사분위 추적**  
MediaTailor는 후속 세그먼트 요청에 따라 사분위 비컨(1사분위수, 중간점, 3사분위수, 완료)을 실행합니다.  

![\[플레이어가 후속 광고 세그먼트를 요청할 때 MediaTailor가 광고 결정 서버와 광고 확인 서비스 모두에 사분위 비컨을 실행하는 것을 보여주는 사분위 추적 단계입니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/ss-track-phase3.png)


**4단계: 세그먼트 전송**  
추적 비컨을 실행한 후 MediaTailor는 Amazon CloudFront 또는 CDN에서 실제 광고 세그먼트로 리디렉션합니다.  

![\[추적 비컨을 실행한 후 MediaTailor가 CloudFront 또는 CDN에서 실제 광고 세그먼트로 플레이어를 리디렉션하는 것을 보여주는 세그먼트 전송 단계입니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/ss-track-phase4.png)


서버 측 추적 워크플로에는 다음과 같은 주요 타이밍 동작이 포함됩니다.

1. **세션 초기화** - 플레이어가 MediaTailor에서 매니페스트를 요청합니다. MediaTailor는 `/v1/segment` 경로가 있는 광고 세그먼트 URLs이 포함된 개인화된 매니페스트를 반환합니다.

1. **매니페스트 구문 분석 및 캐싱** - 플레이어는 매니페스트를 구문 분석하고 세그먼트 정보를 미리 로드하거나 캐싱할 수 있습니다. 플레이어 캐싱 동작에 관계없이 **이 단계에서는 추적 이벤트가 실행되지 않습니다**.

1. **광고 세그먼트 요청 및 노출 추적** - 플레이어가 실제로 첫 번째 광고 세그먼트(일반적으로 재생용)를 요청하면 MediaTailor는 노출 비컨을 실행하고 광고 결정 서버와 광고 확인 서비스 모두에 대한 이벤트 추적을 시작합니다. 이는 매니페스트를 구문 분석할 때가 아니라 `/v1/segment` URL에 대한 실제 HTTP 요청에서 발생합니다.

1. **세그먼트 요청을 기반으로 한 사분위 추적** - MediaTailor는 광고 기간 내에 계산된 사분위수 위치에 해당하는 후속 세그먼트 요청을 기반으로 광고 결정 서버와 광고 확인 서비스 모두에 사분위수 비컨(1사분위수, 중간점, 3사분위수, 완료)을 실행합니다.

1. **세그먼트 전송** - 적절한 추적 비컨을 실행한 후 MediaTailor는 실제 광고 세그먼트(Amazon CloudFront 또는 CDN)로 HTTP 리디렉션을 실행합니다.

## 플레이어 캐싱 및 사전 로드 고려 사항
<a name="ad-reporting-server-side-timing-behavior-caching-considerations"></a>

MediaTailor 서버 측 추적은 정확한 노출 측정을 유지하면서 다양한 플레이어 캐싱 및 사전 로드 전략과 호환되도록 설계되었습니다.
+ **매니페스트 사전 로드** - 매니페스트 정보를 사전 로드하거나 캐시하는 플레이어는 추적 이벤트를 트리거하지 않습니다. 추적 이벤트는 실제 세그먼트 요청이 이루어진 경우에만 실행됩니다.
+ **세그먼트 미리 가져오기** - 플레이어가 재생 전에 광고 세그먼트를 미리 가져오는 경우 해당 세그먼트가 요청되면 실제 재생 시간보다 이전일 수 있는 추적 이벤트가 실행됩니다. 이 동작은 세그먼트 요청을 유효한 노출로 간주하는 업계 표준에 부합합니다.
+ **플레이어 버퍼링** - 표준 플레이어 버퍼링 동작(재생보다 약간 앞선 세그먼트 요청)은 세그먼트 요청 패턴에 따라 적절한 시간에 추적 이벤트를 트리거합니다.

## 불일치 추적 문제 해결
<a name="ad-reporting-server-side-timing-behavior-troubleshooting"></a>

MediaTailor 서버 측 추적과 타사 지표 간에 불일치가 발견되면 다음 요소를 고려하세요.
+ **플레이어 동작 차이** - 플레이어마다 세그먼트 요청이 이루어지는 시점에 영향을 미치는 다양한 사전 가져오기 및 버퍼링 전략이 있을 수 있습니다.
+ **네트워크 조건** - 네트워크 조건이 좋지 않으면 플레이어가 세그먼트를 예상과 여러 번 또는 다른 간격으로 요청할 수 있습니다.
+ **CDN 구성** - `/v1/segment` 요청의 잘못된 CDN 캐싱으로 인해 추적 이벤트가 누락되거나 중복될 수 있습니다.
+ **세션 관리** - 각 재생 세션이 이벤트 충돌 추적을 방지하기 위해 고유한 세션 식별자를 사용하는지 확인합니다.

자세한 문제 해결 지침은 섹션을 참조하세요[일반적인 문제 해결](monitoring-and-troubleshooting.md#troubleshooting-common-issues).

# MediaTailor 서버 측 추적 기능
<a name="ad-reporting-server-side-features"></a>

AWS Elemental MediaTailor 는 이러한 통합 서버 측 추적 기능을 자동으로 적용하여 광고 측정 정확도와 신뢰성을 최적화합니다. 시스템은 중복 비컨을 방지하고, 대량 기간 동안 트래픽을 관리하고, 적절한 이벤트 시퀀싱을 유지하고, 사용자의 구성 없이 포괄적인 성능 모니터링을 제공합니다. 광고 결정 서버(ADS)가 VAST 응답에서 추적 비컨을 제공하도록 하기만 하면 됩니다.

**참고**  
이러한 기능은 2025년 9월 30일부터 신규 고객에게 제공됩니다. 기존 고객은 지속적인 서비스 개선의 일환으로 2025년 내내 액세스할 수 있습니다. 이러한 기능에 즉시 액세스하려면 [AWS Support](https://aws.amazon.com/premiumsupport/)에 문의하십시오.

**참고**  
이러한 기능은 스티칭(SSAI) 광고 삽입 방법과 서버 가이드(SGAI) 광고 삽입 방법 모두에 적용됩니다. 비컨 유형과 타이밍은 두 모드 모두에서 동일합니다. MediaTailor가 비컨을 트리거하는 방식이 다릅니다. SGAI 서버 측 비컨에 [서버 가이드 광고 삽입(SGAI)을 사용한 서버 측 추적](ad-reporting-server-side-sgai.md) 대한 자세한 내용은 섹션을 참조하세요.

## 비콘 중복 제거
<a name="ad-reporting-server-side-beacon-deduplication"></a>

MediaTailor는 동일한 광고 이벤트에 대한 중복 비컨 실행을 방지합니다. 서버 측 추적 시스템은 각 노출, 사분위수 및 완료 비컨을 광고 보기 세션당 한 번만 전송합니다. 비디오 플레이어가 네트워크 조건, 비트 전송률 변경 또는 버퍼링 전략으로 인해 동일한 광고 세그먼트를 여러 번 요청하면 MediaTailor는 실행된 비컨을 추적하고 중복 전송을 차단합니다.

중복 제거는 부풀려진 비컨 수를 유발하는 일반적인 시나리오를 자동으로 해결합니다.
+ **적응형 비트레이트 스트리밍** - 플레이어가 동일한 광고 세그먼트의 다양한 품질 변형을 다운로드하는 경우
+ **네트워크 재시도 시나리오** - 플레이어가 네트워크 문제 또는 제한 시간으로 인해 세그먼트를 다시 요청하는 경우
+ **플레이어 버퍼링 전략** - 플레이어가 버퍼링을 위해 세그먼트를 미리 가져오거나 다시 가져오는 경우

시스템은 플레이어가 서로 다른 품질 수준 간에 전환하더라도 노출 비컨을 한 번만 발사하도록 설계되었습니다.

## 적응형 제한 및 비컨 재시도
<a name="ad-reporting-server-side-adaptive-throttling"></a>

MediaTailor는 서버 응답 지표를 기반으로 비컨 트래픽 속도를 자동으로 관리합니다. 시스템은 HTTP 응답 패턴, 연결 제한 시간 및 오류 코드를 모니터링하여 정체를 감지한 다음 그에 따라 트래픽 속도를 조정합니다. 시스템이 서버 스트레스 지표를 식별하면 영향을 받는 도메인의 트래픽 속도가 줄어들고 서버에서 용량 개선이 입증되면 속도가 자동으로 증가합니다.

시스템은 다음 표시기를 사용하여 서버 상태를 모니터링합니다.
+ **HTTP 연결 제한 시간** - 측정 플랫폼이 예상 기간 내에 응답하지 않는 경우
+ **오류 응답 코드** - 서버 과부하를 나타내는 503, 504 및 507 응답입니다. 또한 광고 서버는 완전한 호환성을 위해 이러한 오류 코드를 지원해야 합니다.
+ **응답 패턴** - 용량 문제를 나타내는 측정 플랫폼 성능 변경

재시도 동작은 시도 사이에 최소 30초의 지연 시간으로 최대 1시간 동안 전송을 자동으로 시도합니다. 이 재시도 동작은 구성할 수 없습니다.

## 초당 비컨 트래픽 관리
<a name="ad-reporting-server-side-tps-management"></a>

TPS 제한을 설정하여 비컨 전송 속도를 제어할 수 있습니다. 서버 측 추적 기능에 대해 구성 가능한 유일한 설정입니다. 계정 수준 제한은 모든 측정 파트너에게 전송된 총 광고 추적 요청 수를 제한합니다. MediaTailor는 최소 TPS 한도 10,000을 적용하여 엔터프라이즈 규모의 작업에 충분한 용량을 제공합니다.

 AWS 지원 티켓을 제출하여 다음 정보와 함께 TPS 한도를 설정합니다.
+ **AWS 계정 ID** - 특정 계정 식별자
+ **대상 리전** - TPS 제한을 적용하려는 AWS 리전
+ **원하는 TPS 임계값** - 필요한 초당 트랜잭션 한도(최소 10,000)

기본적으로 TPS 제한은 없습니다. 광고 결정 서버(ADS)에 필요한 경우 TPS 제한을 요청할 수 있지만 제한은 10,000TPS보다 커야 합니다. MediaTailor는 지정된 한도를 초과하지 않지만 해당 한도까지 일관된 처리량을 보장하지 않습니다. 광고 결정 서버는 지원할 수 있는 TPS 제한을 알려줍니다.

## 순서 내 비컨
<a name="ad-reporting-server-side-in-order-beaconing"></a>

MediaTailor는 광고 추적 이벤트의 순차적 전송을 자동으로 유지합니다. 시스템은 네트워크 문제, 재시도 또는 트래픽 관리가 발생하는 경우에도 비컨 순서를 유지합니다. 이렇게 하면 측정 파트너가 정확한 분석을 위해 올바른 순서로 이벤트를 수신할 수 있습니다.

시스템은 표준 산업 비컨 시퀀스를 따릅니다.

1. **이벤트 시작** - 광고 재생이 시작될 때 실행

1. **첫 번째 사분위수 이벤트** - 25% 광고 완료 시 발사

1. **중간 이벤트** - 50% 광고 완료 시 발사

1. **세 번째 사분위수 이벤트** - 75% 광고 완료 시 발사

1. **완료 이벤트** - 광고가 완료되면 실행

이러한 기능은 자동으로 함께 작동합니다.
+ 적절한 순서를 유지하기 위해 제한 중에 비컨을 유지합니다.
+ 각 측정 파트너 도메인에는 속도 조정 중 중단을 방지하기 위한 별도의 이벤트 대기열이 있습니다.
+ 중복 제거는 시간 순서를 유지하면서 이벤트 유형 및 타임라인 위치를 추적합니다.

# 클라이언트 측 광고 추적
<a name="ad-reporting-client-side"></a>

 AWS Elemental MediaTailor 클라이언트 측 추적 API를 사용하면 광고 시간 동안 플레이어 제어를 스트리밍 워크플로에 통합할 수 있습니다. 클라이언트 측 추적에서 플레이어 또는 클라이언트는 노출 및 사분위 광고 비컨과 같은 추적 이벤트를 광고 결정 서버(ADS) 및 기타 광고 확인 엔터티로 내보냅니다. 이러한 이벤트는 각 브레이크 내의 전체 광고 브레이크 상태와 개별 광고 시간을 모두 추적합니다. 노출 및 사분위수(ADS) 및 기타 광고 확인 엔터티에 대한 자세한 내용을 참조하세요. 노출 및 사분위 광고 비컨에 대한 자세한 내용은 섹션을 참조하세요[클라이언트 측 비컨](ad-reporting-client-side-beaconing.md). ADS 및 기타 광고 확인 엔터티에 대한 자세한 내용은 섹션을 참조하세요[클라이언트 측 광고 추적 통합](ad-reporting-client-side-ad-tracking-integrations.md).

클라이언트 측 추적을 위해 플레이어 파라미터 및 세션 데이터를 ADS에 전달하는 방법에 대한 자세한 내용은 [ADS 요청에 대한 MediaTailor 플레이어 변수](variables-player.md) 및 섹션을 참조하세요[ADS 요청에 대한 MediaTailor 세션 변수](variables-session.md).

클라이언트 측 추적을 사용하면 다음과 같은 기능을 사용할 수 있습니다.
+ 애드 브레이크 카운트다운 타이머 - 자세한 내용은 섹션을 참조하세요[광고 카운트다운 타이머](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-ad-countdown-timer).
+ 광고 클릭 - 자세한 내용은 섹션을 참조하세요[광고 클릭](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-ad-clickthrough).
+ 컴패니언 광고 표시 - 자세한 내용은 섹션을 참조하세요[컴패니언 광고](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-companion-ads).
+ 건너뛰기 가능한 광고 - 자세한 내용은 섹션을 참조하세요[건너뛰기 가능한 광고](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-skippable-ads).
+ 개인 정보 보호 규정 준수를 위한 VAST 아이콘 표시 - 자세한 내용은 섹션을 참조하세요[Google WTA(Why This Ad)용 아이콘](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-google-wta).
+ 광고 중 플레이어 스크러빙 제어 - 자세한 내용은 섹션을 참조하세요[스크러빙](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-scrubbing).

MediaTailor 클라이언트 측 추적 API를 사용하면 클라이언트 측 추적 외에도 기능을 활성화하는 메타데이터를 재생 디바이스로 전송할 수 있습니다.

## 클라이언트 측 보고 워크플로
<a name="ad-reporting-client-side-workflow"></a>

다음 다이어그램은 세션 초기화부터 광고 재생 및 비컨에 이르기까지 전체 클라이언트 측 보고 워크플로를 보여줍니다.

![\[세션 초기화부터 광고 재생 및 비컨에 이르기까지 전체 워크플로 동안 비디오 플레이어, MediaTailor, Ad Decision Server, 콘텐츠 오리진 및 광고 확인 서비스 간의 상호 작용을 보여주는 MediaTailor 클라이언트 측 보고 시퀀스 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/tracking_flow.png)


클라이언트 측 보고 워크플로에는 다음 단계가 포함됩니다.

1. **세션 초기화** - 비디오 플레이어는 `adsParams`, 오리진 토큰 및 세션 기능을 포함한 JSON 메타데이터를 사용하여 MediaTailor 세션 엔드포인트에 POST 요청을 보냅니다. MediaTailor는 세션에 `trackingUrl` 대해 `manifestUrl` 및 로 응답합니다.

1. **매니페스트 요청 및 광고 결정** - 플레이어가 MediaTailor에서 개인화된 매니페스트를 요청합니다. MediaTailor는 오리진에서 원본 콘텐츠 매니페스트를 요청하고, 플레이어 파라미터를 사용하여 광고 결정 서버(ADS)에 광고 요청을 하고, 광고 메타데이터가 포함된 VAST 응답을 수신하고, 광고 마커가 포함된 맞춤형 매니페스트를 플레이어에게 전달합니다.

1. **데이터 검색 추적** - 플레이어는 정기적으로 추적 URL을 폴링합니다(HLS의 대상 기간 또는 DASH의 최소 업데이트 기간과 일치). MediaTailor는 가용성, 광고, 추적 이벤트, 비컨 URLs 및 광고 확인 데이터가 포함된 JSON 추적 메타데이터를 반환합니다.

1. **광고 재생 및 비컨 **- 광고 시간 동안 플레이어는 추적 메타데이터를 구문 분석하고, 광고 렌더링이 시작될 때 노출 비컨을 실행하고, 적절한 시간에 사분위 비컨(시작, firstQuartile, 중간점, thirdQuartile, 완료)을 실행하고, 필요한 경우 광고 확인 JavaScript를 로드하고 실행하고, 가시성/검증 이벤트를 타사 확인 서비스에 전송합니다.

1. **연속 폴링** - 플레이어는 세션 전체에서 추적 URL을 계속 폴링하여 예정된 광고 시간 및 동적 콘텐츠에 대한 업데이트된 메타데이터를 수신합니다.

이 워크플로를 사용하면 개인 정보 보호 규정 준수를 위해 광고 카운트다운 타이머, 클릭 기능, 컴패니언 광고, 건너뛰기 가능한 광고, VAST 아이콘 표시와 같은 고급 기능을 사용할 수 있습니다.

**Topics**
+ [클라이언트 측 보고 워크플로](#ad-reporting-client-side-workflow)
+ [클라이언트 측 추적 활성화](#ad-reporting-client-side-enabling)
+ [광고 서버 파라미터](#ad-reporting-client-side-ad-server-parameters)
+ [오리진 상호 작용 쿼리 파라미터](#ad-reporting-client-side-origin-interaction-query-parameters)
+ [세션 구성 기능](#ad-reporting-client-side-session-configured-features)
+ [클라이언트 측 추적 모범 사례](#ad-reporting-client-side-best-practices)
+ [클라이언트 측 광고 추적 스키마 및 속성](ad-reporting-client-side-ad-tracking-schema.md)
+ [광고 추적 활동 타이밍](ad-reporting-client-side-ad-tracking-schema-activity-timing.md)
+ [클라이언트 측 광고 추적을 위한 플레이어 제어 및 기능](ad-reporting-client-side-ad-tracking-schema-player-controls.md)
+ [클라이언트 측 비컨](ad-reporting-client-side-beaconing.md)
+ [서버 측 광고 비컨이 있는 하이브리드 모드](ad-reporting-hybrid-mode.md)
+ [클라이언트 측 광고 추적 통합](ad-reporting-client-side-ad-tracking-integrations.md)
+ [GetTracking을 사용한 광고 비컨 페이징](#gettracking)

## 클라이언트 측 추적 활성화
<a name="ad-reporting-client-side-enabling"></a>

각 세션에 대해 클라이언트 측 추적을 활성화합니다. 플레이어는 MediaTailor 구성의 세션 초기화 접두사 엔드포인트`POST`에 HTTP를 생성합니다. 선택적으로 플레이어는 광고 호출, 매니페스트의 오리진 호출, 세션 수준에서 MediaTailor 기능 호출 또는 비활성화 시 MediaTailor가 사용할 추가 메타데이터를 전송할 수 있습니다.

다음 예제에서는 JSON 메타데이터의 구조를 보여줍니다.

```
{
  "adsParams": {                  # 'adsParams' is case sensitive
    "param1": "value1",           # key is not case sensitive
    "param2": "value2",           # Values can contain spaces. For example, 'value 2' is an allowed value. 
    },
  "origin_access_token":"abc123", # this is an example of a query parameter designated for the origin
  "overlayAvails":"on"            # 'overlayAvails' is case sensitive. This is an example of a feature that is enabled at the session level.
}
```

MediaTailor 콘솔 또는 API를 사용하여 이러한 파라미터를 참조하도록 ADS 요청 템플릿 URL을 구성합니다. 다음 예제에서 `player_params.param1`는의 플레이어 파라미터이고 `param1``player_params.param2`는의 플레이어 파라미터입니다`param2`.

```
https://my.ads.com/path?param1=[player_params.param1]&param2=[player_params.param2]
```

## 광고 서버 파라미터
<a name="ad-reporting-client-side-ad-server-parameters"></a>

JSON 구조의 최상위 수준은 `adsParams` JSON 객체입니다. 이 객체 내에는 MediaTailor가 모든 세션 요청에서 읽고 광고 서버로 전송할 수 있는 키/값 페어가 있습니다. MediaTailor는 다음 광고 서버를 지원합니다.
+ Google Ad Manager 
+ SpringServe 
+ FreeWheel 
+ 퍼블릭 

## 오리진 상호 작용 쿼리 파라미터
<a name="ad-reporting-client-side-origin-interaction-query-parameters"></a>

, `adsParams` `availSuppression`및와 같이 JSON 구조의 최상위 수준 내에 있는 예약 키/값 페어`overlayAvails`는 쿼리 파라미터 형태로 오리진 요청 URL에 추가되지 않습니다. MediaTailor가 오리진에 보내는 모든 세션 매니페스트 요청에는 이러한 쿼리 파라미터가 포함됩니다. 오리진은 불필요한 쿼리 파라미터를 무시합니다. 예를 들어 MediaTailor는 키/값 페어를 사용하여 오리진에 액세스 토큰을 보낼 수 있습니다.

## 세션 구성 기능
<a name="ad-reporting-client-side-session-configured-features"></a>

세션 초기화 JSON 구조를 사용하여 , 및 `overlayAvails``availSuppression`와 같은 MediaTailor 기능을 활성화, 비활성화 또는 재정의합니다`adSignaling`. 세션 초기화 중에 전달된 모든 기능 구성은 MediaTailor 구성 수준에서 설정을 재정의합니다.

**참고**  
세션 초기화 시 MediaTailor에 제출된 메타데이터는 변경할 수 없으며 세션 기간 동안 추가 메타데이터를 추가할 수 없습니다. SCTE-35 마커를 사용하여 세션 중에 변경되는 데이터를 전달합니다. 자세한 내용은 [ADS 요청에 대한 MediaTailor 세션 변수](variables-session.md) 단원을 참조하십시오.

**Example : HLS에 대한 클라이언트 측 광고 추적 수행**  

```
POST mediatailorURL/v1/session/hashed-account-id/origin-id/asset-id.m3u8

        {
            "adsParams": {
               "deviceType": "ipad"   # This value does not change during the session.
               "uid": "abdgfdyei-2283004-ueu"                     
           }
        }
```

**Example : DASH에 대한 클라이언트 측 광고 추적 수행**  

```
POST mediatailorURL/v1/session/hashed-account-id/origin-id/asset-id.mpd

        {
            "adsParams": {
               "deviceType": "androidmobile",
               "uid": "xjhhddli-9189901-uic" 
           }
        }
```

### 보고 모드 파라미터
<a name="session-initialization-reporting-mode"></a>

요청 본문에 `reportingMode` 파라미터를 포함하여 세션을 초기화할 때 보고 모드를 지정할 수 있습니다. 이 파라미터는 MediaTailor가 세션에 대한 클라이언트 측 또는 서버 측 광고 추적을 수행할지 여부를 제어합니다.
+ `client` - 플레이어가 광고 추적을 수행하고 비컨을 광고 서버로 보냅니다. 지정되지 않은 경우 기본 모드`reportingMode`입니다.
+ `server` - MediaTailor는 서버 측 광고 추적을 수행하고 비컨을 광고 서버로 직접 전송합니다.

**Example 서버 측 보고 모드를 사용한 세션 초기화**  

```
POST mediatailorURL/v1/session/hashed-account-id/origin-id/asset-id.m3u8

        {
            "adsParams": {
               "deviceType": "ipad",
               "uid": "abdgfdyei-2283004-ueu"                     
           },
           "reportingMode": "server"
        }
```

**Example 클라이언트 측 보고 모드를 사용한 세션 초기화(명시적)**  

```
POST mediatailorURL/v1/session/hashed-account-id/origin-id/asset-id.mpd

        {
            "adsParams": {
               "deviceType": "androidmobile",
               "uid": "xjhhddli-9189901-uic" 
           },
           "reportingMode": "client"
        }
```

**참고**  
`reportingMode` 파라미터는 세션 초기화 시 설정되며 세션 중에는 변경할 수 없습니다. 지정하지 않으면 MediaTailor`reportingMode`는 이전 버전과의 호환성을 유지하기 위해 기본적으로 클라이언트 측 보고를 사용합니다.

성공적인 응답은 응답 본문이 `200` 있는 HTTP입니다. 본문에는 `manifestUrl` 및 `trackingUrl` 키가 있는 JSON 객체가 포함되어 있습니다. 값은 플레이어가 재생 및 광고 이벤트 추적 모두에 사용할 수 있는 상대 URLs입니다.

```
{
  "manifestUrl": "/v1/dashmaster/hashed-account-id/origin-id/asset-id.m3u8?aws.sessionId=session-id",
  "trackingUrl": "/v1/tracking/hashed-account-id/origin-id/session-id"
}
```

클라이언트 측 추적 스키마에 대한 자세한 내용은 섹션을 참조하세요[클라이언트 측 광고 추적 스키마 및 속성](ad-reporting-client-side-ad-tracking-schema.md).

## 클라이언트 측 추적 모범 사례
<a name="ad-reporting-client-side-best-practices"></a>

이 섹션에서는 라이브 및 VOD 워크플로 모두에 대한 MediaTailor의 클라이언트 측 추적 모범 사례를 간략하게 설명합니다.

### 라이브 워크플로
<a name="ad-reporting-client-side-best-practices-live"></a>

항상 최신 광고 추적 메타데이터를 보유하기 위해 HLS의 모든 대상 기간 또는 DASH의 최소 업데이트 기간과 일치하는 간격으로 추적 엔드포인트를 폴링합니다. 이 간격을 일치시키는 것은 크리에이티브에 대화형 또는 오버레이 구성 요소가 있을 수 있는 워크플로에서 특히 중요합니다.

**참고**  
일부 플레이어는 폴링의 대안으로 사용할 수 있는 이벤트 리스너를 지원합니다. 예를 들어 각 세션에 대해 MediaTailor 광고 ID 장식 기능을 활성화해야 합니다. 자세한 내용은 [광고 ID 장식](ad-id-decoration.md) 단원을 참조하십시오. 이 기능을 사용하면 가용 구간의 각 광고 위에 날짜 범위(HLS) 또는 이벤트 요소(DASH) 식별자가 추가됩니다. 플레이어는 이러한 매니페스트 태그를 프롬프트로 사용하여 세션에 대한 MediaTailor 추적 엔드포인트를 호출할 수 있습니다.

### VOD 워크플로
<a name="ad-reporting-client-side-best-practices-vod"></a>

세션 초기화가 성공하고 MediaTailor가 미디어가 포함된 첫 번째 매니페스트를 수신한 후 추적 엔드포인트를 한 번만 호출하면 됩니다.

![\[VOD 워크플로에 대한 호출 흐름입니다. 세션이 초기화되고 MediaTailor가 미디어가 포함된 첫 번째 매니페스트를 수신한 후 클라이언트 측 추적 엔드포인트를 호출합니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/vod-workflow-best-practice.png)


### 서버 가이드 광고 삽입
<a name="ad-reporting-client-side-best-practices-sgai"></a>

서버 가이드 광고 삽입(SGAI) 세션은 `GetTracking` API를 사용하지 않습니다. 대신를 사용하면 `aws.reportingMode=CLIENT` MediaTailor는 플레이어가 광고 콘텐츠를 요청할 때 각 자산 목록 응답의 `TRACKING` 섹션에 추적 정보를 제공합니다. 세션 초기화 응답에는가 포함되지 않습니다`trackingUrl`.

클라이언트 측 추적 SGAI 세션에 대한 자산 목록 응답의 구조는 다음과 같습니다.

```
{
  "ASSETS": [
    { "DURATION": 20.0, "URI": "https://cdn.example.com/ad1/master.m3u8" },
    { "DURATION": 10.0, "URI": "https://cdn.example.com/ad2/master.m3u8" }
  ],
  "TRACKING": {
    ...VAST tracking events and beacon URLs for each ad...
  }
}
```

SGAI 메서드에 대한 클라이언트 측 추적을 구현하는 경우:
+ 를 호출하지 않고 자산 목록 응답에서 `TRACKING` 섹션 구문 분석 `GetTracking`
+ 광고 이벤트 보고를 위해 자산 목록에 제공된 추적 URLs 사용
+ 플레이어의 실제 광고 재생 이벤트를 기반으로 하는 발사 추적 비컨
+ 자산 목록을 가져올 때 각 광고 시간에 대한 추적을 독립적으로 처리

**중요**  
`TRACKING` 섹션은이 `aws.reportingMode=CLIENT` 설정된 경우에만 자산 목록에 포함됩니다. 서버 측 보고(SGAI의 기본값)를 사용하는 경우 MediaTailor는 `TRACKING` 섹션을 생략하고 대신 광고 URIs에 비컨 데이터를 포함합니다. 자세한 내용은 [서버 가이드 광고 삽입(SGAI)을 사용한 서버 측 추적](ad-reporting-server-side-sgai.md)을 참조하세요.

# 클라이언트 측 광고 추적 스키마 및 속성
<a name="ad-reporting-client-side-ad-tracking-schema"></a>

MediaTailor 클라이언트 측 광고 추적 기능을 사용하면 자세한 클라이언트 측 광고 추적 데이터를 플레이어 환경에 통합할 수 있습니다. 다음 섹션에서는 전체 광고 추적 스키마와 스키마를 구성하는 특정 속성 및 값을 다룹니다.

## 스키마
<a name="ad-reporting-client-side-ad-tracking-schema-table"></a>

다음 JSON 구조는 MediaTailor 클라이언트 측 광고 추적 스키마를 보여줍니다. 이 표현은 여러 부분 간의 관계를 이해하는 데 도움이 되는 스키마의 중첩 구조를 보여줍니다.

각 속성에 대한 자세한 내용은 섹션을 참조하세요[속성](#ad-reporting-client-side-ad-tracking-schema-properties).

```
{
  "avails": [
    {
      "ads": [
        {
          "adID": "string",
          "adParameters": "string",
          "adSystem": "string",
          "adTitle": "string",
          "adVerifications": [
            {
              "executableResource": [
                {
                  "apiFramework": "string",
                  "type": "string",
                  "uri": "string",
                  "language": "string"
                }
              ],
              "javaScriptResource": [
                {
                  "apiFramework": "string",
                  "browserOptional": "string",
                  "uri": "string"
                }
              ],
              "trackingEvents": [
                {
                  "event": "string",
                  "uri": "string"
                }
              ],
              "vendor": "string",
              "verificationParameters": "string"
            }
          ],
          "companionAds": [
            {
              "adParameters": "string",
              "altText": "string",
              "attributes": {
                "adSlotId": "string",
                "apiFramework": "string",
                "assetHeight": "string",
                "assetWidth": "string",
                "expandedHeight": "string",
                "expandedWidth": "string",
                "height": "string",
                "id": "string",
                "pxratio": "string",
                "renderingMode": "string",
                "width": "string"
              },
              "companionClickThrough": "string",
              "companionClickTracking": "string",
              "htmlResource": "string",
              "iFrameResource": "string",
              "sequence": "string",
              "staticResource": "string",
              "trackingEvents": [
                {
                  "event": "string",
                  "uri": "string"
                }
              ]
            }
          ],
          "creativeId": "string",
          "creativeSequence": "string",
          "duration": "string",
          "durationInSeconds": number,
          "extensions": [
            {
              "type": "string",
              "content": "string"
            }
          ],
          "icons": [
            {
              "attributes": {
                "apiFramework": "string",
                "duration": "string",
                "height": "string",
                "offset": "string",
                "program": "string",
                "pxratio": "string",
                "width": "string",
                "xPosition": "string",
                "yPosition": "string"
              },
              "htmlResource": "string",
              "iconClicks": {
                "iconClickThrough": "string",
                "iconClickTracking": {
                  "id": "string"
                },
                "iconClickFallbackImages": [
                  {
                    "altText": "string",
                    "height": "string",
                    "width": "string",
                    "staticResource": {
                      "creativeType": "string",
                      "uri": "string"
                    }
                  }
                ]
              },
              "iconViewTracking": "string",
              "iFrameResource": "string",
              "staticResource": {
                "creativeType": "string",
                "uri": "string"
              }
            }
          ],
          "mediaFiles": {
            "adParameters": "string",
            "duration": "string",
            "durationInSeconds": number,
            "mediaFilesList": [
              {
                "apiFramework": "string",
                "delivery": "string",
                "height": "string",
                "maintainAspectRatio": "string",
                "mediaFileUri": "string",
                "mediaType": "string",
                "scalable": "string",
                "width": "string",
                "bitrate": "string"
              }
            ],
            "mezzanine": "string",
            "startTime": "string",
            "startTimeInSeconds": number,
            "trackingEvents": [
              {
                "beaconUrls": ["string"],
                "duration": "string",
                "durationInSeconds": number,
                "dateTime": "string",
                "eventId": "string",
                "eventType": "string",
                "startTime": "string",
                "startTimeInSeconds": number
              }
            ]
          },
          "startTime": "string",
          "startTimeInSeconds": number,
          "dateTime": "string",
          "adBreakTrackingEvents": [...],
          "vastAdId": "string"
        }
      ],
      "adType": "string",
      "availID": "string",
      "duration": "string",
      "durationInSeconds": number,
      "startTime": "string",
      "startTimeInSeconds": number,
      "dateTime": "string",
      "adMarkerDuration": "string",
      "adProgramDateTime": "string",
      "dashAvailabilityStartTime": "string",
      "hlsAnchorMediaSequenceNumber": "string"
    }
  ],
  "nonLinearAvails": [
    {
      "nonLinearAds": [...],
      "nonLinearAdsList": [...]
    }
  ],
  "nextToken": "string",
  "meta": {}
}
```

## 속성
<a name="ad-reporting-client-side-ad-tracking-schema-properties"></a>

다음 표에는 클라이언트 측 추적 API의 속성, 정의, 값 유형 및 예제가 나와 있습니다.


****  

| 속성 | 정의 | 값 유형 | 예제 | 
| --- | --- | --- | --- | 
|   adID  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/ad-reporting-client-side-ad-tracking-schema.html) 경로: `/avails/ads/adId` VAST 매핑: 없음  | 문자열 | 10 | 
|   adBreakTrackingEvents  |  VAST 응답에서 VMAP 추적 이벤트를 전달하는 배열입니다. 자세한 내용은 [VMAP 1.0 사양의 섹션 2.3.](https://www.iab.com/guidelines/vmap/)3을 참조하세요. 경로: `/avails/ads/adBreakTrackingEvents`  | 배열 |  []  | 
|   adMarkerDuration  |  매니페스트의 광고 마커에서 관찰된 가용 기간입니다.  | 문자열 |  30  | 
|   adParameters  |  MediaTailor가 플레이어에게 전달하는 VAST VPAID의 광고 파라미터 문자열입니다. 경로: `/avails/ads/adParameters` VAST 매핑: `VAST/Ad/InLine/Creatives/Creative/Linear/AdParameters`  | 문자열 |  | 
|   adProgramDateTime  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/ad-reporting-client-side-ad-tracking-schema.html)  | 문자열 |  | 
|   ads  |  가능 구간을 구성하는 광고 객체가 포함된 배열입니다. 광고는 매니페스트에 나타나는 순서대로 나열됩니다. 경로: `/avails/ads`  | 배열 |  []  | 
|   adSystem  |  광고를 제공하는 시스템의 이름입니다.  값을 제공해야 합니다. 값을 제공하지 않으면 문제가 발생할 수 있습니다.   | 문자열 |  myADS  | 
|   adTitle  |  광고의 제목입니다.  | 문자열 |  ad1  | 
|   adVerifications  |  크리에이티브 재생을 확인하기 위해 타사 측정 코드를 실행하는 데 필요한 리소스와 메타데이터를 포함합니다. 이 속성에 대한 자세한 내용은 [VAST 4.2 사양의 섹션 3.](https://iabtechlab.com/standards/vast/)16을 참조하세요. MediaTailor는 VAST 3 확장 노드`adVerifications`로를 지원합니다. 경로: `/avails/ads/adVerifications` VAST 매핑: `VAST/Ad/InLine/AdVerifications`  | 배열 |  []  | 
|   altText  |  컴패니언 광고 이미지의 대체 텍스트입니다. 이 텍스트를 사용하면 시각 장애가 있는 플레이어가 이미지에 대한 설명을 다시 읽을 수 있습니다. 경로: `/avails/ads/companionAds/altText`  | 문자열 |  video sequence advertising sneakers  | 
|   apiFramework  |  이 광고가 VPAID 광고임을 플레이어에게 알리`VPAID`려면 로 설정합니다. 스키마의 여러 위치에 나타날 수 있습니다.  | 문자열 |  VPAID  | 
|   availID  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/ad-reporting-client-side-ad-tracking-schema.html) 경로: `/avails/availID`  | 문자열 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/ad-reporting-client-side-ad-tracking-schema.html)  | 
|   avails  |  활성 매니페스트 창에 표시되는 광고 발생 객체 또는 *가능 구간*을 포함하는 배열입니다. 가용 구간은 매니페스트에 나타나는 순서대로 나열됩니다. 경로: `/avails`  | 배열 |  []  | 
|   adType  |  광고의 유형입니다. 경로: `/avails/adType` 및 `/avails/ads/adType`  | 문자열 |  | 
|   dateTime  |  광고 가능성 또는 광고 시작을 위한 ISO 8601초 형식의 프로그램 날짜 시간입니다. 경로: `/avails/dateTime` 및 `/avails/ads/dateTime`  | 문자열 |  | 
|   duration  |  ISO 8601초 형식의 길이입니다. 비컨 지속 시간은 항상 0이지만 응답에는 전체 광고 시간 및 각 광고 및 비컨에 대한 지속 시간이 포함됩니다. 경로: `/avails/duration` 및 `/avails/ads/duration`  | 문자열 | 15.015 | 
|   durationInSeconds  |  초 형식의 길이입니다. 경로: `/avails/durationInSeconds` 및 `/avails/ads/durationInSeconds`  | 숫자 |  | 
|   extensions  |  광고 서버에서 사용하는 VAST의 사용자 지정 확장입니다. 확장에 대한 자세한 내용은 [VAST 4.2 사양의 섹션 3.](https://iabtechlab.com/standards/vast/)18을 참조하세요. 경로: `/avails/ads/extensions` VAST 매핑: `VAST/Ad/InLine/Extensions`  | 배열 | [] | 
|   icons  |  광고의 아이콘 요소입니다. 경로: `/avails/ads/icons` VAST 매핑: `VAST/Ad/InLine/Creatives/Creative/Linear/Icons`  | 배열 |  | 
|   mediaFiles  |  플레이어가 광고 시간에 필요한 비디오 및 기타 자산. 경로: `/avails/ads/mediaFiles`  | 객체 |  | 
|   nonLinearAvails  |  비선형 광고 가능 객체 배열입니다. 경로: `/nonLinearAvails`  | 배열 |  | 
|   executableResource  |  확인을 위한 실행 가능한 리소스입니다. 경로: `/avails/ads/adVerifications/executableResource` VAST 매핑: `VAST/Ad/InLine/AdVerifications/Verification/ExecutableResource`  | 배열 |  | 
|   javaScriptResource  |  확인을 위한 JavaScript 리소스입니다. 경로: `/avails/ads/adVerifications/javaScriptResource` VAST 매핑: `VAST/Ad/InLine/AdVerifications/Verification/JavaScriptResource`  | 배열 |  | 
|   trackingEvents  |  확인 또는 컴패니언 광고를 위한 이벤트 추적. 경로: `/avails/ads/adVerifications/trackingEvents` 또는 `/avails/ads/companionAds/trackingEvents`  | 배열 |  | 
|   vendor  |  확인 공급업체. 경로: `/avails/ads/adVerifications/vendor` VAST 매핑: `VAST/Ad/InLine/AdVerifications/Verification/@vendor`  | 문자열 |  | 
|   uri  |  실행 파일 자산, 비디오 자산 또는 추적 엔드포인트를 가리키는 URI입니다. 경로: 스키마의 다양한 위치 VAST 매핑: VAST의 다양한 CDATA 요소  | 문자열 | https://tracking.example.com/impression | 
|   verificationParameters  |  확인 파라미터입니다. 경로: `/avails/ads/adVerifications/verificationParameters` VAST 매핑: `VAST/Ad/InLine/AdVerifications/Verification/VerificationParameters`  | 문자열 |  | 
|   attributes  |  차원 및 렌더링 모드와 같은 컴패니언 광고 속성. 경로: `/avails/ads/companionAds/attributes`  | 객체 |  | 
|   companionClickThrough  |  최종 사용자가 컴패니언 광고를 클릭할 때 미디어 플레이어가 여는 광고자 페이지의 URL입니다. 경로: `/avails/ads/companionAds/companionClickThrough` VAST 매핑: `VAST/Ad/InLine/Creatives/Creative/CompanionAds/Companion/CompanionClickThrough`  | 문자열 | https://aws.amazon.com/ | 
|   companionClickTracking  |  `companionClickThrough` 속성의 추적 URL입니다. 경로: `/avails/ads/companionAds/companionClickTracking` VAST 매핑: `VAST/Ad/InLine/Creatives/Creative/CompanionAds/Companion/CompanionClickTracking`  | 문자열 | https://myads.com/beaconing/event=clicktracking | 
|   htmlResource  |  스트리밍 공급자의 HTML 페이지 내에 직접 삽입되는 CDATA 인코딩 HTML입니다. 경로: `/avails/ads/companionAds/htmlResource` VAST 매핑: `VAST/Ad/InLine/Creatives/Creative/CompanionAds/Companion/HTMLResource`  | 문자열 | <\$1[CDATA[<\$1doctype html><html><head><meta name=\$1"viewport\$1" content=\$1"width=1, initial-scale=1.0, minimum-scale=1.0,...]]> | 
|   iFrameResource  |  스트리밍 공급자가 iframe에 로드하는 HTML 리소스 파일의 URL입니다. 경로: `/avails/ads/companionAds/iFrameResource` VAST 매핑: `VAST/Ad/InLine/Creatives/Creative/CompanionAds/Companion/iFrameResource`  | 문자열 |  | 
|   sequence  |  VAST 응답에서 크리에이티브에 대해 지정된 시퀀스 값입니다. 경로: `/avails/ads/companionAds/sequence`  | 문자열 | 1 | 
|   startTime  |  ISO 8601초 형식의 시간 위치입니다. HLS의 경우 재생 세션의 시작을 기준으로 합니다. DASH의 경우 이는 매니페스트의 AST(가용성 시작 시간)를 기준으로 합니다. 응답에는 전체 광고 시간과 각 광고 및 비콘에 대한 시작 시간이 포함됩니다. 경로: `/avails/startTime` 및 `/avails/ads/startTime`  | 문자열 | PT18.581355S | 
|   startTimeInSeconds  |  초 형식의 시간 위치입니다. HLS의 경우 재생 세션의 시작을 기준으로 합니다. DASH의 경우 이는 매니페스트의 AST(가용성 시작 시간)를 기준으로 합니다. 응답에는 전체 광고 시간과 각 광고 및 비콘에 대한 시작 시간이 포함됩니다. 경로: `/avails/startTimeInSeconds` 및 `/avails/ads/startTimeInSeconds`  | 숫자 | 18.581 | 
|   eventId  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/ad-reporting-client-side-ad-tracking-schema.html)  | 문자열 |  | 
|   event  |  추적 이벤트의 이름입니다. 경로: `/avails/ads/adVerifications/trackingEvents/event` 또는 `/avails/ads/companionAds/trackingEvents/event`  | 문자열 | impression, start, firstQuartile, midpoint, thirdQuartile, complete | 
|   beaconUrls  |  MediaTailor가 광고 비컨을 전송하는 URL입니다. 경로: `/avails/ads/mediaFiles/trackingEvents/beaconUrls`  | 배열 |  | 
|   bitrate  |  비디오 자산의 비트레이트입니다. 이 속성은 일반적으로 실행 가능 자산에 포함되지 않습니다.  | 문자열 | 2048 | 
|   companionAds  |  각각 사용할 리소스 파일을 지정하는 하나 이상의 컴패니언 광고 콘텐츠 사양입니다. 컴패니언 광고는 광고 시간과 함께 제공되며 광고 주변의 프레임 또는 배너와 같은 콘텐츠를 제공하여 비디오 근처에 표시합니다. 경로: `/avails/ads/companionAds`  | 배열 | [] | 
|   creativeId  |  광고에 대한 `Creative` 태그의 `Id` 속성 값입니다.  | 문자열 | creative-1 | 
|   creativeSequence  |  VAST 응답의 `Ad@id` 값에 따라 광고가 재생되어야 하는 시퀀스입니다.  | 문자열 | 1 | 
|   dashAvailabilityStartTime  |  라이브/동적 DASH의 경우 오리진 매니페스트`MPD@availabilityStartTime`의 입니다.  | 문자열 | 2022-10-05T19:38:39.263Z | 
|   delivery  |  `progressive` 또는 `streaming` 프로토콜이 사용 중인지 여부를 나타냅니다.  | 문자열 | progressive | 
|   eventType  |  비컨의 유형입니다. 경로: `/avails/ads/mediaFiles/trackingEvents/eventType`  | 문자열 | impression | 
|   height  |  비디오 자산의 픽셀 단위 높이입니다.  | 문자열 | 360 | 
|   hlsAnchorMediaSequenceNumber  |  HLS 오리진 매니페스트에 표시되는 첫 번째/가장 오래된 미디어 시퀀스의 미디어 시퀀스 번호입니다.  | 문자열 | 77 | 
|   maintainAspectRatio  |  크기 조정 중에 비디오의 종횡비를 유지할지 여부를 나타냅니다.  | 부울 | true | 
|   mediaFilesList  |  플레이어가 광고 시간에 필요한 비디오 및 기타 자산을 지정합니다. 경로: `/avails/ads/mediaFiles/mediaFilesList`  | 배열 | [] | 
|   mediaFileUri  |  실행 파일 자산 또는 비디오 자산을 가리키는 URI입니다.  | 문자열 | https://myad.com/ad/ad134/vpaid.js | 
|   mediaType  |  크리에이티브 또는 컴패니언 자산의 MIME 유형입니다.  | 문자열 | video/mp4 | 
|   meta  |  광고에 대한 추가 메타데이터입니다.  | 객체 |  | 
|   mezzanine  |  VPAID 광고에 포함된 경우 지정된 메자닌 MP4 자산의 URL입니다. 경로: `/avails/ads/mediaFiles/mezzanine`  | 문자열 | https://gcdn.2mdn.net/videoplayback/id/itag/ck2/file/file.mp4 | 
|   nextToken  |  해당 값이 존재할 때 결과의 다음 페이지를 가리키는 토큰의 값입니다.  | 문자열 | UFQzOS44NzNTXzIwMjMtMDctMzFUMTY6NTA6MDYuMzUwNjI2ODQ1Wl8x | 
|   nonLinearAds  |  비디오 콘텐츠와 함께 표시되는 비선형 광고입니다.  | 배열 | [] | 
|   nonLinearAdsList  |  비선형 광고 목록입니다.  | 배열 | [] | 
|   scalable  |  비디오를 다른 차원으로 조정할지 여부를 나타냅니다.  | 부울 | true | 
|   skipOffset  |  플레이어가 사용자가 건너뛰기 제어를 사용할 수 있도록 하는 시기를 식별하는 시간 값입니다.  | 문자열 | 00:00:05 | 
|   staticResource  |  광고 구성 요소에 사용되는 정적 크리에이티브 파일의 URL입니다. 경로: `/avails/ads/companionAds/staticResource`  | 문자열 | https://very-interactive-ads.com/campaign1/file.json?c=1019113602 | 
|   vastAdId  |  `Ad` 태그의 `Id` 속성 값입니다.  | 문자열 | ad1 | 
|   width  |  비디오 자산의 픽셀 단위 너비입니다.  | 문자열 | 640 | 
|   xPosition  |  비디오 플레이어 내 아이콘의 가로 위치입니다. 특정 픽셀 값 또는 "왼쪽" 또는 "오른쪽"과 같은 위치일 수 있습니다. 경로: `/avails/ads/icons/attributes/xPosition`  | 문자열 | left 또는 10 | 
|   yPosition  |  비디오 플레이어 내 아이콘의 세로 위치입니다. 특정 픽셀 값 또는 "상단" 또는 "하단"과 같은 위치일 수 있습니다. 경로: `/avails/ads/icons/attributes/yPosition`  | 문자열 | top 또는 10 | 
|   iconClicks  |  아이콘에 대한 클릭 및 추적 정보가 포함되어 있습니다. 경로: `/avails/ads/icons/iconClicks`  | 객체 |  | 
|   iconClickThrough  |  최종 사용자가 아이콘을 클릭할 때 미디어 플레이어가 여는 광고자 페이지의 URL입니다. 경로: `/avails/ads/icons/iconClicks/iconClickThrough`  | 문자열 | https://advertiser.com/landing-page | 
|   iconClickTracking  |  `iconClickThrough` 속성의 추적 URL입니다. 경로: `/avails/ads/icons/iconClicks/iconClickTracking`  | 객체 |  | 
|   iconClickFallbackImages  |  아이콘을 표시할 수 없는 경우 표시할 폴백 이미지 배열입니다. 경로: `/avails/ads/icons/iconClicks/iconClickFallbackImages`  | 배열 |  | 
|   iconViewTracking  |  아이콘이 표시될 때 추적하기 위한 URL입니다. 경로: `/avails/ads/icons/iconViewTracking`  | 문자열 | https://tracking.example.com/icon-view | 
|   offset  |  광고 재생 중에 아이콘이 나타나는 시간의 시간 오프셋입니다. 경로: `/avails/ads/icons/attributes/offset`  | 문자열 | 00:00:05 | 
|   program  |  “AdChoices”와 같은 아이콘과 연결된 프로그램 또는 이니셔티브입니다. 경로: `/avails/ads/icons/attributes/program`  | 문자열 | AdChoices | 
|   pxratio  |  하이 DPI 디스플레이에 사용되는 아이콘 또는 컴패니언 광고의 픽셀 비율입니다. 경로: `/avails/ads/icons/attributes/pxratio` 또는 `/avails/ads/companionAds/attributes/pxratio`  | 문자열 | 1 또는 2 | 
|   type  |  리소스 또는 확장의 유형입니다. 경로: `/avails/ads/extensions/type` 또는 `/avails/ads/adVerifications/executableResource/type`  | 문자열 | text/javascript | 
|   content  |  확장의 콘텐츠입니다. 경로: `/avails/ads/extensions/content`  | 문자열 |  | 
|   language  |  실행 리소스의 프로그래밍 언어입니다. 경로: `/avails/ads/adVerifications/executableResource/language`  | 문자열 | javascript | 
|   browserOptional  |  JavaScript 리소스에 브라우저 지원이 필요한지 여부를 나타냅니다. 경로: `/avails/ads/adVerifications/javaScriptResource/browserOptional`  | 문자열 | true 또는 false | 
|   id  |  스키마의 다양한 요소에 대한 식별자입니다. 경로: `/avails/ads/companionAds/attributes/id` 또는 `/avails/ads/icons/iconClicks/iconClickTracking/id`  | 문자열 | companion-1 | 
|   assetHeight  |  컴패니언 광고 자산의 높이입니다. 경로: `/avails/ads/companionAds/attributes/assetHeight`  | 문자열 | 250 | 
|   assetWidth  |  컴패니언 광고 자산의 너비입니다. 경로: `/avails/ads/companionAds/attributes/assetWidth`  | 문자열 | 300 | 
|   expandedHeight  |  확장 시 컴패니언 광고의 높이입니다. 경로: `/avails/ads/companionAds/attributes/expandedHeight`  | 문자열 | 600 | 
|   expandedWidth  |  확장 시 컴패니언 광고의 너비입니다. 경로: `/avails/ads/companionAds/attributes/expandedWidth`  | 문자열 | 600 | 
|   renderingMode  |  컴패니언 광고의 렌더링 모드입니다. 경로: `/avails/ads/companionAds/attributes/renderingMode`  | 문자열 | default 또는 transparent | 
|   adSlotId  |  컴패니언 광고를 표시해야 하는 광고 슬롯의 ID입니다. 경로: `/avails/ads/companionAds/attributes/adSlotId`  | 문자열 | banner-1 | 
|   creativeType  |  크리에이티브 자산의 MIME 유형입니다. 경로: `/avails/ads/icons/staticResource/creativeType`  | 문자열 | image/png | 

# 광고 추적 활동 타이밍
<a name="ad-reporting-client-side-ad-tracking-schema-activity-timing"></a>

클라이언트 측 보고를 사용하면 플레이어가 정밀도 수준으로 추적 이벤트(비컨)를 내보내야 합니다. MediaTailor 클라이언트 측 추적 스키마를 사용하면 모든 가용 시간에 대해 광고, 컴패니언, 오버레이 및 추적 이벤트, 타이밍 및 기간 정보가 다양한 형식으로 표시되도록 할 수 있습니다.

플레이어에 대해 다음 MediaTailor 키/값 페어를 사용하여 이벤트 추적과 같은 광고 이벤트 활동을 재생 위치와 정확하게 조정합니다.
+ [startTime](ad-reporting-client-side-ad-tracking-schema.md#property-starttime) 
+  [startTimeInSeconds](ad-reporting-client-side-ad-tracking-schema.md#property-starttimeinseconds) 
+  [adProgramDateTime](ad-reporting-client-side-ad-tracking-schema.md#property-adprogramdatetime) 
+  [adID](ad-reporting-client-side-ad-tracking-schema.md#property-adid)/[eventId](ad-reporting-client-side-ad-tracking-schema.md#property-eventid) 

HLS와 DASH는 및 값을 `startTimeInSeconds` 다르게 구현`startTime`합니다.
+ HLS - `startTime` 값은 재생 세션의 시작을 기준으로 합니다. 재생 세션의 시작은 시간 0으로 정의됩니다. 광고의 `startTime`는 가용 구간까지 이어지는 모든 `EXT-INF` 세그먼트 기간의 누적 값의 합계입니다. 광고 또는 추적 이벤트가 속하는 세그먼트의 미디어 시퀀스 번호도 클라이언트 측 추적 응답의 `adId` 또는 `eventId`에 해당합니다.
+ DASH:
  + 라이브/동적 매니페스트 - `startTime` 값은 DASH 매니페스트`MPD@availabilityStartTime`의를 기준으로 합니다. `MPD@avaibilityStartTime`는 스트림을 사용하는 모든 MediaTailor 세션의 타이밍 앵커입니다.
  + VOD/정적 매니페스트 - `startTime` 값은 재생 세션의 시작을 기준으로 합니다. 재생 세션의 시작은 시간 0으로 정의됩니다. 가능 구간 내의 각 광고는 자체 `Period` 요소에 포함되어 있습니다. `Period` 요소에는 클라이언트 측 추적 페이로드의 값과 동일한 `startTime` 값이 있는 `@start` 속성이 있습니다. 는 클라이언트 측 추적 응답`eventId`의 `adId` 또는 `PeriodId` 에도 해당합니다.

**Example HLS:**  
다음 예제에서는 MediaTailor 세션이 시작되었으며 다음 매니페스트는 클라이언트에 제공된 첫 번째 매니페스트입니다.  

```
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:4603263
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:23.295678Z
#EXTINF:4.010667,
https://123.cloudfront.net/out/v1/index_1_34.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:27.306345Z
#EXTINF:4.010667,
https://123.cloudfront.net/out/v1/index_1_35.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:31.317012Z
#EXTINF:4.010667,
https://123.cloudfront.net/out/v1/index_1_36.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:35.327679Z
#EXTINF:4.010667,
https://123.cloudfront.net/out/v1/index_1_37.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:39.338346Z
#EXTINF:2.538667,
https://123.cloudfront.net/out/v1/index_1_38.ts
#EXT-X-DISCONTINUITY
#EXT-X-KEY:METHOD=NONE
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:41.453Z
#EXTINF:2.0,
https://123.cloudfront.net/tm/asset_1080_4_8_00001.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:43.453Z
#EXTINF:2.0,
https://123.cloudfront.net/tm/asset_1080_4_8_00002.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:45.453Z
#EXTINF:2.0,
https://123.cloudfront.net/tm/asset_1080_4_8_00003.ts
```
클라이언트 측 추적 JSON 페이로드에는 다음 값이 적용됩니다.  
+  `startTime`: `"PT18.581355S"` 
+  `startTimeInSeconds`: `18.581` 
+  `availProgramDateTime`: `"2023-05-03T21:24:41.453Z"` 
+  `adId`: `4603269` 

**Example DASH:**  
다음 예제에서 MediaTailor 세션은 매니페스트에서 미드롤을 가져옵니다. 광고 기간인 두 번째 기간의 `@start` 속성 값에는 값과 관련된 `MPD@availabilityStartTime` 값이 있습니다. 이 값은 MediaTailor가 모든 세션에 대해 클라이언트 측 추적 응답 `startTime` 필드에 기록하는 값입니다.  

```
<?xml version="1.0" encoding="UTF-8"?>
<MPD availabilityStartTime="2022-10-05T19:38:39.263Z" minBufferTime="PT10S" minimumUpdatePeriod="PT2S" profiles="urn:mpeg:dash:profile:isoff-live:2011" publishTime="2023-05-03T22:06:48.411Z" suggestedPresentationDelay="PT10S" timeShiftBufferDepth="PT1M30S" type="dynamic" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:scte35="urn:scte:scte35:2013:xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd">
    <BaseURL>https://123.channel-assembly.mediatailor.us-west-2.amazonaws.com/v1/channel/my-channel/</BaseURL>
    <Location>https://123.cloudfront.net/v1/dash/94063eadf7d8c56e9e2edd84fdf897826a70d0df/MediaTailor-Live-HLS-DASH/channel/channel1/dash.mpd?aws.sessionId=794a15e0-2a7f-4941-a537-9d71627984e5</Location>
    <Period id="1683151479166_1" start="PT5042H25M59.903S" xmlns="urn:mpeg:dash:schema:mpd:2011">
        <BaseURL>https://123.cloudfront.net/out/v1/f1a946be8efa45b0931ea35c9055fb74/ddb73bf548a44551a0059c346226445a/eaa5485198bf497284559efb8172425e/</BaseURL>
        <AdaptationSet ...>
            ...
        </AdaptationSet>
    </Period>
    <Period id="1683151599194_1_1" start="PT5042H27M59.931S">
        <BaseURL>https://123.cloudfront.net/tm/94063eadf7d8c56e9e2edd84fdf897826a70d0df/fpc5omz5wzd2rdepgieibp23ybyqyrme/</BaseURL>
        <AdaptationSet ...>
            ...
        </AdaptationSet>
    </Period>
</MPD>
```
클라이언트 측 추적 JSON 페이로드에는 다음 값이 적용됩니다.  
+  `startTime`: `"PT5042H27M59.931S"` 
+  `startTimeInSeconds`: `18152879.931` 
+  `availProgramDateTime`: *null* 
+  `adId`: `1683151599194_1_1` 

# 클라이언트 측 광고 추적을 위한 플레이어 제어 및 기능
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls"></a>

MediaTailor 클라이언트 측 추적 메타데이터는 다양한 플레이어 제어 및 기능을 지원합니다. 다음 목록은 인기 있는 플레이어 컨트롤을 설명합니다.

**Topics**
+ [스크러빙](#ad-reporting-client-side-ad-tracking-schema-player-controls-scrubbing)
+ [광고 카운트다운 타이머](#ad-reporting-client-side-ad-tracking-schema-player-controls-ad-countdown-timer)
+ [건너뛰기 가능한 광고](#ad-reporting-client-side-ad-tracking-schema-player-controls-skippable-ads)
+ [광고 클릭](#ad-reporting-client-side-ad-tracking-schema-player-controls-ad-clickthrough)
+ [컴패니언 광고](#ad-reporting-client-side-ad-tracking-schema-player-controls-companion-ads)
+ [대화형 광고(SIMID)](#ad-reporting-client-side-ad-tracking-schema-player-controls-simid-ads)
+ [대화형 광고(VPAID)](#ad-reporting-client-side-ad-tracking-schema-player-controls-vpaid-ads)
+ [Google WTA(Why This Ad)용 아이콘](#ad-reporting-client-side-ad-tracking-schema-player-controls-google-wta)

## 스크러빙
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-scrubbing"></a>

재생 환경을 개선하기 위해 플레이어는 재생 타임라인에 광고 위치를 표시할 수 있습니다. MediaTailor는 클라이언트 측 추적 응답에서 이러한 광고 위치를 `startTimeInSeconds` 값의 형태로 사용할 수 있도록 합니다.

**참고**  
일부 스트리밍 공급자는 광고 위치를 지나는 스크러빙을 방지합니다.

![\[광고가 재생되는 비디오 타임라인의 MediaTailor 표시 위치를 보여주는 스크린샷입니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/scrubbing.png)


다음 클라이언트 측 추적 페이로드 JSON 응답은 가용 배열의 루트 JSON 객체 내의 가용(아드 브레이크) 시작 시간을 보여줍니다. 플레이어는이 데이터를 사용하여 플레이어 타임라인의 광고 시간 위치를 28초로 표시합니다.

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [...],
      "availId": "7",
      "availProgramDateTime": null,
      "duration": "PT30S",
      "durationInSeconds": 30,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT28S",
      "startTimeInSeconds": 28
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQxMk0zNC44NjhTXzIwMjMtMDctMjFUMjA6MjM6MDcuNzc1NzE2MzAyWl8x",
  "nonLinearAvails": []
}
```

## 광고 카운트다운 타이머
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-ad-countdown-timer"></a>

MediaTailor를 사용하면 광고 카운트다운 타이머를 사용하여 광고 시간을 보는 동안 시청자의 참여를 유지할 수 있습니다. 대상은 타이머를 사용하여 광고 시간이 종료되고 프로그램이 재개되는 시기를 이해할 수 있습니다.

![\[광고 카운트다운 타이머를 표시하는 MediaTailor를 보여주는 스크린샷으로, 프로그램이 재개될 때까지 남은 시간을 대상에게 알려줍니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/ad-countdown-timer.png)


광고 카운트다운 타이머에서 역할을 수행하는 클라이언트 측 추적 메타데이터의 요소는 `startTime`, `startTimeInSeconds`, 및 `duration`입니다`durationInSeconds`. 플레이어는이 메타데이터를 개별적으로 추적하는 세션의 경과 시간과 함께 사용하여 타이머를 표시할 시기와 카운트다운해야 하는 값을 결정합니다.

다음 클라이언트 측 추적 페이로드 JSON 응답은 광고 카운트다운 타이머를 표시하는 데 필요한 정보를 보여줍니다.

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [...],
      "availId": "7",
      "availProgramDateTime": null,
      "duration": "PT30S",
      "durationInSeconds": 30,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT28S",
      "startTimeInSeconds": 28
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQxMk0zNC44NjhTXzIwMjMtMDctMjFUMjA6MjM6MDcuNzc1NzE2MzAyWl8x",
  "nonLinearAvails": []
}
```

세션의 경과 시간이 가능 구간의 시작 시간에 도달하면 플레이어는 가능 구간의 기간과 일치하는 값과 함께 카운트다운 타이머를 표시합니다. 경과 시간이 가용 시작 시간 이후 진행됨에 따라 countdown-timer 값이 감소합니다.

**Example 공식: HLS(라이브 및 VOD) 및 DASH(VOD)에 대한 카운트다운 타이머**  
+ `session_start_time` = 모든 `EXT-INF` 지속 시간 값의 합계 - 세 개의 최신 `EXT-INF` 미디어 시퀀스의 지속 시간 값
+ 타이머 값 = `duration` - (`session_elapsed_time` - `startTime`)

![\[HLS(라이브 및 VOD) 및 DASH(VOD) 매니페스트에 대한 광고 카운트다운 타이머의 계산을 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/ad-countdown-timer-hls-dash-vod.png)


**Example 공식: DASH의 카운트다운 타이머(실시간)**  
+ `session_start_time` = (최신 세그먼트의 `startTime` \$1 `duration`) / `timescale` - `MPD@suggestedPresentationDelay`
+ 타이머 값 = `duration` - (`session_elapsed_time` - `startTime`)

![\[라이브 DASH 매니페스트에 대한 세션의 시작 시간 및 가용 시작 시간을 기준으로 광고 카운트다운 타이머를 계산하는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/ad-countdown-timer-dash-live.png)


## 건너뛰기 가능한 광고
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-skippable-ads"></a>

*건너뛰기 가능 광고*는 최종 사용자가 일부 광고를 건너뛰어 프로그램 보기를 재개할 수 있는 광고 스팟입니다. VAST에서 `Linear@skipOffset` 속성은 건너뛰기 가능한 광고를 식별합니다.

다음 VAST 응답은 건너뛰기 가능한 광고를 사용하는 방법을 보여줍니다.

```
<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad>
    <InLine>
      ...
      <Creatives>
        <Creative id="1" sequence="1">
          <Linear skipoffset="00:00:05">
            <Duration>00:00:15</Duration>
            <MediaFiles>
              <MediaFile id="EMT" delivery="progressive" width="640" height="360" type="video/mp4" bitrate="143" scalable="true" maintainAspectRatio="true"><![CDATA[https://ads.com/file.mp4]]></MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
      ...
    </InLine>
  </Ad>
</VAST>
```

다음 클라이언트 측 추적 페이로드 JSON 응답은 `ads` 배열 내의 광고 메타데이터를 보여줍니다. 배열에는 MediaTailor가 VAST 응답에서 얻은 `skipOffset` 값이 포함됩니다.

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "1",
          "adParameters": "",
          "adProgramDateTime": "2023-07-31T16:11:40.693Z",
          "adSystem": "2.0",
          "adTitle": "AD-skiing-15",
          "adVerifications": [],
          "companionAds": [...],
          "creativeId": "1",
          "creativeSequence": "1",
          "duration": "PT15.015S",
          "durationInSeconds": 15.015,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": "00:00:05",
          "startTime": "PT9.943S",
          "startTimeInSeconds": 9.943,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://adserverbeaconing.com/v1/impression"
              ],
              "duration": "PT15.015S",
              "durationInSeconds": 15.015,
              "eventId": "2697726",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT9.943S",
              "startTimeInSeconds": 9.943
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "2697726",
      "availProgramDateTime": "2023-07-31T16:11:40.693Z",
      "duration": "PT15.015S",
      "durationInSeconds": 15.015,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT9.943S",
      "startTimeInSeconds": 9.943
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "",
  "nonLinearAvails": []
}
```

## 광고 클릭
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-ad-clickthrough"></a>

클릭 URIs 사용하면 광고주가 광고가 시청자의 주의를 끄는 데 얼마나 성공했는지 측정할 수 있습니다. 시청자가 진행 중인 광고의 활성 비디오 프레임을 클릭하면 웹 브라우저가 광고주의 홈 페이지 또는 캠페인 랜딩 페이지에 대한 URI를 엽니다. 플레이어 개발자는 클릭하여 자세히 알아볼 수 있는 메시지와 함께 광고 비디오에 버튼 또는 레이블을 오버레이하는 등의 클릭 동작을 결정합니다. 플레이어 개발자는 최종 사용자가 활성 비디오 프레임을 클릭한 후 광고의 비디오를 일시 중지하는 경우가 많습니다.

![\[비디오 플레이어의 광고 클릭 스크린샷. 최종 사용자는 비디오 프레임을 클릭합니다. 플레이어가 비디오를 일시 중지한 다음 웹 브라우저를 열어 최종 사용자를 광고자의 홈 페이지 또는 캠페인 랜딩 페이지로 안내합니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/ad-clickthrough.png)


MediaTailor는 VAST 응답에 반환된 모든 선형 비디오 클릭 이벤트 URLs을 구문 분석하고 사용할 수 있도록 할 수 있습니다. 다음 VAST 응답은 광고 클릭의 예를 보여줍니다.

```
<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad>
    <InLine>
      ...
      <Creatives>
        <Creative id="1" sequence="1">
          <Linear>
            <Duration>00:00:15</Duration>
            <MediaFiles>
              <MediaFile id="EMT" delivery="progressive" width="1280" height="720" type="video/mp4" bitrate="143" scalable="true" maintainAspectRatio="true"><![CDATA[https://ads.com/file.mp4]]></MediaFile>
            </MediaFiles>
            <VideoClicks>
              <ClickThrough id="EMT"><![CDATA[https://aws.amazon.com]]></ClickThrough>
              <ClickTracking id="EMT"><![CDATA[https://myads.com/beaconing/event=clicktracking]]></ClickTracking>
            </VideoClicks>
          </Linear>
        </Creative>
      </Creatives>
      ...
    </InLine>
  </Ad>
</VAST>
```

다음 클라이언트 측 추적 페이로드 JSON 응답은 MediaTailor가 `trackingEvents` 배열 내에서 클릭 및 클릭 추적 URLs을 표시하는 방법을 보여줍니다. `clickThrough` 이벤트 유형은 클릭-스루 광고를 나타내고 `clickTracking` 이벤트 유형은 클릭-추적 URL을 나타냅니다.

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "1",
          "adParameters": "",
          "adProgramDateTime": "2023-07-31T16:53:40.577Z",
          "adSystem": "2.0",
          "adTitle": "1",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "00006",
          "creativeSequence": "1",
          "duration": "PT14.982S",
          "durationInSeconds": 14.982,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT39.339S",
          "startTimeInSeconds": 39.339,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=impression"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://aws.amazon.com"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "clickThrough",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=clicktracking"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698795",
              "eventProgramDateTime": null,
              "eventType": "clickTracking",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "2698188",
      "availProgramDateTime": "2023-07-31T16:53:40.577Z",
      "duration": "PT14.982S",
      "durationInSeconds": 14.982,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT39.339S",
      "startTimeInSeconds": 39.339
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQzOS4zMzlTXzIwMjMtMDctMzFUMTY6NTQ6MDQuODA1Mzk2NTI5Wl8x",
  "nonLinearAvails": []
}
```

## 컴패니언 광고
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-companion-ads"></a>

*동반 광고*는 선형 크리에이티브와 함께 표시됩니다. 컴패니언 광고를 사용하면 제품, 로고 및 브랜드 정보를 표시하여 광고 스팟의 효과를 높일 수 있습니다. 디스플레이 광고에는 빠른 응답(QR) 코드와 클릭 가능한 영역이 있어 시청자의 참여를 촉진할 수 있습니다.

MediaTailor는 VAST 응답에서 컴패니언 광고를 지원합니다. 각각 `StaticResource`, `iFrameResource`및 `HTMLResource` 노드에서 메타데이터를 전달할 수 있습니다.

다음 VAST 응답은 선형 광고 및 컴패니언 광고의 위치와 형식의 예를 보여줍니다.

```
<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad>
    <InLine>
      ...
      <Creatives>
        <Creative id="1" sequence="1">
          <Linear>
            <Duration>00:00:10</Duration>
            <MediaFiles>
              <MediaFile id="EMT" delivery="progressive" width="640" height="360" type="video/mp4" bitrate="143" scalable="true" maintainAspectRatio="true"><![CDATA[https://ads.com/file.mp4]]></MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
        <Creative id="2" sequence="1">
          <CompanionAds>
            <Companion id="2" width="300" height="250">
              <StaticResource creativeType="image/png"><![CDATA[https://emt.com/companion/9973499273]]></StaticResource>
              <TrackingEvents>
                <Tracking event="creativeView"><![CDATA[https://beacon.com/1]]></Tracking>
              </TrackingEvents>
              <CompanionClickThrough><![CDATA[https://beacon.com/2]]></CompanionClickThrough>
            </Companion>
            <Companion id="3" width="728" height="90">
              <StaticResource creativeType="image/png"><![CDATA[https://emt.com/companion/1238901823]]></StaticResource>
              <TrackingEvents>
                <Tracking event="creativeView"><![CDATA[https://beacon.com/3]]></Tracking>
              </TrackingEvents>
              <CompanionClickThrough><![CDATA[https://beacon.com/4]]></CompanionClickThrough>
            </Companion>
          </CompanionAds>
        </Creative>
      </Creatives>
      ...
    </InLine>
  </Ad>
</VAST>
```

데이터는 `/avail/x/ads/y/companionAds` 목록의 클라이언트 측 추적 응답에 표시됩니다. 각 선형 크리에이티브에는 최대 6개의 컴패니언 광고가 포함될 수 있습니다. 아래 예제와 같이 컴패니언 광고가 목록에 표시됩니다.

**참고**  
애플리케이션 개발자는 크리에이티브가 끝날 때 컴패니언 광고를 명시적으로 제거하거나 언로드하는 로직을 구현하는 것이 가장 좋습니다.

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "0",
          "adParameters": "",
          "adProgramDateTime": null,
          "adSystem": "EMT",
          "adTitle": "sample",
          "adVerifications": [],
          "companionAds": [
            {
              "adParameters": null,
              "altText": null,
              "attributes": {
                "adSlotId": null,
                "apiFramework": null,
                "assetHeight": null,
                "assetWidth": null,
                "expandedHeight": null,
                "expandedWidth": null,
                "height": "250",
                "id": "2",
                "pxratio": null,
                "renderingMode": null,
                "width": "300"
              },
              "companionClickThrough": "https://beacon.com/2",  
              "companionClickTracking": null,
              "htmlResource": null,
              "iFrameResource": null,
              "sequence": "1",
              "staticResource": "https://emt.com/companion/9973499273",
              "trackingEvents": [
                {
                  "beaconUrls": [
                    "https://beacon.com/1"
                  ],
                  "eventType": "creativeView"
                }
              ]
            },
            {
              "adParameters": null,
              "altText": null,
              "attributes": {
                "adSlotId": null,
                "apiFramework": null,
                "assetHeight": null,
                "assetWidth": null,
                "expandedHeight": null,
                "expandedWidth": null,
                "height": "90",
                "id": "3",
                "pxratio": null,
                "renderingMode": null,
                "width": "728"
              },
              "companionClickThrough": "https://beacon.com/4",
              "companionClickTracking": null,
              "htmlResource": null,
              "iFrameResource": null,
              "sequence": "1",
              "staticResource": "https://emt.com/companion/1238901823",
              "trackingEvents": [
                {
                  "beaconUrls": [
                    "https://beacon.com/3"
                  ],
                  "eventType": "creativeView"
                }
              ]
            }
          ],
          "creativeId": "1",
          "creativeSequence": "1",
          "duration": "PT10S",
          "durationInSeconds": 10,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT0S",
          "startTimeInSeconds": 0,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://beacon.com/impression/1"
              ],
              "duration": "PT10S",
              "durationInSeconds": 10,
              "eventId": "0",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT0S",
              "startTimeInSeconds": 0
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "0",
      "availProgramDateTime": null,
      "duration": "PT10S",
      "durationInSeconds": 10,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT0S",
      "startTimeInSeconds": 0
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQxMFNfMjAyMy0wNy0wNlQyMToxMDowOC42NzQ4NDA1NjJaXzE%3D",
  "nonLinearAvails": []
}
```

## 대화형 광고(SIMID)
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-simid-ads"></a>

*SecureInteractive Media Interface Definition*(SIMID)은 대화형 광고국(IAB)의 VAST 4.x 표준에 도입된 대화형 광고의 표준입니다. SIMID는 플레이어의 기본 선형 크리에이티브에서 대화형 요소의 로드를 분리하여 VAST 응답의 두 가지를 모두 참조합니다. MediaTailor는 기본 크리에이티브에 연결하여 재생 환경을 유지하고 클라이언트 측 추적 응답에 대화형 구성 요소의 메타데이터를 배치합니다.

다음 예제 VAST 4 응답에서 SIMID 페이로드는 `InteractiveCreativeFile` 노드 내에 있습니다.

```
<?xml version="1.0"?>
<VAST xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad id="1234567">
    <InLine>
      <AdSystem>SampleAdSystem</AdSystem>
      <AdTitle>Linear SIMID Example</AdTitle>
      <Description>SIMID example</Description>
      <Error>https://www.beacons.com/error</Error>
      <Impression>https://www.beacons.com/impression</Impression>
      <Creatives>
        <Creative sequence="1">
          <Linear>
            <Duration>00:00:15</Duration>
            <TrackingEvents>
                ...
            </TrackingEvents>
            <VideoClicks>
              <ClickThrough id="123">https://aws.amazon.com</ClickThrough>
              <ClickTracking id="123">https://www.beacons.com/click</ClickTracking>
            </VideoClicks>
            <MediaFiles>
              <MediaFile delivery="progressive" type="video/mp4">
                                https://interactive-ads.com/interactive-media-ad-sample/media/file.mp4
                            </MediaFile>
              <InteractiveCreativeFile type="text/html" apiFramework="SIMID" variableDuration="true">
                                https://interactive-ads.com/interactive-media-ad-sample/sample_simid.html
                            </InteractiveCreativeFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
    </InLine>
  </Ad>
</VAST>
```

다음 VAST 3 응답에서 SIMID 페이로드는 `Extensions` 노드 내에 있습니다.

```
<?xml version="1.0"?>
<VAST xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad id="1234567">
    <InLine>
      <AdSystem>SampleAdSystem</AdSystem>
      <AdTitle>Linear SIMID Example</AdTitle>
      <Description>SIMID example</Description>
      <Impression>https://www.beacons.com/impression</Impression>
      <Creatives>
        <Creative id="1" sequence="1">
          <Linear>
            <Duration>00:00:15</Duration>
            <TrackingEvents>
                ...
            </TrackingEvents>
            <VideoClicks>
              <ClickThrough id="123">https://aws.amazon.com</ClickThrough>
              <ClickTracking id="123">https://myads.com/beaconing/event=clicktracking</ClickTracking>
            </VideoClicks>
            <MediaFiles>
              <MediaFile delivery="progressive" type="video/mp4">
                                https://interactive-ads.com/interactive-media-ad-sample/media/file.mp4
                            </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
      <Extensions>
        <Extension type="InteractiveCreativeFile">
          <InteractiveCreativeFile type="text/html" apiFramework="SIMID" variableDuration="true">
            https://interactive-ads.com/interactive-media-ad-sample/sample_simid.html
          </InteractiveCreativeFile>
        </Extension>
      </Extensions>
    </InLine>
  </Ad>
</VAST>
```

다음 클라이언트 측 추적 응답에서 SIMID 데이터가 `/avails/x/ads/y/extensions` 목록에 나타납니다.

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "1",
          "adParameters": "",
          "adProgramDateTime": "2023-07-31T16:53:40.577Z",
          "adSystem": "2.0",
          "adTitle": "Linear SIMID Example",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "1",
          "creativeSequence": "1",
          "duration": "PT14.982S",
          "durationInSeconds": 14.982,
          "extensions": [
            {
              "content": "<InteractiveCreativeFile type=\"text/html\" apiFramework=\"SIMID\" variableDuration=\"true\">\nhttps://interactive-ads.com/interactive-media-ad-sample/sample_simid.html</InteractiveCreativeFile>",
              "type": "InteractiveCreativeFile"
            }
          ],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT39.339S",
          "startTimeInSeconds": 39.339,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=impression"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://aws.amazon.com"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "clickThrough",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=clicktracking"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698795",
              "eventProgramDateTime": null,
              "eventType": "clickTracking",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "2698188",
      "availProgramDateTime": "2023-07-31T16:53:40.577Z",
      "duration": "PT14.982S",
      "durationInSeconds": 14.982,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT39.339S",
      "startTimeInSeconds": 39.339
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQzOS4zMzlTXzIwMjMtMDctMzFUMTY6NTQ6MDQuODA1Mzk2NTI5Wl8x",
  "nonLinearAvails": []
}
```

## 대화형 광고(VPAID)
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-vpaid-ads"></a>

*비디오 플레이어 광고 인터페이스 정의*(VPAID)는 광고와 비디오 플레이어 간의 프로토콜을 지정하여 광고 상호 작용 및 기타 기능을 활성화합니다. 라이브 스트림의 경우 MediaTailor는 가용 시간 동안 슬레이트 세그먼트를에 스티칭하고 비디오 플레이어가 사용하는 클라이언트 측 추적 응답에 VPAID 크리에이티브에 대한 메타데이터를 배치하여 VPAID 형식을 지원합니다. 플레이어는 VPAID 파일을 다운로드하고 선형 크리에이티브를 재생하고 클라이언트의 스크립트를 실행합니다. 플레이어는 슬레이트 세그먼트를 재생*해서는 안* 됩니다.

**참고**  
VPAID는 VAST 4.1부터 더 이상 사용되지 않습니다.

![\[VPAID 광고 재생 다이어그램. MediaTailor는 콘텐츠 타임라인의 가용 기간 동안 슬레이트 세그먼트를 연결합니다. 플레이어는 가용 기간 동안 VPAID 자산으로 전환합니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/interactive-ads-vpaid.png)


다음 예제는 VAST 응답의 VPAID 콘텐츠를 보여줍니다.

```
<?xml version="1.0"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad id="1234567">
    <InLine>
      <AdSystem>GDFP</AdSystem>
      <AdTitle>VPAID</AdTitle>
      <Description>Vpaid Linear Video Ad</Description>
      <Error>http://www.example.com/error</Error>
      <Impression>http://www.example.com/impression</Impression>
      <Creatives>
        <Creative sequence="1">
          <Linear>
            <Duration>00:00:00</Duration>
            <TrackingEvents>
              <Tracking event="start">http://www.example.com/start</Tracking>
              <Tracking event="firstQuartile">http://www.example.com/firstQuartile</Tracking>
              <Tracking event="midpoint">http://www.example.com/midpoint</Tracking>
              <Tracking event="thirdQuartile">http://www.example.com/thirdQuartile</Tracking>
              <Tracking event="complete">http://www.example.com/complete</Tracking>
              <Tracking event="mute">http://www.example.com/mute</Tracking>
              <Tracking event="unmute">http://www.example.com/unmute</Tracking>
              <Tracking event="rewind">http://www.example.com/rewind</Tracking>
              <Tracking event="pause">http://www.example.com/pause</Tracking>
              <Tracking event="resume">http://www.example.com/resume</Tracking>
              <Tracking event="fullscreen">http://www.example.com/fullscreen</Tracking>
              <Tracking event="creativeView">http://www.example.com/creativeView</Tracking>
              <Tracking event="acceptInvitation">http://www.example.com/acceptInvitation</Tracking>
            </TrackingEvents>
            <AdParameters><![CDATA[ {"videos":[ {"url":"https://my-ads.com/interactive-media-ads/media/media_linear_VPAID.mp4","mimetype":"video/mp4"}]} ]]></AdParameters>
            <VideoClicks>
              <ClickThrough id="123">http://google.com</ClickThrough>
              <ClickTracking id="123">http://www.example.com/click</ClickTracking>
            </VideoClicks>
            <MediaFiles>
              <MediaFile delivery="progressive" apiFramework="VPAID" type="application/javascript" width="640" height="480"> https://googleads.github.io/googleads-ima-html5/vpaid/linear/VpaidVideoAd.js </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
    </InLine>
  </Ad>
</VAST>
```

다음 예제에서는 추적 정보를 보여줍니다.

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "1",
          "adParameters": "",
          "adProgramDateTime": "2023-07-31T16:53:40.577Z",
          "adSystem": "2.0",
          "adTitle": "1",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "00006",
          "creativeSequence": "1",
          "duration": "PT14.982S",
          "durationInSeconds": 14.982,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT39.339S",
          "startTimeInSeconds": 39.339,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=impression"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://aws.amazon.com"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "clickThrough",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=clicktracking"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698795",
              "eventProgramDateTime": null,
              "eventType": "clickTracking",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "2698188",
      "availProgramDateTime": "2023-07-31T16:53:40.577Z",
      "duration": "PT14.982S",
      "durationInSeconds": 14.982,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT39.339S",
      "startTimeInSeconds": 39.339
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQzOS4zMzlTXzIwMjMtMDctMzFUMTY6NTQ6MDQuODA1Mzk2NTI5Wl8x",
  "nonLinearAvails": []
}{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "2922274",
          "adParameters": "",
          "adProgramDateTime": "2023-08-14T19:49:53.998Z",
          "adSystem": "Innovid Ads",
          "adTitle": "VPAID",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "",
          "creativeSequence": "",
          "duration": "PT16.016S",
          "durationInSeconds": 16.016,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [
              {
                "apiFramework": "VPAID",
                "bitrate": 0,
                "codec": null,
                "delivery": "progressive",
                "height": 9,
                "id": "",
                "maintainAspectRatio": false,
                "maxBitrate": 0,
                "mediaFileUri": "http://my-ads.com/mobileapps/js/vpaid/1h41kg?cb=178344c0-8e67-281a-58ca-962e4987cd60&deviceid=&ivc=",
                "mediaType": "application/javascript",
                "minBitrate": 0,
                "scalable": false,
                "width": 16
              }
            ],
            "mezzanine": "http://my-ads.com/mobileapps/js/vpaid/1h41kg?cb=178344c0-8e67-281a-58ca-962e4987cd60&deviceid=&ivc="
          },
          "skipOffset": null,
          "startTime": "PT8M42.289S",
          "startTimeInSeconds": 522.289,
          "trackingEvents": [
            {
              "beaconUrls": [
                "about:blank"
              ],
              "duration": "PT16.016S",
              "durationInSeconds": 16.016,
              "eventId": "2922274",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT8M42.289S",
              "startTimeInSeconds": 522.289
            }
          ],
          "vastAdId": "1h41kg"
        }
      ],
      "availId": "2922274",
      "availProgramDateTime": "2023-08-14T19:49:53.998Z",
      "duration": "PT16.016S",
      "durationInSeconds": 16.016,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT8M42.289S",
      "startTimeInSeconds": 522.289
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQ4TTQyLjI4OVNfMjAyMy0wOC0xNFQxOTo1MDo0MS4zOTc5MjAzODVaXzE%3D",
  "nonLinearAvails": []
}
```

## Google WTA(Why This Ad)용 아이콘
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-google-wta"></a>

*AdChoices*는 시청자에게 광고의 대상 지정 방식을 포함하여 시청자가 보는 광고에 대한 정보를 제공하는 업계 표준입니다.

![\[Google Why This Ad(WTA) 로고. WTA는 시청자에게 해당 광고가 어떻게 타겟팅되었는지를 포함하여 시청자가 보는 광고에 대해 알립니다.\]](http://docs.aws.amazon.com/ko_kr/mediatailor/latest/ug/images/google-wta.png)


MediaTailor 클라이언트 측 추적 API는 VAST 응답의 VAST 확장 노드에 전달되는 아이콘 메타데이터를 지원합니다. VAST 응답의 WTA에 대한 자세한 내용은 [이 샘플 VAST XML 응답을](https://storage.googleapis.com/interactive-media-ads/ad-tags/ima_wta_sample_vast_3.xml) 참조하세요.

**참고**  
MediaTailor는 현재 VAST 버전 3만 지원합니다.

```
<VAST>
    <Ad>  
    <InLine>  
       ...
      <Extensions>
        <Extension type="IconClickFallbackImages">
          <IconClickFallbackImages program="GoogleWhyThisAd">
            <IconClickFallbackImage width="400" height="150">
              <AltText>Alt icon fallback</AltText>
              <StaticResource creativeType="image/png"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png]]></StaticResource>
            </IconClickFallbackImage>
          </IconClickFallbackImages>
          <IconClickFallbackImages program="AdChoices">
            <IconClickFallbackImage width="400" height="150">
              <AltText>Alt icon fallback</AltText>
              <StaticResource creativeType="image/png"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png?size=1x]]></StaticResource>
            </IconClickFallbackImage>
            <IconClickFallbackImage width="800" height="300">
              <AltText>Alt icon fallback</AltText>
              <StaticResource creativeType="image/png"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png?size=2x]]></StaticResource>
            </IconClickFallbackImage>
          </IconClickFallbackImages>
        </Extension>
      </Extensions>
    </InLine>
  </Ad>
</VAST>
```

다음 예제는 `/avails/x/ads/y/extensions` 목록의 클라이언트 측 추적 응답을 보여줍니다.

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "0",
          "adParameters": "",
          "adProgramDateTime": null,
          "adSystem": "GDFP",
          "adTitle": "Google Why This Ad VAST 3 Sample",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "7891011",
          "creativeSequence": "1",
          "duration": "PT10S",
          "durationInSeconds": 10,
          "extensions": [
            {
              "content": "<IconClickFallbackImages program=\"GoogleWhyThisAd\">      
                          <IconClickFallbackImage height=\"150\" width=\"400\">      
                          <AltText>Alt icon fallback</AltText>      
                          <StaticResource creativeType=\"image/png\"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png]]>
                          </StaticResource>     
                          </IconClickFallbackImage>    
                          </IconClickFallbackImages>     
                          <IconClickFallbackImages program=\"AdChoices\">     
                          <IconClickFallbackImage height=\"150\" width=\"400\">     
                          <AltText>Alt icon fallback</AltText>       
                          <StaticResource creativeType=\"image/png\"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png?size=1x]]>
                          </StaticResource>      
                          </IconClickFallbackImage>      
                          <IconClickFallbackImage height=\"300\" width=\"800\">       
                          <AltText>Alt icon fallback</AltText>       
                          <StaticResource creativeType=\"image/png\"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png?size=2x]]>
                          </StaticResource>      
                          </IconClickFallbackImage>     
                          </IconClickFallbackImages>",
              "type": "IconClickFallbackImages"
            }
          ],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": "00:00:03",
          "startTime": "PT0S",
          "startTimeInSeconds": 0,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://example.com/view"
              ],
              "duration": "PT10S",
              "durationInSeconds": 10,
              "eventId": "0",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT0S",
              "startTimeInSeconds": 0
            }
          ],
          "vastAdId": "123456"
        }
      ],
      "availId": "0",
      "availProgramDateTime": null,
      "duration": "PT10S",
      "durationInSeconds": 10,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT0S",
      "startTimeInSeconds": 0
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQxMFNfMjAyMy0wNy0wNlQyMDo0MToxNy45NDE4MDM0NDhaXzE%3D",
  "nonLinearAvails": []
}
```

# 클라이언트 측 비컨
<a name="ad-reporting-client-side-beaconing"></a>

클라이언트 측 추적 `startTimeInSeconds` 요소를 사용하면 MediaTailor를 사용하여 비컨 타이밍을 지원할 수 있습니다.

다음 JSON 응답은 노출, 시작, 사분위수 및 완료와 같은 주요 비컨 유형을 보여줍니다.

**참고**  
대화형 광고국(IAB) 비디오 노출 측정 지침에는 노출 시 광고 콘텐츠가 클라이언트 측에 로드되고 최소한 플레이어에 렌더링되기 시작하는 시간이 필요하다고 명시되어 있습니다. 자세한 내용은 IAB 웹 사이트의 [Digital Video Ad Serving Template(VAST)](https://www.iab.com/guidelines/vast/)을 참조하세요.

```
{
  "avails": [
    {
      "ads": [
        {
          "adId": "8104385",
          "duration": "PT15.100000078S",
          "durationInSeconds": 15.1,
          "startTime": "PT17.817798612S",
          "startTimeInSeconds": 17.817,
          "trackingEvents": [
          {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=impression"
              ],
              "duration": "PT15.100000078S",
              "durationInSeconds": 15.1,
              "eventId": "8104385",
              "eventType": "impression",
              "startTime": "PT17.817798612S",
              "startTimeInSeconds": 17.817
            },
            {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=start"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0.0,
              "eventId": "8104385",
              "eventType": "start",
              "startTime": "PT17.817798612S",
              "startTimeInSeconds": 17.817
            },
            {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=firstQuartile"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0.0,
              "eventId": "8104386",
              "eventType": "firstQuartile",
              "startTime": "PT21.592798631S",
              "startTimeInSeconds": 21.592
            },
             {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=midpoint"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0.0,
              "eventId": "8104387",
              "eventType": "midpoint",
              "startTime": "PT25.367798651S",
              "startTimeInSeconds": 25.367
            },
            {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=thirdQuartile"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0.0,
              "eventId": "8104388",
              "eventType": "thirdQuartile",
              "startTime": "PT29.14279867S",
              "startTimeInSeconds": 29.142
            },
            {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=complete"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0.0,
              "eventId": "8104390",
              "eventType": "complete",
              "startTime": "PT32.91779869S",
              "startTimeInSeconds": 32.917
            }
          ]
        }
      ],
      "availId": "8104385",
      "duration": "PT15.100000078S",
      "durationInSeconds": 15.1,
      "startTime": "PT17.817798612S",
      "startTimeInSeconds": 17.817
    }
  ]
}
```

# 서버 측 광고 비컨이 있는 하이브리드 모드
<a name="ad-reporting-hybrid-mode"></a>

MediaTailor는 세션 추적을 위한 하이브리드 모드를 지원합니다. 이 모드에서 서비스는 재생 관련 광고 추적 이벤트를 내보내지만 세션에 대해 전체 클라이언트 측 추적 페이로드를 사용할 수 있도록 합니다.

재생 접두사를 사용하여 하이브리드 추적을 활성화하려면 플레이어에서 프로토콜에 따라 다음 형식 중 하나의 요청을 사용하여 새 MediaTailor 재생 세션을 초기화합니다.

**Example : HLS 형식**  

```
POST master.m3u8
    {
        "adsParams": {
           "deviceType": "ipad"
       },
       "reportingMode":"server"
    }
```

**Example : DASH 형식**  

```
POST manifest.mpd
    {
        "adsParams": {
           "deviceType": "ipad"
       },
       "reportingMode":"server"
    }
```

MediaTailor는 하이브리드 모드에서 다음 추적 이벤트를 유지합니다.
+ 노출
+ 시작
+ 첫 번째 사분위수
+ Midpoint
+ 3사분위수
+ 완료
+ `breakStart` (vmap)
+ `breakEnd` (vmap)

# 클라이언트 측 광고 추적 통합
<a name="ad-reporting-client-side-ad-tracking-integrations"></a>

이 섹션에서는 MediaTailor와 다양한 클라이언트 측 광고 추적 서버 간의 통합에 대해 설명합니다.

**Topics**
+ [Open 측정 SDK](#ad-reporting-client-side-ad-tracking-integrations-open-measurement-sdk)
+ [Datazoom 프리 플레이어 SDKs](#ad-reporting-client-side-ad-tracking-integrations-dz)
+ [Roku 광고 프레임워크(RAF)](#ad-reporting-client-side-ad-tracking-integrations-raf)
+ [TheoPlayer](#ad-reporting-client-side-ad-tracking-integrations-theoplayer)
+ [MediaTailor SDK](#ad-reporting-client-side-ad-tracking-integrations-mediatailor-sdk)

## Open 측정 SDK
<a name="ad-reporting-client-side-ad-tracking-integrations-open-measurement-sdk"></a>

Interactive Advertising Bureau(IAB) Open Measurement SDK(OM SDK)는 웹 비디오 및 네이티브 앱 환경에 제공되는 광고에 대한 타사 가시성 및 확인 측정을 용이하게 합니다.

이전 VAST 버전 3 문서의 경우 확장 유형이 인 확장 노드로 확인 코드를 로드해야 합니다`AdVerifications`. 확장 노드의 루트는 VAST 4.1 요소와 스키마가 동일한 `AdVerifications` 노드입니다.

OM SDK를 더 쉽게 채택할 수 있도록 MediaTailor는 Datazoom과 협력하여 개방형 측정을 위해 구성되고 확인된 무료 플레이어 SDKs를 제공합니다. 자세한 내용은 [Datazoom 프리 플레이어 SDKs](#ad-reporting-client-side-ad-tracking-integrations-dz) 단원을 참조하십시오.

**참고**  
MediaTailor는 현재 VAST 버전 3만 지원합니다.

**Example : 버전 4.1 이전 VAST 3의 확인 노드**  

```
...
<Extensions>
    <Extension type="AdVerifications">
        <AdVerifications>
            <Verification vendor="company.com-omid">
                <JavaScriptResource apiFramework="omid" browserOptional="true">
                    <![CDATA[https://verification.com/omid_verification.js]]>
                </JavaScriptResource>
                <TrackingEvents>
                    <Tracking event="verificationNotExecuted">
                        <![CDATA[https://verification.com/trackingurl]]>
                    </Tracking>
                </TrackingEvents>
                <VerificationParameters>
                    <![CDATA[verification params key/value pairs]]>
                </VerificationParameters>
            </Verification>
        </AdVerifications>
    </Extension>
</Extensions>
```

MediaTailor는 `<Extensions>` 노드에서 `AdVerifications` 데이터를 추출하여 클라이언트 측 추적 응답의 `adVerifications` 배열에 배치합니다.

**Example : 클라이언트 측 추적 응답의 adVerifications 배열**  

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "3062770",
          "adParameters": "",
          "adProgramDateTime": "2023-08-23T16:25:40.914Z",
          "adSystem": "2.0",
          "adTitle": "AD-polarbear-15",
          "adVerifications": [
            {
              "executableResource": [],
              "javaScriptResource": [
                {
                  "apiFramework": "omid",
                  "browserOptional": "true",
                  "uri": "https://verification.com/omid_verification.js"
                }
              ],
              "trackingEvents": [
                {
                  "event": "verificationNotExecuted",
                  "uri": "https://verification.com/trackingurl"
                }
              ],
              "vendor": "company.com-omid",
              "verificationParameters": "verification params key value pairs"
            }
          ],
          "companionAds": [],
          "creativeId": "00006",
          "creativeSequence": "1",
          "duration": "PT14.982S",
          "durationInSeconds": 14.982,
          "extensions": [
            {
              "content": "<AdVerifications>\n\t\t\t\t\t\t<Verification vendor=\"company.com-omid\">\n\t\t\t\t\t\t\t<JavaScriptResource apiFramework=\"omid\" browserOptional=\"true\"><![CDATA[https://verification.com/omid_verification.js;]]></JavaScriptResource>\n\t\t\t\t\t\t\t<TrackingEvents>\n\t\t\t\t\t\t\t\t<Tracking event=\"verificationNotExecuted\"><![CDATA[;https://verification.com/trackingurl;]]></Tracking>\n\t\t\t\t\t\t\t</TrackingEvents>\n\t\t\t\t\t\t\t<VerificationParameters><![CDATA[verification params key/value pairs;]]></VerificationParameters>\n\t\t\t\t\t\t</Verification>\n\t\t\t\t\t</AdVerifications>",
              "type": "AdVerifications"
            }
          ],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT10.11S",
          "startTimeInSeconds": 10.11,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://n8ljfs0h09.execute-api.us-west-2.amazonaws.com/v1/impression"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "3062770",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT10.11S",
              "startTimeInSeconds": 10.11
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "3062770",
      "availProgramDateTime": "2023-08-23T16:25:40.914Z",
      "duration": "PT14.982S",
      "durationInSeconds": 14.982,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT10.11S",
      "startTimeInSeconds": 10.11
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQxMC4xMVNfMjAyMy0wOC0yM1QxNjoyNjoyNC4yNDYxMDIxOTBaXzE%3D",
  "nonLinearAvails": []
}
```

**참고**  
IAB Tech Lab과 협력하여 애플리케이션이 규정 준수를 보장하기 위해 매년 인증을 받도록 합니다.

OM SDK에 대한 자세한 내용은 IAB Tech Lab 웹 사이트의 [Open Measurement SDK](https://iabtechlab.com/standards/open-measurement-sdk/)를 참조하세요.

## Datazoom 프리 플레이어 SDKs
<a name="ad-reporting-client-side-ad-tracking-integrations-dz"></a>

플레이어 SDKs를 더 쉽게 채택할 수 있도록 MediaTailor는 Datazoom과 협력하여 [Google Ad Manager와의 클라이언트 측 AWS Elemental MediaTailor 통합](gam-integration-pal.md) 및 IAB Tech 로 구성 및 테스트된 무료 플레이어 SDKs를 제공합니다[Open 측정 SDK](#ad-reporting-client-side-ad-tracking-integrations-open-measurement-sdk).

Datazoom 플레이어 SDK는 다음 기능을 지원합니다.
+ 라이브 및 VOD 재생 목록
+ DASH 및 HLS 사양
+ Bitmovin, exoplayer, Android 미디어 플레이어, Apple AVPlayer, Brightcove, Chromecast Receiver, Dash.js, hls.js, JWPlayer, Shaka player, THEO player, Video.js, Roku 등에 대한 플레이어 공급업체 지원
+ 선택한 디바이스에서 사용 가능한 경우 IAB Tech Lab Open Measurement 인증
+ 클릭스루 이벤트 처리
+ 광고 카운트다운 타이머, 광고 오버레이 및 비선형 이벤트, 광고 중단 시작, 광고 중단 종료와 같은 광고 이벤트 디스패처
+ 클라이언트 측 광고 비컨
+ Google Programmatic Access Library(PAL) SDK, 선택적 구성 설정

또한 Datazoom은 플레이어 SDKs 지원하는 유료 분석 및 원격 측정 서비스를 제공합니다. 고객은 Datazoom 관리 콘솔에서 플레이어 SDK 원격 측정을 옵트인하고 제어할 수 있습니다. Datazoom 플레이어 SDKs에 액세스하고 부가가치 원격 측정 및 분석 서비스에 대해 자세히 알아보려면 [Datazoom 사이트의](https://www.datazoom.io/partner-aws) 연락처 정보를 사용하세요.

## Roku 광고 프레임워크(RAF)
<a name="ad-reporting-client-side-ad-tracking-integrations-raf"></a>

Roku Ad Framework(RAF)는 Roku 플랫폼 전체에서 일관된 광고 환경을 유지합니다. 비디오 광고를 포함한 모든 채널은 RAF에 대한 Roku의 인증 요구 사항을 충족해야 합니다. 특히 앱은 항상 RAF를 통한 클라이언트 측 이벤트 실행을 사용해야 합니다. MediaTailor는 서버 측 광고 삽입(SSAI) 공급자로서 클라이언트 측 이벤트 실행을 지원합니다. RAFX SSAI 어댑터는 SSAI 매니페스트 서버 또는 스티처 및 RAF 모두에 인터페이스를 제공합니다. 이러한 인터페이스에는 다음이 포함됩니다.
+ `masterURL` 응답을 구문 분석하고 `playURL`, `AdURL`및 광고 메타데이터를 추출합니다.
+ MediaTailor SSAI 광고 메타데이터를 RAF 사용 가능 광고 메타데이터로 변환하고 재생을 위해 RAF를 구성합니다.
+ 스트림 이벤트 및 시간 지정된 메타데이터 관찰.
+ 스트림 이벤트, 광고 메타데이터 및 발사 이벤트 픽셀을 정시에 일치시킵니다.
+ MediaTailor SSAI 매니페스트 서버에서 요구하는 `AdURL`대로를 핑/폴링한 다음 RAF를 구문 분석하고 재구성합니다.

RAF용 SSAI 어댑터에 대한 자세한 내용은 [Roku 웹 사이트의 Roku 어댑터를 사용하여 서버 측 광고 삽입 구현을 참조하세요](https://developer.roku.com/docs/developer-program/advertising/ssai-adapters.md).

## TheoPlayer
<a name="ad-reporting-client-side-ad-tracking-integrations-theoplayer"></a>

MediaTailor와의 TheoPlayer 통합은 다음을 수행합니다.
+ VOD 및 라이브 워크플로 모두에 대해 HLS 및 DASH에 대한 MediaTailor 클라이언트 측 이벤트 추적을 지원하는 기능을 제공합니다.
+ 선형 광고에 대해서만 추적 비컨 전송을 지원합니다.
+ 광고 중에 탐색을 비활성화합니다. 그러나 사용자가 광고 시간을 지나려고 할 때 광고를 재생하기 위한 로직은 없습니다.

TheoPlayer의 SSAI에 대한 자세한 내용과 MediaTailor용 웹, Android, iOS 및 tvOS SDKs를 검토하려면 TheoPlayer 웹 사이트의 [MediaTailor](https://docs.theoplayer.com/how-to-guides/01-ads/12-mediatailor.md)를 참조하세요.

## MediaTailor SDK
<a name="ad-reporting-client-side-ad-tracking-integrations-mediatailor-sdk"></a>

AWS Elemental은 JavaScript 기반 소프트웨어 개발 키트(SDK)를 유지 관리합니다. AWS Elemental은 묵시적 보증 없이 SDK를 있는 그대로 제공합니다. SDK를 참조 데모로 사용하여 MediaTailor를 사용하여에 대한 온보딩을 간소화합니다. SDK는 MediaTailor 클라이언트 측 추적 API와 상호 작용하는 방법을 보여줍니다. SDK는 HTML5-based 플레이어에 대한 클라이언트 측 광고 추적 및 보고를 구현합니다. SDK는 MediaTailor 클라이언트 측 보고 세션을 초기화한 다음 광고 추적 정보를 주기적으로 요청합니다. 재생 중에 SDK는 새 광고 이벤트가 감지되면 광고 추적 이벤트를 내보냅니다.

MediaTailor SDK는 다음 기능을 지원합니다.
+ 라이브 및 VOD 재생 목록
+ DASH 및 HLS 사양
+ 클릭스루 이벤트 처리
+ Ad-event 디스패처
+ 사용자 지정 이벤트 후크
+ 클라이언트 측 광고 비컨. 광고 비컨 전송에 대한 자세한 내용은 섹션을 참조하세요[클라이언트 측 비컨](ad-reporting-client-side-beaconing.md).

**참고**  
MediaTailor용 JavaScript SDK 샘플을 받으려면 AWS 지원 티켓을 제출하세요. 패키지 및 해당 파일에 대한 다운로드 링크를 받게 됩니다.

## GetTracking을 사용한 광고 비컨 페이징
<a name="gettracking"></a>

`GetTracking` 엔드포인트를 사용하여 플레이어에게 반환되는 광고 수를 좁힙니다. 예를 들어 매니페스트 기간이 넓으면 많은 시간 동안 반환된 광고 비컨 수가 플레이어 성능에 영향을 미칠 수 있습니다.

`GetTracking`는 반환된 비컨 목록을 페이징하여 반환된 비컨 수를 좁히는 데 사용할 수 있는 `NextToken` 값을 반환합니다. `NextToken` 값을 순환하여 광고 비컨 `StartTimeInSeconds` 필드의 원하는 값을 찾을 수 있습니다.
+ 에 대한 첫 번째 호출에서 각의 `NextToken` 및 값을 포함하여 매니페스트 창에 속할 수 있는 `GetTracking`모든 광고가 반환됩니다.
+ `GetTracking` 요청에가 포함되지 *않은* 경우 매니페스트 창의 `NextToken`모든 광고가 반환됩니다.
+ `GetTracking` 요청에가 포함되어 `NextToken` 있지만 반환할 새 비컨이 없는 경우 MediaTailor는 원래 요청에서 전송`NextToken`한 값과 동일한 값을 반환합니다.
+ 광고에 해당하는 비컨이 더 이상 없는 경우는 해당 응답에서 광고를 `GetTracking` 제거합니다.
+ 의 토큰은 24시간 후에 `GetTracking` 만료됩니다. `NextToken` 값이 24시간보다 오래된 경우에 대한 다음 호출은 null 값을 `GetTracking` 반환합니다`NextToken`.

### 플레이어에서 GetTracking의 일반화된 호출 시퀀스
<a name="gettracking.generalsequence"></a>

클라이언트 플레이어의 `GetTracking` 요청은 토큰과 관련된 `NextToken` 및 광고와 비컨이 포함된 요청 본문이 있는 POST입니다.

```
https://YouMediaTailorUrl/v1/tracking
{

     "NextToken": "value"
     .
     .
     .
}
```

`GetTracking`와 함께를 사용하는 일반적인 순서는 다음과 `NextToken` 같습니다.

1. 를 처음 호출합니다`GetTracking`.

   모든 광고 및 비컨과 후속 호출을 `NextToken` 위한 첫 번째가 반환됩니다.

1. 값이 null이면 MediaTailor`NextToken`는 모든 광고 비컨을 반환합니다.

1. 이 만료되면 MediaTailor`NextToken`는 HTTP 반환 코드 400 오류 메시지를 반환합니다.

   를 새로 호출`GetTracking`하여 유효한 `NextToken`를 검색합니다.

1. 전체 응답을 스캔하여 원하는 범위에 있는 광고 비컨`StartTimeInSeconds`의를 찾습니다.

1. 원하는와 `NextToken` 연결된 값을 `GetTracking` 사용하여를 새로 호출합니다`StartTimeInSeconds`.

1. 필요한 경우 재생하려는 광고를 정확히 찾을 때까지 반환된 광고를 다시 순환합니다.

#### 확장 예제
<a name="gettracking.extendedexample"></a>

이 예제에서는 `GetTracking`의를 사용하여 플레이어`NextToken`에게 반환되는 광고 비컨 수를 제한하는 방법을 보여줍니다.

MediaTailor는 `GetTracking` 요청을 수신합니다. 응답에는 ID가 9935407인 광고와 `StartTimeInSeconds` 값이 52.286 및 48.332초인 비컨 2개가 포함됩니다.

MediaTailor는 다음과 `NextToken` 같이를 사용하여 JSON 응답을 전송합니다.

```
  {
  "NextToken": JF57ITe48t1441mv7TmLKuZLroxDzfIslp6BiSNL1IJmzPVMDN0lqrBYycgMbKEb
  "avails": [
    {
      "ads": [
        {
          "adId": "9935407",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "",
          "creativeSequence": "",
          "duration": "PT15S",
          "durationInSeconds": 15,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "startTime": "PT30S",
          "StartTimeInSeconds": 45,
          "trackingEvents": [
            {
              "beaconUrls": [
                "http://adserver.com/tracking?event=Impression "
              ],
              "duration": "PT0S",
              "durationInSeconds": 0,
              "eventId": "9935414",
              "eventType": "secondQuartile",
              "startTime": "PT52.286S",
              "StartTimeInSeconds": 52.286
            },
            {
              "beaconUrls": [
                "http://adserver.com/tracking?event=firstQuartile"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0,
              "eventId": "9935412",
              "eventType": "firstQuartile",
              "startTime": "PT48.332S",
              "StartTimeInSeconds": 48.332
            }
          ],
          "vastAdId": ""
        }
      ],
      "startTime": "PT46.47S",
      "StartTimeInSeconds": 46.47
    }
  ]
}
```

다음 `GetTracking` 요청에서 MediaTailor는 JF57ITe48t1441mv7TmLKuZLroxDzfIslp6BiSNL1IJmzPVMDN0lqrBYycgMbKEb `NextToken` 값으로 응답합니다.

MediaTailor`StartTimeInSeconds`는 이전 호출`NextToken`의에 설정된와 일치하는 광고 및 비컨으로 응답합니다.

이제 응답에 ID 9235407의 이전 광고 외에 ID 9935407의 다른 광고가 포함되어 있다고 가정합니다. 광고 ID 9235407의 비컨에는 `StartTimeInSeconds`s 132.41 및 70.339가 있습니다.

MediaTailor는 세션의 모든 비컨을 반복하여 ID가 9235407인 광고의 비컨 3 및 비컨 4인 52.286초보다 `StartTimeInSeconds` 큰 비컨을 선택합니다.

```
{
  "NextToken": ZkfknvbfsdgfbsDFRdffg12EdffecFRvhjyjfhdfhnjtsg5SDGN
  "avails": [
    {
      "ads": [
        {
          "adId": "9235407",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "",
          "creativeSequence": "",
          "duration": "PT15.816S",
          "durationInSeconds": 19.716,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "startTime": "PT2M0S",
          "StartTimeInSeconds": 120.0,
          "trackingEvents": [
            {
              "beaconUrls": [
                "http://adserver.com/tracking?event=complete"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0,
              "eventId": "8935414",
              "eventType": "firstQuartile",
              "startTime": "PT1M10.330S",
              "StartTimeInSeconds": 70.339
            },
            {
              "beaconUrls": [
                "http://adserver.com/tracking?event=thirdQuartile"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0,
              "eventId": "8935412",
              "eventType": "secondQuartile",
              "startTime": "PT2M12.41S",
              "StartTimeInSeconds": 132.41
            }
          ],
          "vastAdId": ""
        },   
      ],
      "startTime": "PT36.47S",
      "StartTimeInSeconds": 36.47
    }
  ]
}
```