라이브 API: SSAI를 사용한 큐 포인트 및 광고 비콘
개요
서버 측 광고 삽입(SSAI)라이브 스트리밍 이벤트 중에 지정된 시간에 광고를 표시 할 수 있습니다. 일반적인 정보는라이브 API : 서버 측 광고 삽입(SSAI)문서.
큐 포인트
광고 시간은 큐 포인트에 의해 실행되며 두 가지 방법으로 지정할 수 있습니다.
- 인코더에서 Brightcove로 보냄
- 를 통해 생성 된 즉시 큐 포인트Live API
인코더에서
Brightcove 실시간 전달 시스템은 인코더가 제출 한 큐 포인트를 AMF 형식으로 해석 할 수 있습니다.
AMFDataList
[0]:onCuePoint
[1]:{Obj[]:
time: 1.9889, //Difference from PTS of THIS packet to the first PTS of the 1st video frame in the adbreak
name: "scte35",
type: "event",
ad_server_data: "YWJjZGVmZ2g=", // optional introduced by Brightcove. It is a base64 encoded json map of parameters e.g. {‘key’:’value’}
parameters: {Obj[]:
type: "avail_in",
duration: 12.0
}
}
참고:
- 현재 RTMP 입력에서는
avail_in
유형 큐 포인트만 지원됩니다. - SCTE-35 큐 포인트는 RTP 및 SRT 입력에서 지원됩니다.
수동 큐 포인트 삽입
다음을 사용하여 즉시 큐 포인트를 만들 수 있습니다. Live API보내서POST
의뢰:
방법 | POST |
---|---|
URL | https://api.bcovlive.io/v1/jobs/Job_ID/cuepoint |
머리글 | X-API-KEY: your API KEY |
다음을 지정하는 요청 본문을 포함합니다.
필드 | 유형 | 설명 |
---|---|---|
duration |
정수 | 휴식 시간 (초)입니다. 삽입되는 큐 포인트의 지속 시간은세그먼트 길이의 2 배 이상직장에서. 참조기간 예 . |
timecode |
SMPTE 형식 | 선택 사항: SMPTE 형식의 타임 코드 HH : MM : SS : FF (FF = 프레임) : 변수 집합 (키 / 값 쌍)이 adServer에 전달되어야하는시기를 지정합니다. 생략하면 큐 포인트가 즉시 삽입됩니다. timecode 속성을 사용하는 경우 인코더는 SMPTE 형식 ( HH:MM:SS:FF ) 타임 코드는tc 속성을 통해OnFI . 타임 코드는 라이브 스트림의 시작부터입니다. |
ad_server_data |
객체 | 선택 사항: 전달하는 키 / 값 쌍은 사용중인 광고 서버에 따라 다릅니다. 자세한 내용은 광고 서버 문서 및광고 매크로를 사용하여 광고 타겟팅부분. |
기간 예
삽입되는 큐 포인트의 지속 시간은세그먼트 길이의 2 배 이상직장에서.
예를 들어, 10 초 큐 포인트직장에서"segment_seconds"=4
, 잘 작동합니다. 그러나 작업에 동일한 큐 포인트를 삽입하면"segment_seconds"=6
다음 오류가 발생합니다.
"error": "The parameter duration should be greater than
or equal to (2 * target duration) of the job"
샘플 요청 본문
{
"duration": 30,
"timecode": "15:50:49:16",
"ad_server_data" : {
"adbreakid": 12312
"breaktheme": "fitness"
}
}
참고 사항
- Wirecast 및 OBS와 같은 소프트웨어 인코더는 다음을 통한 전송 타임 코드를 지원하지 않습니다.
OnFI
RTMP 스트림의 패킷 - Elemental 하드웨어 인코더는 다음을 통해 전송 타임 코드를 지원합니다.
OnFI
RTMP 스트림의 패킷
샘플 응답
{
"id": "Job_ID",
"cue_point": {
"id": "adBreak-2f58393ada1442d98eca0817fa565ba4",
"duration": 30,
"accuracy": "segment", [Can be segment
or frame
]
"inserted_at": "2017-07-21T09:30:46.307Z" [ Time when the cue point was inserted in the stream]
},
}
비콘
비콘은 광고 재생 여부와 재생 횟수를 추적하기 위해 타사 분석으로 전송되는 재생 데이터 포인트입니다. 이 섹션에서는 다음을 사용하여 설정할 수있는 비콘 유형을 살펴 보겠습니다. Live API및 데이터를 제공하는 데 사용할 수있는 변수입니다. 다음 섹션에서는 비콘 세트를 만들고 관리하는 데 사용하는 API 요청에 대해 자세히 설명합니다.
비콘 유형
비콘 유형 | 설명 |
---|---|
Load |
세션 당 한 번 실행되고 최상위 매니페스트가 요청 될 때만 트리거됩니다. |
Play |
콘텐츠가 요청되었으며 첫 번째 세그먼트가 반환되었습니다. |
Heartbeat |
목표 기간 (세그먼트 초) |
AdStart |
개별 광고 시작 |
AdFirstQuartile |
첫 번째 광고 사 분위수 (25 %) |
AdMidpoint |
두 번째 광고 사 분위수 (50 %) |
AdThirdQuartile |
세 번째 광고 사 분위수 (75 %) |
AdComplete |
개별 광고 완료 |
AdBreakStart |
광고 시간이 시작되었습니다. |
AdBreakComplete |
광고 시간이 종료되었습니다 |
비콘 / 광고 변수
아래 표는 비콘 URL에 데이터를 제공하는 데 사용할 수있는 변수를 보여줍니다. 변수를 포함하려면 다음과 같이 이중 중괄호로 묶습니다. {{job.job_id}}
. 전체 예제는 비콘 세트 관리에 대한 다음 섹션을 참조하십시오.
변수 |
설명
|
---|---|
session.session_id |
고유 한 세션 ID
|
job.job_id |
고유 한 작업 ID
|
videocloud.video_id |
VideoCloud 비디오로 만든 작업에만 사용할 수 있습니다.
|
application_ad_configuration.description |
세션 생성시 응용 프로그램의 가치
|
random.int32 |
임의의 32 비트 부호있는 정수
|
random.int64 |
임의의 64 비트 부호있는 정수
|
random.uint32 |
임의의 32 비트 부호없는 정수
|
random.uint64 |
임의의 64 비트 부호없는 정수
|
random.uuid |
임의의 UUID
|
server.timestamputc |
ads-api에서 호출이 이루어진 epoch 시간 (밀리 초)
|
client.useragent |
세션 생성시 http 사용자 에이전트 헤더 값
|
client.ipaddress |
세션 생성시 http x-forwarded-for 헤더 값 (제공된 경우), 그렇지 않으면 원격 주소
|
client.referrer |
세션 생성시 http 참조 헤더 값 (참고 : 올바른 철자 임)
|
client.referer |
세션 생성시 http 참조 자 헤더 값 (http 맞춤법)
|
client.ipuaid |
client.ipaddress 및 client.useragent의 해시 값
|
live.adbreak |
(현재 미사용)
|
live.adbreakdurationms |
광고 시간 (밀리 초)
|
live.adbreakduration |
배정 밀도 부동 소수점 초 단위 광고 시간
|
live.adbreakdurationint |
광고 시간 (정수 초)
|
live.adbreak.timestamputc.wallclock |
광고 서버를 호출 한 epoch 시간 (밀리 초)
|
live.adbreak.timestamputc.origin |
오리진 청크리스트의 epoch 시간 (밀리 초)입니다. 이 값은 원본 청크 목록에 큐 아웃 청크가 생성 된 시간을 나타냅니다.
|
live.adbreak.timestamputc.session |
ssai 청크리스트의 epoch 시간 (밀리 초). 이 값은 ssai 청크 목록에서 큐 아웃 청크의 시간을 나타냅니다. adbreak 내용과 adbreak gap은 일반적으로 동일하지 않기 때문에 첫 번째 adbreak 이후에는
live.adbreak.timestamputc.origin ~와 다르다live.adbreak.timestamputc.session . 이 값은SSAI청크리스트. |
SCTE-35 광고 변수
그만큼케이블 통신 엔지니어 협회 (SCTE)실시간 스트림에 대한 동적 광고 삽입 표준을 정의합니다. 다음 표에는 SCTE-35 광고 구성 변수가 요약되어 있습니다.
변수 |
설명
|
---|---|
scte35_eventID |
SCTE35 메시지와 함께 전달 된 고유 이벤트 ID입니다.
|
scte35_programID |
SCTE35 메시지와 함께 전달 된 고유 프로그램 ID입니다.
|
scte35_availNum |
광고에 사용할 수있는 특정 접속 시간에 대한 ID이며 SCTE35 메시지를 통해 전송됩니다.
|
scte35_breakDuration |
SCTE35 메시지와 함께 전달 된 프로그램의 90kHz 클록 틱으로 표시되는 광고 시간의 휴식 시간입니다.
|
scte35_spliceTime |
SCTE35 메시지와 함께 전달 된 프로그램의 90kHz 클럭의 틱으로 표시되는 광고 시간의 연결 시간입니다.
|
비콘 세트 관리
이 섹션에서는 비콘 세트를 관리하기위한 API 요청에 대해 자세히 설명합니다. 비콘 유형 및 변수는 이전 섹션을 참조하십시오.
라이브 작업에 비콘 세트를 추가하려면 먼저 비콘 세트를 만든 다음 다음과 같이 작업을 만들 때 ID를 포함합니다.
{
"live_stream": true,
"region": "us-west-2",
"reconnect_time": 30,
"ad_insertion": true,
"beacon_set": "beacon_set_id", ...
비콘 세트 만들기
비콘 세트를 만들려면POST
의뢰:
방법 | POST |
---|---|
URL | https://api.bcovlive.io/v1/ssai/beaconsets |
머리글 | X-API-KEY: your API KEY |
샘플 요청 본문
{
"account_id": "User's Account ID [Optional]",
"beacon_urls": [
{
"beacon_url": "https://myserver.com/beaconRX/{{job.job_id}}/load?position=load&sid={{session.session_id}}&jid={{job.job_id}}&app={{application_ad_configuration.description}}&rnd32={{random.int32}}&rnd64={{random.int64}}&bid={{random.uuid}}&t={{server.timestamputc}}&ua={{client.useragent}}&ip={{client.ipaddress}}&ref={{client.referrer}}&ref={{client.referer}}&ab={{live.adbreak}}&abd={{live.adbreakduration}}&abdi={{live.adbreakdurationint}}",
"beacon_type": "Load"
},
{
"beacon_url": "https://myserver.com/beaconRX/{{job.job_id}}/play?position=play&sid={{session.session_id}}&jid={{job.job_id}}&app={{application_ad_configuration.description}}&rnd32={{random.int32}}&rnd64={{random.int64}}&bid={{random.uuid}}&t={{server.timestamputc}}&ua={{client.useragent}}&ip={{client.ipaddress}}&ref={{client.referrer}}&ref={{client.referer}}&ab={{live.adbreak}}&abd={{live.adbreakduration}}&abdi={{live.adbreakdurationint}}",
"beacon_type": "Play"
}
]
}
샘플 응답
{
"beacon_set": {
"beacon_urls": [{
"beacon_url": "https://myserver.com/beaconRX/{{job.job_id}}/load?position=load&sid={{session.session_id}}&jid={{job.job_id}}&app={{application_ad_configuration.description}}&rnd32={{random.int32}}&rnd64={{random.int64}}&bid={{random.uuid}}&t={{server.timestamputc}}&ua={{client.useragent}}&ip={{client.ipaddress}}&ref={{client.referrer}}&ref={{client.referer}}&ab={{live.adbreak}}&abd={{live.adbreakduration}}&abdi={{live.adbreakdurationint}}",
"beacon_type": "Load"
},
{
"beacon_url": "https://myserver.com/beaconRX/{{job.job_id}}/play?position=play&sid={{session.session_id}}&jid={{job.job_id}}&app={{application_ad_configuration.description}}&rnd32={{random.int32}}&rnd64={{random.int64}}&bid={{random.uuid}}&t={{server.timestamputc}}&ua={{client.useragent}}&ip={{client.ipaddress}}&ref={{client.referrer}}&ref={{client.referer}}&ab={{live.adbreak}}&abd={{live.adbreakduration}}&abdi={{live.adbreakdurationint}}",
"beacon_type": "Play"
}],
"beacon_set_id": "Inserted Beacon Set ID",
"account_id": "USER's ACCOUNT ID"
}
"inserted": true
}
비콘 세트 업데이트
비콘 세트를 업데이트하는 것은 하나를 만드는 것과 유사합니다. 제출PUT
의뢰:
방법 | PUT |
---|---|
URL | https://api.bcovlive.io/v1/ssai/beaconsets/beaconset/beacon_set_id |
머리글 | X-API-KEY: your API KEY |
샘플 요청 본문
{
"account_id": "User's Account ID [Optional]",
"beacon_urls": [
{
"beacon_url": "https://myserver.com/beaconRX/load",
"beacon_type": "Load"
},
{
"beacon_url": "https://myserver.com/beaconRX/play",
"beacon_type": "Play"
}
]
}
샘플 응답
{
"beacon_set": {
"account_id": "User's Account ID",
"beacon_set_id": "Beacon set ID",
"beacon_urls": [{
"beacon_url": "https://myserver.com/beaconRX/load",
"beacon_type": "Load"
},
{
"beacon_url": "https://myserver.com/beaconRX/play",
"beacon_type": "Play"
}],
"updated_beacon_set": {
"beacon_set_id": "Beacon set ID",
"beacon_urls": [{
"beacon_url": "https://myserver.com/beaconRX/load",
"beacon_type": "Load"
},
{
"beacon_url": "https://myserver.com/beaconRX/play",
"beacon_type": "Play"
}],
"account_id": "User's Account ID"
}
}
}
비콘 세트 가져 오기
계정에 대한 비콘 세트를 검색하려면GET
의뢰:
방법 | GET |
---|---|
URL | https://api.bcovlive.io/v1/ssai/beaconsets/account/Account ID |
머리글 | X-API-KEY: your API KEY |
샘플 응답
[{
"account_id": "User's Account ID",
"beacon_set_id": "Beacon set ID1",
"beacon_urls": [{
"beacon_url": "https://myserver.com/beaconRX/load",
"beacon_type": "Load"
}]
},
{
"account_id": "User's Account ID",
"beacon_set_id": "Beacon set ID2",
"beacon_urls": [{
"beacon_url": "https://myserver.com/beaconRX2/load",
"beacon_type": "Load"
},
{
"beacon_url": "https://myserver.com/beaconRX2/play",
"beacon_type": "Play"
}]
}]
사용자 요청을위한 비콘 세트 가져 오기
요청 URL에 계정 ID를 포함하지 않고 요청하는 사용자의 계정에 대한 비콘 세트를 가져올 수도 있습니다.
방법 | GET |
---|---|
URL | https://api.bcovlive.io/v1/ssai/beaconsets |
머리글 | X-API-KEY: your API KEY |
샘플 응답
[{
"account_id": "User's Account ID",
"beacon_set_id": "Beacon set ID1",
"beacon_urls": [{
"beacon_url": "https://myserver.com/beaconRX/load",
"beacon_type": "Load"
}]
},
{
"account_id": "User's Account ID",
"beacon_set_id": "Beacon set ID2",
"beacon_urls": [{
"beacon_url": "https://myserver.com/beaconRX2/load",
"beacon_type": "Load"
},
{
"beacon_url": "https://myserver.com/beaconRX2/play",
"beacon_type": "Play"
}]
}]
ID로 설정된 비콘 가져 오기
ID로 설정된 단일 비콘을 검색하려면GET
의뢰:
방법 | GET |
---|---|
URL | https://api.bcovlive.io/v1/ssai/beaconsets/beaconset/beacon_set_id |
머리글 | X-API-KEY: your API KEY |
샘플 응답
{
"account_id": "User account ID",
"beacon_set_id": "Beacon set ID",
"beacon_urls": [{
"beacon_type": "Load",
"beacon_url": "https://myserver.com/beaconRX2/load"
},
{
"beacon_type": "Play",
"beacon_url": "https://myserver.com/beaconRX2/play"
}]
}
비콘 세트 삭제
마지막으로 비콘 세트를 삭제하려면DELETE
의뢰:
방법 | DELETE |
---|---|
URL | https://api.bcovlive.io/v1/ssai/beaconsets/beaconset/beacon_set_id |
머리글 | X-API-KEY: your API KEY |
샘플 응답
응답은 다음과 같습니다.
{
"beacon_set_id": "Beacon set ID",
"deleted": true
}
부록
아래는 Elemental 인코더에 대한 샘플 큐 포인트 설정을 보여주는 스크린 샷입니다.