이 가이드에서는 포드 게재 API와 매니페스트 조작기를 사용하여 HLS 또는 DASH 라이브 스트림을 로드하는 클라이언트 애플리케이션을 개발하는 방법을 설명합니다.
기본 요건
계속하려면 다음이 필요합니다.
Pod serving redirectDAI 유형으로 구성된 라이브 스트림 이벤트의 맞춤 애셋 키입니다. 이 키를 가져오려면 다음 단계를 따르세요.SOAP API 클라이언트 라이브러리를 사용하여
LiveStreamEvent객체와dynamicAdInsertionType속성이POD_SERVING_REDIRECTenum 값으로 설정된LiveStreamEventService.createLiveStreamEvents메서드를 호출합니다. 모든 클라이언트 라이브러리의 경우 클라이언트 라이브러리 및 예시 코드를 참고하세요.
플랫폼에서 양방향 미디어 광고 (IMA) SDK를 사용할 수 있는지 확인합니다. IMA SDK를 사용하여 수익을 개선하는 것이 좋습니다. 자세한 내용은 DAI용 IMA SDK 설정을 참고하세요.
스트림 요청하기
사용자가 스트림을 선택하면 다음을 실행합니다.
라이브 스트림 서비스 메서드에
POST요청을 실행합니다. 자세한 내용은 메서드: 스트림을 참고하세요.application/x-www-form-urlencoded또는application/json형식으로 광고 타겟팅 매개변수를 전달합니다. 이 요청은 Google DAI에 스트림 세션을 등록합니다.다음 예에서는 스트림 요청을 수행합니다.
양식 인코딩
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const params = new URLSearchParams({ cust_params: 'section=sports&page=golf,tennis' }).toString(); const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params }); console.log(await response.json());JSON 인코딩
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ cust_params: { section: 'sports', page: 'golf,tennis' } }) }); console.log(await response.json());성공하면 다음과 비슷한 출력이 표시됩니다.
{ "stream_id": "8d2b2292-6356-4c0e-94be-cece01d2df2e:DLS", "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/", "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata", "session_update_url": "https://dai.google.com/linear/.../session", "polling_frequency": 10 }JSON 응답에서 스트림 세션 ID를 찾아 후속 단계를 위해 다른 데이터를 저장합니다.
광고 메타데이터 폴링
광고 메타데이터를 폴링하려면 다음 단계를 따르세요.
스트림 등록 응답에서
metadata_url값을 읽습니다.엔드포인트에
GET요청을 합니다. 자세한 내용은 메서드: metadata를 참고하세요.다음 예에서는 광고 메타데이터를 가져옵니다.
const response = await fetch(metadata_url); console.log(await response.json());성공하면 현재 및 예정된 광고 시점에 대한 PodMetadata 응답이 표시됩니다.
{ "tags":{ "google_5555555555":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"firstquartile" }, "google_1234567890123456789":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"progress" }, ... }, "ads":{ "0000229834_ad1":{ "ad_break_id":"0000229834", "position":1, "duration":15, "clickthrough_url":"https://.../", ... }, ... }, "ad_breaks":{ "0000229834":{ "type":"mid", "duration":15, "ads":1 }, ... } }이후 단계를 위해
tags객체를 저장합니다.polling_frequency값을 사용하여 타이머를 설정하여 모든 연속 광고 시점의 메타데이터를 정기적으로 요청합니다.
동영상 플레이어에 스트림 로드
등록 응답에서 세션 ID를 가져온 후 ID를 매니페스트 조작기에 전달하거나 매니페스트 URL을 구성하여 스트림을 동영상 플레이어에 로드합니다.
세션 ID를 전달하려면 매니페스트 조작기 문서를 참고하세요. 매니페스트 조작기를 개발하는 경우 라이브 스트림용 매니페스트 조작기를 참고하세요.
다음 예에서는 매니페스트 URL을 어셈블합니다.
https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"
플레이어가 준비되면 재생을 시작합니다.
광고 이벤트 수신 대기
스트림의 컨테이너 형식에서 시간 제한 메타데이터를 확인합니다.
전송 스트림 (TS) 컨테이너가 있는 HLS 스트림은 시간 제한 ID3 태그를 사용하여 시간 제한 메타데이터를 전달합니다. 자세한 내용은 HTTP 라이브 스트리밍(HLS)을 사용하는 Common Media Application Format 정보를 참고하세요.
DASH 스트림은
EventStream요소를 사용하여 매니페스트의 이벤트를 지정합니다.세그먼트에 ID3 태그를 비롯한 페이로드 데이터용 이벤트 메시지 (
emsg) 상자가 포함된 경우 DASH 스트림은InbandEventStream요소를 사용합니다. 자세한 내용은 InbandEventStream을 참고하세요.DASH 및 HLS를 비롯한 CMAF 스트림은 ID3 태그가 포함된
emsg상자를 사용합니다.
스트림에서 ID3 태그를 가져오려면 동영상 플레이어 가이드를 참고하세요. 자세한 내용은 시간이 지정된 메타데이터 처리 가이드를 참고하세요.
ID3 태그에서 광고 이벤트 ID를 가져오려면 다음 단계를 따르세요.
urn:google:dai:2018또는https://aomedia.org/emsg/ID3로scheme_id_uri별로 이벤트를 필터링합니다.message_data필드에서 바이트 배열을 추출합니다.다음 예시에서는
emsg데이터를 JSON으로 디코딩합니다.{ "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3", "presentation_time": 27554, "timescale": 1000, "message_data": "ID3TXXXgoogle_1234567890123456789", ... }TXXXgoogle_{ad_event_ID}형식으로 ID3 태그를 필터링합니다.TXXXgoogle_1234567890123456789
광고 이벤트 데이터 표시
TagSegment 객체를 찾으려면 다음 단계를 따르세요.
광고 메타데이터 폴링에서 광고 메타데이터
tags객체를 가져옵니다.tags객체는TagSegment객체의 배열입니다.전체 광고 이벤트 ID를 사용하여 유형이
progress인TagSegment객체를 찾습니다.광고 이벤트 ID의 처음 17자를 사용하여 다른 유형의
TagSegment객체를 찾습니다.TagSegment를 가져온 후ad_break_id속성을 키로 사용하여 광고 메타데이터ad_breaks객체에서AdBreak객체를 찾습니다.다음 예에서는
AdBreak객체를 찾습니다.{ "type":"mid", "duration":15, "ads":1 }TagSegment및AdBreak데이터를 사용하여 광고 시점의 광고 위치에 관한 정보를 표시합니다.Ad 1 of 3를 예로 들 수 있습니다.
미디어 확인 핑 전송
progress 유형을 제외한 모든 광고 이벤트에 대해 미디어 확인 핑을 전송합니다.
Google DAI는 progress 이벤트를 삭제하므로 이러한 이벤트를 자주 전송하면 앱 성능에 영향을 미칠 수 있습니다.
광고 이벤트의 전체 미디어 인증 URL을 생성하려면 다음 단계를 따르세요.
스트림 응답에서 전체 광고 이벤트 ID를
media_verification_url값에 추가합니다.전체 URL로
GET요청을 수행합니다.// media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/" const completeUrl = `${media_verification_url}google_5555555555123456789`; const response = await fetch(completeUrl);성공하면 코드 상태
202응답이 수신됩니다. 그렇지 않으면404오류 코드가 표시됩니다.
스트림 활동 모니터링 (SAM)을 사용하여 모든 광고 이벤트의 기록 로그를 검사할 수 있습니다. 자세한 내용은 라이브 스트림 모니터링 및 문제 해결을 참고하세요.