大多数浏览器和
Developer App 均支持流媒体播放。
-
在同播共享中显示插播式广告和其他广告
了解在 App 为每位用户提供不同广告计划的同时,您可以如何在同播共享中打造协调的播放体验。我们将探索如何利用嵌入的广告和计划的 HLS 插播式广告打造播放体验,并分享相关技巧和最佳实践。
资源
相关视频
WWDC22
-
下载
♪ ♪ Prashant: 大家好 我是 Prashant 我是一名 AVFoundation 工程师 欢迎来到 WWDC 2022 随着 SharePlay 的引入 您可以为用户提供 相互连接的观看体验 在实时浏览内容并与之交互时 与 SharePlay 群组保持完全同步 但是 有些开发者可能需要 将定向广告或其他插屏 安排在内容时间线上 这就让协调播放成为了一项挑战 因为有些参与者 接收的广告时长不一样 还会出现一组参与者中 有些人收到广告 有些人没有的情况 因此 如果您对调度 广告和其他插屏 在 SharePlay 中协调播放感兴趣 观看这个讲座就对了 在今天的讲座中 首先将介绍协调播放的工作原理 然后我们将讨论与协调播放中的广告 和其他插屏相关的挑战 接下来 我们将讨论观看广告时 可能出现的不同观看体验 然后 我们将看看如何 在缝入式广告中实现这些 我们还将了解 HLS 插屏 如何与协调播放配合使用 最后 我们将介绍一些最佳实践 您可以用来为用户提供 真正引人入胜的 SharePlay 体验
让我们看看在 SharePlay 中 协调播放是怎样进行的 当参与者进行 FaceTime 通话时 来自一位参与者设备的播放控制命令 在整个组内共享 以便进行同步播放 如果所有参与者都在观看相同的内容 这可能完全没有问题 但如果有些参与者 收到广告会怎么样呢? 现在让我们来看看这个例子 Alice 和 Bob 正打算 观看一些节目内容 现在我们看到的是 两人各自终端的演示时间线 如果只是他们观看的节目内容 那么实现协调播放应该非常简单 您只需将 groupSession 与 playbackCoordinator 相关联 就一切就绪了 现在让我们看看这种情况 两边都出现了插入的节目回顾片段 前面还有制片公司或电视台的标志 这种情况比较常见 而且 由于 Alice 和 Bob 的 回顾段落和标志段落相匹配 仍然可以实现协调播放 但是现在 假设 Alice 的 地理位置要求 该服务在节目开始前 显示一些法定警告 并且还可能在节目的 不同位置安排广告 这些广告的持续时间也有可能不同 我们现在可以看到 在试图进行同步播放时 这将带来怎样的挑战 对于 Bob 来说 电视台台标 可能一开始就会出现 但对于 Alice 来说 只有在显示警告后才会出现 如果我们要查看 演示时间线中的任意时间 会发现两者观看的 是截然不同的两部分 现在让我们花点时间考虑一下出现 此类情况时可能产生的用户体验 为此 让我们讨论 一条更简单的时间线 两边都只插入了一个广告 在理想情况下 在各自观看节目时 体验不应该有太大的不同 要实现这一点 我们 希望广告的长度相匹配 这也是我们首选的体验 现在 看完广告后 两人都会同步恢复播放 但有时他们可能会 收到不同时长的广告 或者其中一方根本没有任何广告 所以现在 如果同时播放 有可能会 出现以下两种体验中的一种
Alice 看完广告后 她可以等待 Bob 的广告结束 然后再继续同步播放
或者她可以继续观看主节目内容 而 Bob 会跳到前面赶上 Alice 这样两人就可以保持同步 在这种情况下 Bob 会在赶上 Alice 的时候 错过一些节目内容 那么 您如何实现这些体验呢? 您可以在 AVPlaybackCoordinator 中通过填充 suspensionReasonsThatTriggerWaiting 数组的方法来指定等待策略 默认行为是在部分参与者观看 广告时 群组不会进行等待 当这些参与者看完广告后 会错过一些内容以赶上组内其他人 或者 如果您希望群组 在参与者观看广告时等待 您可以简单地将 “playingInterstitial”暂停原因 纳入为 suspensionReasonsThatTriggerWaiting 数组的一部分 使用此策略 当参与者正在等待 其他人看完广告时 播放器的 timeControlStatus 会是 waitingToPlayAtSpecifiedRate 并且 waitingReason 为 waitingForCoordinatedPlayback 所以 回到前面描述的情形 我们如何定义这些 要从协调播放时间线中 忽略的时间范围呢? 例如 法定警告 只有 Alice 会看到 而 Bob 不会 广告插播时长也可能不同 您可能知道 HLS 提供两种安排广告的方式 其中之一是直接将广告片段 缝入主要内容的播放列表 因此 对于使用不连续 标签缝合广告的 视频点播内容 您可以使用 AVFoundation API 在 AVPlayerPlaybackCoordinator 上 设置广告时间范围 因此我们添加了以下委托方法 您可以用它来指定 一组准确时间示例范围 表示主要内容中的广告和插屏 随后 AVPlayerPlaybackCoordinator 将使用此信息 协调整个群组的播放 当参与者进入这个时间范围时 播放将按照指定的 等待政策进行协调 另外 根据插屏的类型 您可以允许某人导航到这些时间范围 因此 如果他们在 SharePlay 中 想要进入这些时间范围 整个群组都将对齐到 该时间范围的起始位置
这是一个播放列表示例 其中广告时间范围 是通过将播放列表的 EXTINF 标签中报告的时间 相加来填充的 这假定了作为 EXTINF 标记一部分 报告的持续时间 能准确反映这些片段的媒体时长 那么 要使协调播放能够进行 资产应该是什么样的呢? 如果您看看这个例子 Alice 和 Bob 遇到 不同时长的缝入式广告 导致了不同的资产持续时间 为了使它们可以 被视为与 SharePlay 兼容 我们希望资产的 实际内容持续时间相匹配 请注意 这仅适用于视频点播内容 对于带有插入广告的直播内容 我们希望广告中断的持续时间 对于所有参与者而言一致 如果您认为获取样本准确的 时间范围可能有困难 或者说 如果您希望在直播内容中 动态安排有针对性的广告 那么您可以使用 HLS 插屏来安排广告 2021 年 我们推出了 HLS 插屏 它提供了一种与众不同的 更灵活的方式来安排广告 如需详细信息 请查看 WWDC 2021 “探索 HLS 中的动态前贴片广告 和中插广告”讲座 简而言之 广告和插屏被视为 内容时间线外单独的对象 这些对象可以通过其 多变体播放列表直接引用 并可以执行服务器端广告插入 只需将多变体播放列表 URI 作为日期范围标签的一部分 包含 在主要内容的媒体播放列表中即可 您甚至还可以使用 AVFoundation API 在客户端安排广告 如果您使用 HLS 插屏来安排广告 AVFoundation 将在 协调播放期间自动进行处理 您需要做的只有指定等待策略
使用 HLS 插屏安排广告时 同样地 我们希望主要内容的时长 对所有参与者来说一致 使资产可以视为 与 SharePlay 兼容 现在让我们了解一些最佳实践 您可以用来 为用户提供真正 出色的 SharePlay 体验 SharePlay 旨在提供 流畅的互联观看体验 用户与内容可以进行互动 就像在自己的设备上观看一样 因此 考虑到这一体验 您应当想办法尽可能 减少等待和内容跳过 为此 建议您尝试对齐广告插播时长 这样可以最大限度 减少等待或跳过次数 当您的参与者群组中混合了有广告和 无广告的参与者 而所有人都在观看直播内容时 您可以使用 HLS 插屏来安排广告 并使用默认等待策略 但是 如果您在安排广告时 没有指定恢复偏移量 内容将以等同于 广告时长的偏移量恢复播放 在这种情况下 没有广告的参与者 会继续观看主要内容 其他人看完广告后会追上该参与者
在这里 Alice、Bob 和 Charlie 正在观看直播内容 Alice 是该服务的高级订阅者 因此没有任何广告 而 Bob 和 Charlie 的广告时长不同 全部使用 HLS 插屏进行安排 您可以看到 Alice 将继续观看节目 而 Bob 和 Charlie 在 广告时间结束后与 Alice 同步
如果这是一场体育比赛直播 您可以想象 当 Alice 观看赛场内转播画面时 Bob 和 Charlie 正在看广告 当他们的广告时间结束后 正好赶上比赛开始 对于视频点播流而言 参与者不能 错过任何节目内容 您可以使用“wait”等待策略 现在您可以使用 GroupSessionMessenger 在参与者之间共享广告时间表 当有人在等待其他人看广告时 您现在就可以准确知道他们要等多久 因为您已经共享了时间安排 所以在他们等待的时候 您也许可以使用不同的播放器 展示一些有趣的内容 例如您的服务中即将推出的亮点 以此来保持用户的参与度 总结一下 为了在协调播放时安排 广告和其他插屏 您只需要指定等待策略 如果遇到缝入式广告 您可以在使用 AVFoundation API 的 播放协调器上设置它们的时间范围 或者您可以使用 HLS 插屏 让 AVFoundation 管理广告的播放 理想的情况是所有 参与者都观看相同的内容 尽管我们希望这成为可能 但情况并非总是如此 您可能拥有不接收 广告的高级订阅人群 可能还会有参与者 收到时长不同的广告 在这些情况中 您的高级订阅者 也不需要盯着空白的等待屏幕 您可以向他们展示一些 我们之前提到的有趣的内容 您甚至还可以构建 其他体验来让他们心情愉快 如需了解如何在 SharePlay 中 构建自定义体验的更多想法 请查看“创造精彩的 SharePlay 体验”讲座 希望今天的讲座 给您提供了有用的信息 也请享受 WWDC 的其它内容 谢谢
-
-
5:13 - Specific sample accurate time ranges that represent ads or interstitials
class MyAVPlayerCoordinatorDelegate : NSObject, AVPlayerPlaybackCoordinatorDelegate { func playbackCoordinator(_ coordinator: AVPlayerPlaybackCoordinator, interstitialTimeRangesFor playerItem: AVPlayerItem) -> [NSValue] { return interstitialTimeRanges } }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。