Avail Suppression, 광고를 일부러 건너뛰는 이유
라이브 채널에 룩백 윈도우를 길게 잡아두면, 시청자는 지금 이 순간이 아니라 몇 시간 전 구간부터 볼 수 있습니다. 그런데 광고 서버는 시청자가 언제부터 보기 시작했는지 모릅니다. 룩백 구간에 있던 광고까지 전부 새로 개인화해버리면, 시청자는 자신이 보기도 전에 이미 지나간 광고 자리에 낯선 광고가 다시 꽂히는 걸 보게 됩니다.
반대 상황도 있습니다. 시청자가 채널을 돌리다가 하필 광고 중간에 합류하면, 그 광고는 몇 초 뒤 끝나버립니다. 이 짧은 순간을 위해 광고 서버를 호출하고 타겟팅을 돌리는 건 비용 대비 효과가 없습니다.
AWS MediaTailor는 이 두 상황을 위해 Avail Suppression이라는 기능을 제공합니다. 이름 그대로, 특정 조건에서는 광고 시간(avail)의 개인화 자체를 건너뜁니다.
Avail Suppression이 하는 일
Avail Suppression을 켜면 MediaTailor는 라이브 엣지를 기준으로 정한 구간 안에서 광고 개인화를 하지 않습니다. 반대로 그 구간 밖에서는 평소처럼 광고를 채웁니다.
적용 범위에는 제약이 있습니다. VOD와 live-to-VOD 워크플로우에는 쓸 수 없고 라이브 워크플로우에서만 지원됩니다. 서버 가이드 광고 삽입(SGAI) 방식도 대상이 아닙니다. SGAI는 광고 결정 자체를 다른 방식으로 처리하기 때문에 애초에 Avail Suppression 구성이 필요 없습니다.
구성 경로는 네 가지입니다. MediaTailor 콘솔, AWS CLI, MediaTailor API, 그리고 클라이언트가 보내는 재생 세션 요청 파라미터입니다. 이 중 재생 세션 요청 파라미터는 나머지 세 경로로 이미 설정해둔 값을 덮어씁니다.
라이브 엣지의 앞과 뒤
Avail Suppression의 첫 번째 결정은 방향입니다. 라이브 엣지보다 앞선 구간을 볼 것인지, 뒤따르는 구간을 볼 것인지를 모드로 정합니다.
BEHIND_LIVE_EDGE는 룩백 시나리오를 위한 모드입니다. 라이브 엣지에서 지정한 값만큼 거슬러 올라간 지점을 기준으로 삼고 그 지점보다 오래된 광고 시간은 개인화하지 않습니다.
값을 00:00:00으로 두면 Avail Suppression 경계가 라이브 엣지 자체와 같아집니다. 그러면 라이브 엣지 이전에 시작한 광고는 전부 개인화하지 않고, 라이브 엣지를 넘어선 이후의 광고만 개인화합니다. 값을 45분처럼 늘리면, 그 45분짜리 구간 안에서 새로 시작한 광고는 개인화하고 그보다 앞서 이미 지나간 광고는 그대로 둡니다. 구간이 시작되는 순간 진행 중이던 광고 하나만 예외로, 그건 개인화하지 않습니다.
AFTER_LIVE_EDGE는 정반대로 움직입니다. 라이브 엣지 뒤로 지정한 값만큼의 구간을 Avail Suppression 구간으로 잡고 그 구간이 끝난 뒤에 시작하는 광고만 개인화합니다.
이게 바로 중간 참여 시청자를 위한 모드입니다. 세션이 초기화된 시점이 라이브 엣지보다 앞에 있어도, Avail Suppression 구간이 끝날 때까지는 광고 개인화를 미룹니다. 채널을 돌리다 우연히 걸린 광고 자리에 굳이 타겟 광고를 새로 꽂지 않는 셈입니다.
세 파라미터로 정의하는 규칙
| 파라미터 | 역할 | 값 |
|---|---|---|
availSuppressionMode | Avail Suppression 방향을 정합니다. 기본값은 OFF입니다. | OFF / BEHIND_LIVE_EDGE / AFTER_LIVE_EDGE |
availSuppressionValue | 라이브 엣지 기준 상대 시간입니다. | HH:MM:SS, URL로 보낼 때는 인코딩 필요 |
availSuppressionFillPolicy | 구간에 걸친 광고를 통째로 처리할지, 부분으로 나눠 처리할지 정합니다. | FULL_AVAIL_ONLY / PARTIAL_AVAIL |
모드와 값은 항상 세트로 필요합니다. 콘솔에서 모드를 정하고 쿼리 파라미터로 값만 따로 보내는 식으로 소스를 섞을 수는 없습니다.
진행 중이던 광고는 어떻게 되나
BEHIND_LIVE_EDGE는 항상 FULL_AVAIL_ONLY로 고정됩니다. 광고 시간을 통째로만 취급한다는 뜻입니다.
AFTER_LIVE_EDGE에서는 PARTIAL_AVAIL을 선택할 수 있습니다. Avail Suppression 구간이 끝나는 순간 광고가 이미 진행 중이었다면, 구간 이후에 해당하는 부분만 개인화하고 구간 중에 해당하는 부분은 그대로 둡니다. 광고 시간 하나가 Avail Suppression 구간의 시작보다도 먼저, 그러니까 세션이 초기화되기도 전에 시작해서 Avail Suppression 구간 끝까지 이어지는 경우도 마찬가지입니다. 구간 이후 부분만 개인화합니다.
단 하나, 세션이 초기화되기 전에 이미 시작된 광고가 Avail Suppression 구간 시작 시점까지도 계속 진행 중이라면 이야기가 다릅니다. 이 경우에는 PARTIAL_AVAIL이어도 그 광고 시간 전체를 개인화하지 않습니다. 시청자가 합류하기도 전에 시작된 광고를 부분적으로라도 새로 끼워 넣는 건 어차피 의미가 없기 때문입니다.
직접 구성하기
콘솔이나 API로 미리 설정해둔 값이 있어도, 재생 세션 요청에 파라미터를 실어 보내면 그 값이 우선합니다.
서버 측에서는 aws.availSuppression을 기본 쿼리로 두고 이름과 값을 이어 붙입니다.
GET <mediatailorURL>/v1/master/<hashed-account-id>/<origin-id>/index.m3u8?aws.availSuppressionMode=BEHIND_LIVE_EDGE&aws.availSuppressionValue=00%3A00%3A21클라이언트 측에서는 재생 세션을 여는 POST 요청 본문에 availSuppression 객체를 넣습니다.
POST parent.m3u8
{
"availSuppression": {
"mode": "BEHIND_LIVE_EDGE",
"value": "00:00:21",
"fillPolicy": "FULL_AVAIL_ONLY"
}
}정리
Avail Suppression은 화려한 기능이 아닙니다. 그냥 특정 구간에서 광고 개인화를 안 하고 넘어가는, 어떻게 보면 소극적인 기능입니다. 하지만 룩백 윈도우가 긴 채널이나 시청자 유입이 잦은 라이브에서는 이 소극적인 판단 하나가 광고 서버 호출 낭비를 막고 시청자가 보지도 않을 광고 자리에 개인화를 낭비하는 일을 막아줍니다.
그렇다면 Tencent Cloud StreamPackage는 이 Avail Suppression에 해당하는 상황을 어떻게 처리하고 있을까요. 이 부분은 다른 글에서 따로 정리해보겠습니다.