라이브 스트림용 매니페스트 조작기

Pod Serving API는 인코딩되고 컨디셔닝된 광고 세그먼트에 대한 액세스를 제공합니다. 사용자 대상 HLS에 바로 연결할 수 있도록 준비됨 또는 MPEG-DASH 미디어 재생목록입니다. MPEG-DASH의 경우 Pod Serving API는 또한 광고 매니페스트 템플릿을 사용하여 광고에 대한 추가 정보와 컨텍스트를 세그먼트.

이 가이드에서는 기본적인 광고 모음 게재 매니페스트 조작을 구현하는 데 중점을 둡니다. 라이브 스트림용 서버를 이용할 수 있습니다

기본 요건: Google Ad Manager에서 실시간 스트림 이벤트 구성하기

광고 모음 게재 API에서 요청하기 전에 먼저 광고를 만들어야 합니다. 처리한 각 스트림의 관리자 실시간 스트림 일정입니다. 다음과 같은 방법을 사용할 수 있습니다. 라이브 스트림 이벤트를 LiveStreamEventService API 드림 또는 Google Ad Manager 웹 인터페이스.

라이브 스트림 이벤트를 광고 모음 게재 API와 함께 사용하려면 다음을 수행해야 합니다. 이벤트의 여러 속성을 채웁니다.

  • customAssetKey - 이 이벤트에 사용할 맞춤 식별자입니다. 필수 네트워크의 모든 이벤트에서 고유한 값을 갖습니다.
  • adTags - Ad Manager 트래피킹에 의해 생성된 기본 광고 태그 URL 워크플로에 따라 다릅니다.
  • dynamicAdInsertionType - POD_SERVING_REDIRECT로 설정해야 합니다.
  • streamingFormat - HLS 또는 DASH로 적절하게 설정합니다.
  • segmentUrlAuthenticationKeyIds - 하나 이상 HMAC 키 광고 세그먼트 요청에 서명하는 데 사용됩니다.
  • daiEncodingProfileIds - DAIEncodingProfile 이 이벤트에 대해 사용 설정된 ID입니다.
  • startDateTime - 이벤트의 시작 날짜 및 시간
  • endDateTime - 이 이벤트의 예약된 종료 날짜 및 시간입니다. 이 속성 unlimitedEndDateTimeis false and ignored ifunlimitedEndDateTimeis true.unlimitedEndDateTime` - 부울인 경우 필수 항목입니다. 위의 내용을 참조하세요.

스트림 매니페스트 요청 수신

매니페스트 조작기는 매니페스트를 수신 대기하는 API 엔드포인트를 제공해야 합니다. 동영상 플레이어 클라이언트 앱에서 요청을 전송합니다. 이 엔드포인트는 최소한 클라이언트 플레이어 앱에서 스트림 ID를 수집하며, 병합된 스트림 매니페스트를 참조하세요. 스트림 ID는 광고에 대한 스트리밍 세션을 식별하는 데 사용됩니다. 관리자

또한 적절한 대상을 식별하기 위해 다른 정보를 수집해야 콘텐츠 스트림(예: 콘텐츠 ID)입니다.

잠재적인 매니페스트 요청 엔드포인트의 예

GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
경로 매개변수
asset_key 시스템에서 요청된 라이브 스트림에 해당하는 가상의 ID입니다.
format 스트림 형식에 해당하는 가상의 매개변수입니다. 다음 중 하나입니다.
mpd MPEG-DASH 스트림
m3u8 HLS 스트림의 경우
쿼리 매개변수
stream_id 클라이언트 동영상 플레이어 앱의 Ad Manager 스트림 ID입니다.

콘텐츠 스트림 가져오기

매니페스트 요청에서 수집한 Content ID를 사용하여 콘텐츠 선택 광고를 연결할 수 있습니다.

광고 세그먼트를 콘텐츠 스트림에 연결

광고 세그먼트 URL의 연결은 스트림 형식에 따라 다릅니다.

HLS 스트림

HLS 스트림은 일반적으로 다중 변형 매니페스트로 제공되며, 여기에는 변형 매니페스트로 연결되는 링크 집합으로, 각 인코딩에 해당하는 프로필을 만들 수 있습니다.

참고: 편의상 이 가이드에서는 HLS 미디어가 오디오와 비디오를 동일한 세그먼트 파일로 다중화합니다.

프록시 다중 변형 재생목록

원래의 다중 변형에서 각 변형 재생목록 URL을 교체해야 합니다. 조작자에 대한 또 다른 엔드포인트 호출이 포함된 재생목록을 선택된 변형 매니페스트를 참조하세요.

HLS를 병합하는 나머지 단계에서는 단일 변형 매니페스트가 처리 중입니다.

잠재적 대안 요청 엔드포인트의 예
GET /api/video/{asset_key}/variant/{variant_id}.m3u8
Host: {your_domain}
경로 매개변수
asset_key 시스템에서 요청된 라이브 스트림에 해당하는 가상의 ID입니다.
variant 특정 대안의 식별자가 포함된 가상의 매개변수 있습니다.
쿼리 매개변수
stream_id 클라이언트 동영상 플레이어 앱의 Ad Manager 스트림 ID입니다. 여기에 사용된 사용자 세션을 식별할 수 있습니다.
처리되지 않은 다중 변형 매니페스트 예
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/360p.m3u8
프록시 처리된 다중 변형 매니페스트 예
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/1080p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/720p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/360p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS

광고 시점 세그먼트 식별 및 불연속성 삽입

변형 매니페스트를 처리할 때 시작 시간, 지속 시간, 동적 매니페스트가 처리될 때까지 게재 예정인 다음 광고 시간의 색인 광고 콘텐츠로 대체될 세그먼트가 포함되어 있습니다.

광고 시점은 다음에 따라 다양한 방식으로 콘텐츠 세그먼트와 구분될 수 있습니다. 살펴보겠습니다. 광고 시점을 설명하는 일반적인 방법 중 하나는 #EXT-X-CUE-OUT 태그로 시작하고 그 뒤에 #EXT-X-CUE-IN 태그를 지정하세요.

Google에서 호스팅하는 광고 시점을 콘텐츠 세그먼트에서 분리하려면 #EXT-X-DISCONTINUITY 태그를 사용합니다. 만약 중단 태그가 최종 매니페스트에 나타나지 않으면 재생이 실패합니다.

삽입된 광고 세그먼트 URI가 암호화되지 않습니다. 콘텐츠가 암호화되어 있다면 #EXT-X-KEY:METHOD=NONE를 지정하여 암호화를 삭제해야 합니다. 각 광고 시점의 첫 번째 광고 세그먼트 앞에 배치하고 설정할 수 있습니다

샘플 매니페스트 (원본)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.005,
contentorigin.com/3.ts
#EXTINF:5.005,
contentorigin.com/4.ts
#EXTINF:5.005,
contentorigin.com/5.ts
#EXTINF:5.000,d
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4
불연속성이 삽입된 매니페스트
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXTINF:5.005,
#EXT-X-DISCONTINUITY
{... New segments will go here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

광고 모음 세그먼트 처리

광고 모음 내 각 세그먼트에 대해 몇 가지 추가 값을 추적해야 합니다.

  • segment_number: 광고 모음 내 세그먼트 색인으로, 0부터 시작합니다. 또는 'init' mp4 초기화 세그먼트에 사용됩니다.
  • segment_duration: 현재 세그먼트의 길이(밀리초)입니다. 이 값은 광고 모음의 마지막 세그먼트를 제외한 모든 세그먼트에 대해 동일해야 합니다.
  • segment_offset: 이전 값을 더하여 계산된 세그먼트 오프셋입니다. 세그먼트 오프셋까지의 시간(밀리초)
  • last: 광고 모음의 마지막 세그먼트를 식별하는 불리언 값입니다. 기본값 false로 설정합니다.

광고 세그먼트 URL 만들기

광고 시점 내의 각 세그먼트를 다음 형식의 URL로 바꿉니다.

/linear/pods/v1/seg/network/{network_code}/custom_asset/{custom_asset_key}/pod/{pod_id}/profile/{profile_name}/{segment_number}.(ts|mp4|vtt|aac|ac3|eac3)
경로 매개변수
network_code 이 네트워크의 Ad Manager 360 네트워크 코드입니다.
custom_asset_key LiveStreamEventService에 지정된 맞춤 라이브 스트림 저작물 키입니다. API 또는 Ad Manager 360 웹 인터페이스의 실시간 스트림 페이지에서 확인할 수 있습니다
pod_id 광고 시점의 식별자입니다. 다음에서 시작하는 정수여야 합니다. 1하고 광고 시점마다 하나씩 증가합니다.

<ph type="x-smartling-placeholder"></ph> 이 값은 다음 기간 동안 동일한 광고 시점을 보는 모든 사용자에 대해 동일해야 합니다. 확인할 수 있습니다

profile_name 요청된 프로필의 식별자,
segment_number 현재 광고 모음 내에서 이 세그먼트의 색인으로, 0에서 시작합니다.
MP4 컨테이너를 사용하는 경우segment_number를 'init'로 설정하여 초기화 세그먼트를 요청할 수 있습니다.
쿼리 매개변수
stream_id 필수 Stream Create에서 반환된 사용자의 stream_id 매개변수 합니다.
sd 필수 segment_duration
so 선택사항 segment_offset

so가 누락되면 이전 세그먼트가 모두 재생 시간이 동일하며 세그먼트 오프셋은 segment_numbersd.

pd 재생 시간이 없는 광고 시간이 사용 설정된 이벤트를 제외하고 필수 광고 시점의 길이 (밀리초)입니다. 다른 명칭 ad_pod_duration
auth-token 필수 서명된 URL 인코딩 HMAC 토큰 확인할 수 있습니다
last 선택사항 광고 시간의 마지막 세그먼트를 나타내는 부울입니다. 기본값은 false입니다.

쿼리 매개변수 값은 URL로부터 안전하도록 올바르게 인코딩되어야 합니다. 이것은 auth-token 필드에 특히 중요합니다. /가 포함될 수 있기 때문입니다. +, =자(영문 기준)입니다.

샘플 매니페스트 (세그먼트 교체 후)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:3.000,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2&last=true
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

축하합니다. 다음에서 제공한 광고 세그먼트로 라이브 스트림을 게재합니다. DAI 광고 모음 게재 API입니다.

DASH 스트림

DASH 스트림은 단일 파일이며, 여기서 콘텐츠는 일련의 마침표로 표현됩니다.

요청 기간 템플릿

Google Ad Manager에 기간 템플릿을 요청합니다. 이 템플릿은 포함된 매크로가 채워지면 광고 시점 기간이 시작됩니다.

이 템플릿은 스트림 세션당 한 번만 요청하고 다시 사용할 수 있습니다

기간 템플릿 요청 엔드포인트hjf
GET /linear/pods/v1/dash/network/{network_code}/custom_asset/{custom_asset}/pods.json
Host: dai.google.com
Content-Type: application/json
경로 매개변수
network_code 게시자의 Ad Manager 360 네트워크 코드입니다.
custom_asset Google Ad Manager 실시간 스트림 이벤트의 맞춤 애셋 키입니다.
쿼리 매개변수
stream_id 클라이언트 동영상 플레이어의 Ad Manager 스트림 ID입니다.
응답 JSON
dash_period_template 기간 템플릿 XML 문자열입니다.
segment_duration_ms 대시 기간 템플릿에 있는 각 광고 미디어 세그먼트의 재생 시간(단위: 밀리초 단위입니다.
요청 예시(cURL)
curl https://dai.google.com/linear/pods/v1/dash/network/21775744923/custom_asset/tears_of_steel/pods.json?stream-id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS
응답 예
{"dash_period_template":"<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$> <BaseURL>https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/</BaseURL>
 <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">
  <SegmentTimeline>
    <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
  </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>

    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>",
"segment_duration_ms":5000}

기간 템플릿 채우기

기간 템플릿에는 각 광고에 대해 대체해야 하는 여러 매크로가 포함되어 있습니다. 있습니다. 모든 매크로를 교체해야 합니다. 사용하지 않는 매크로는 빈 문자열("")입니다.

Macro 설명
$$pod-id$$ 이 기간이 나타내는 광고 모음의 색인입니다. 이 값은 모든 시청자 세션에서 동일한 광고 모음에 있어야 합니다. 1
$$period-start$$ 현재 MPD에서 기간이 시작되는 시간입니다. 선택적 속성 start="###"로 대체되어야 합니다. 여기서 ###은 광고 시점이 시작되는 표시 시간입니다. 만약 기간의 시작 시간이 제공되지 않은 경우 이 매크로는 빈 문자열로 대체합니다. start="PT2H33M30S"
$$period-duration$$ 전체 광고 기간의 길이입니다. 필수 속성인 duration="###"로 대체되어야 합니다. 여기서 ###는 표준 DASH 기간 형식으로 된 광고 기간의 지속 시간입니다. 만약 기간 값이 제공되지 않은 경우 이 매크로는 빈 문자열입니다. duration="PT15S"
$$pod-duration$$ 이 광고 모음에 대해 결정될 것으로 예상되는 광고의 길이입니다. 밀리초 단위입니다. 15000
$$number-of-repeated-segments$$ 이 값은 광고 기간( 밀리초)를 세그먼트로 나눈 다음 가장 가까운 정수입니다. 3
$$cust_params$$ 이 매크로는 현재 광고 시점입니다. 확인할 수 있습니다 값은 이 Ad Manager 또는 고객센터 도움말 맞춤 매개변수가 필요하지 않은 경우 이 매크로는 빈 문자열. &cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2
$$scte35$$ 이 매크로는 광고 시간에 고유한 scte35 값으로 대체되어야 합니다. 제공됩니다. scte35 정보가 필요하지 않은 경우 이 매크로는 빈 문자열로 대체됩니다. /DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR
$$token$$ 서명된 URL 인코딩 HMAC 토큰. 이 토큰은 필수입니다. custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9
매크로가 포함된 원시 기간 템플릿
<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$>
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/
  </BaseURL>
  <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">  
    <SegmentTimeline>
      <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>
    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>
채워진 광고 기간
<Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>

채워진 기간을 DASH 매니페스트에 삽입

마지막으로 원시 매니페스트에서 적절한 마침표를 광고 기간이 채워지고, 최종 병합된 매니페스트를 동영상 클라이언트입니다.

원시 콘텐츠 매니페스트의 예
<?xml version="1.0"?>
  <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    <Period start="PT0S">
      <AdaptationSet bitstreamSwitching="true">

        <Representation id="0" codecs="avc1" mimeType="video/mp4" width="1920" height="1080" startWithSAP="1" bandwidth="500000">
          <SegmentBase>
            <Initialization sourceURL="segments/1080/1.m4s" range="0-862"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/1080p/2.m4s" mediaRange="863-7113"/>
            <SegmentURL media="segments/1080p/3.m4s" mediaRange="7114-14104"/>
            <SegmentURL media="segments/1080p/4.m4s" mediaRange="14105-17990"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="1280" height="720" startWithSAP="1" bandwidth="250000">
          <SegmentBase>
            <Initialization sourceURL="segments/720p/1.m4s" range="0-864"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/720p/2.m4s" mediaRange="865-11523"/>
            <SegmentURL media="segments/720p/3.m4s" mediaRange="11524-25621"/>
            <SegmentURL media="segments/720p/4.m4s" mediaRange="25622-33693"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="640" height="480" startWithSAP="1" bandwidth="100000">
          <SegmentBase>
            <Initialization sourceURL="segment/480p/1.m4s" range="0-865"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segment/480p/2.m4s" mediaRange="866-26970"/>
            <SegmentURL media="segment/480p/3.m4s" mediaRange="26971-72543"/>
            <SegmentURL media="segment/480p/4.m4s" mediaRange="72544-95972"/>
            ...
          </SegmentList>
        </Representation>
        ...
      </AdaptationSet>
    </Period end>
  </MPD>
병합된 매니페스트의 예
<?xml version="1.0"?>
  <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    
    <Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>
    
</MPD>

축하합니다. 제공된 광고 세그먼트가 포함된 DASH 라이브 스트림을 게재합니다. DAI 광고 모음 게재 API에 의해 생성됩니다.

추가 리소스