Pod Serving API 可让您访问经过编码和经过调节的广告细分, 进行准备,使其能够直接拼接到面向用户的 HLS 中 或 MPEG-DASH 媒体播放列表。对于 MPEG-DASH,Pod Serving API 还提供 为这些广告提供更多信息和上下文的清单模板 细分。
本指南重点介绍如何实现基本的 Pod Serving 清单操作 服务器。
前提条件:在 Google Ad Manager 中配置直播活动
在通过广告连播投放 API 发出任何请求之前,您必须先创建一个广告
为您处理的每个视频流管理直播活动。您可以创建一个
使用
LiveStreamEventService API
或
Google Ad Manager 网页界面。
若想将直播活动与 Pod Serving API 搭配使用,您需要执行以下操作: 填充活动的以下几个属性:
customAssetKey
- 要用于此事件的自定义标识符。必须为 在广告网络的所有事件中是唯一的。adTags
- Ad Manager 广告投放管理生成的主广告代码网址 工作流。dynamicAdInsertionType
- 必须设置为POD_SERVING_REDIRECT
。streamingFormat
- 相应地设置为HLS
或DASH
。segmentUrlAuthenticationKeyIds
- 至少一项 HMAC 密钥 来对广告细分请求进行签名daiEncodingProfileIds
- 以下各项的列表: DAIEncodingProfile 已为此事件启用 ID。startDateTime
- 活动的开始日期和时间endDateTime
- 此活动的预定结束日期和时间。此属性 如果unlimitedEndDateTime
is false and ignored if
unlimitedEndDateTimeis true.
unlimitedEndDateTime` - 布尔值,则必须提供此值。参见上文。
接收视频流清单请求
您的清单操纵器必须提供 API 端点来监听清单 来自视频播放器客户端应用的请求。此端点至少必须 从客户端播放器应用收集视频流 ID,并且必须返回 数据流清单。视频流 ID 用于标识向广告的流式传输会话 管理者。
此外,您还需要收集一些其他信息 例如内容 ID。
可能的清单请求端点示例
GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
路径参数 | |||||
---|---|---|---|---|---|
asset_key |
与您系统中请求的直播活动对应的假设 ID。 | ||||
format |
与数据流格式对应的假设参数。以下任意一项:
|
查询参数 | |
---|---|
stream_id |
客户端视频播放器应用中的 Ad Manager 视频流 ID。 |
检索内容流
使用从清单请求收集的内容 ID 来选择内容 与广告拼接起来
将广告片段拼接到内容流中
拼接广告片段网址的方式会因直播格式而异。
HLS 视频流
HLS 视频流通常作为多变体清单提供,其中包含 指向变体清单的链接集,对应于每个编码 个人资料。
注意:为简单起见,本指南假定您的 HLS 媒体采用 格式将音频和视频混合到同一个片段文件中。
代理多变体播放列表
您需要替换原始多变体中的每个变体播放列表网址 另一个端点调用操纵器来处理播放器的 选定的变体清单。
拼接 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”。segment_duration
:当前片段的时长(以毫秒为单位)。这个 除了广告连播中的最后一个片段之外,其他所有细分的值都应相同。segment_offset
:通过将上一个片段的偏移值相加 片段的时长相对于其片段偏移量(以毫秒为单位)last
:标识广告连播中的最后一个片段的布尔值。默认值 false。
构建广告细分网址
将广告插播时间点中的每个片段替换为以下格式的网址:
/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 ,并针对每个广告插播时间点增加 1。
<ph type="x-smartling-placeholder"></ph> 在观看同一广告插播时间点的所有用户中,此值必须相同 当前事件。 |
profile_name
|
所请求个人资料的标识符 |
segment_number
|
此细分受众群在当前广告连播中的索引,从零开始。 使用 MP4 容器时,可以通过将 segment_number 设置为“init”来请求初始化片段。 |
查询参数 | ||
---|---|---|
stream_id
|
必需 | 从数据流创建返回的用户的 stream_id 参数
请求。
|
sd
|
必需 | segment_duration
|
so
|
可选 | segment_offset
如果缺少 |
pd
|
必需(启用了无时长限制的广告插播时间点的事件除外) | 广告插播时长(以毫秒为单位)。也称为
ad_pod_duration 。
|
auth-token
|
必需 | 经过签名的网址编码 HMAC 令牌 指定最低价格 |
last
|
可选 | 指示广告插播时间点中最后一个片段的布尔值。默认值为 false。 |
查询参数值必须经过正确编码,以确保网址安全。这是
对 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 Pod Serving API
DASH 数据流
DASH 视频流以 MPD 文件的形式提供,其中包含 单个文件,其中内容表示为一系列句点。
请求期模板
向 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 |
短划线时段模板中每个广告媒体细分的时长,以 毫秒。 |
示例请求 (c网址)
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}&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&scte35=$$scte35$$&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}
填充时间段模板
周期模板包含多个宏,您必须为每个广告替换这些宏 。必须替换所有宏。未使用的宏应替换为 空字符串 ("")。
宏 | 说明 | 示例 |
---|---|---|
$$pod-id$$ |
此时间段代表的广告连播的索引。该值必须与以下项匹配: 向所有观看者会话投放同一个广告连播 | 1 |
$$period-start$$ |
时段在当前 MPD 中的开始时间。可选属性
应替换为 start="###" ,其中
### 是广告插播开始的呈现时间。如果
未提供周期的开始时间,应替换此宏
以及一个空字符串。
|
start="PT2H33M30S" |
$$period-duration$$ |
整个广告时段的时长。一个可选属性,即
替换为 duration="###" ,其中 ### 为
广告时段的时长,采用标准 DASH 时长格式。如果
周期持续时间,则此宏应替换为
空字符串。
|
duration="PT15S" |
$$pod-duration$$ |
为该广告连播选择的广告的预计时长, 毫秒。 | 15000 |
$$number-of-repeated-segments$$ |
此值的计算方法是:广告时段时长( 毫秒)除以 segment_duration_ms,然后向上取整为 最接近的整数。 | 3 |
$$cust_params$$ |
此宏可替换为 当前广告插播时间点(如果)。。该值的格式必须为 如本 Ad Manager 文档中所述 帮助中心文章。 如果不需要自定义参数,则应将此宏替换为空的 字符串。 |
&cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2
|
$$scte35$$ |
这个宏需要替换为该广告插播时间点独有的 scte35 值 (如果提供)。如果不需要 scte35 信息,则此宏应 会替换为空字符串。 |
/DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR
|
$$token$$ |
经过签名的网址编码 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&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&scte35=$$scte35$$&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&sd=5000&pd=30000&cust_params=&auth-token=&scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&pd=30000&cust_params=&auth-token=&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&sd=5000&pd=30000&cust_params=&auth-token=&scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&pd=30000&cust_params=&auth-token=&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 Pod Serving API 发出
其他资源
- 使用 IMA SDK 进行广告连播投放播放: <ph type="x-smartling-placeholder">
- 使用 DAI 进行广告连播投放播放 API