大多数浏览器和
Developer App 均支持流媒体播放。
-
与 HLS 无缝过渡媒体
探索如何创建在剧集、歌曲、场景和单个资源之间无缝过渡的流媒体内容。通过无缝 HLS 播放,您可以即时拼接多条内容,以创建自定义训练,设计交互内容,讲述令人信服的故事等等。我们将展示如何提供可靠的流媒体音乐、事件记录和预录视频连续性,并在您的 app 中提供引人入胜的观看体验。
资源
相关视频
WWDC21
-
下载
♪播放重低音音乐♪ ♪ 赛门戈德雷:大家好 这个影片是关于 如何通过HTTP实时串流协议 无间隙地衔接媒体 我是赛门 是Apple串流媒体团队的 成员之一 你会使用AVQueuePlayer吗? 你想让你的客户 在你的应用程序中体验 无缝地播放HTTP实时串流项目 这种新风格的播放方式吗? 你想将媒体如同创作者所希望的 连贯地呈现吗? 我们是否能够通过提供一个体验 使客户能更长久地享用我们的媒体 并借此来支持我们的客户呢? 如果答案是肯定的 那么这部影片会带给你很多收获 你会学习如何能够无间隙地衔接 HTTP实时串流项目 这是今天的内容 我们会深入描述一些通过这个新功能 你所能提供的绝佳媒体体验 我会详细说明编写媒体时的必要事项 我会以一些播放列表为例子 并点出其中最好的几个 然后我们会以一个范例做总结 在AVQueuePlayer中衔接各个 由HTTP实时串流协议支持的 AVPlayer项目的好处相当明显 直到现在 媒体的衔接点 还有些不顺畅 不管是音频的失灵 或是短暂的画面停格 甚至是不明的缓冲现象 无间隙项目衔接会维系 你在应用程序中所提供的 客户和程序内容之间的连接 也许你记得这样的用语:“别转台” 你可以构建一个分集影片的处理方法 让一部影片的结尾可以无缝衔接至 下一部影片的开头 无间隙衔接让你可以重现 歌曲无缝连接的专辑式体验 任何人都很享受这种体验 这么做的时候 原本可能是现场演出的内容 或原先的创作内容会更准确的被再现 我们可以提供一个连续的 无间断的体验 我们可以复制线性规划的处理方式 但我们也可以带给观赏者 一个动态的 甚至是互动式的体验 让他们所观看的任务或画面 能直接且流畅地过渡至 下一个任务或画面 以一系列的健身影片 或其他教学性质的媒体为例 无间隙衔接从程序设计方面来说 使我们可以将 一个视听片段中的段落进行拼接 且同时保持它的流畅性 你可以增加训练次数 或在训练中添加缓和运动 我们可以达成以上这些 并保有于HTTP上传输串流媒体时 所有自适应比特率媒体的优点 当然 我们也有运用这项功能 Apple Music的新功能 通过HTTP实时串流协议传输内容 并使得歌曲间能无间隙地衔接 我们很高兴 能带给我们的客户这样的体验 而我们也希望能将它提供给你的客户 现在让我们仔细来看 要将这样的项目衔接也呈现在 你的HTTP实时串流内容中时 创作时需要纳入的 必要事项 通过在HLS指令清单中输入变量 这个变量会在一连串项目之间 提供音频格式上的连续性 你会使媒体能够无间隙地衔接 你的内容所提供的变量 要符合以下这些音频媒体的特性: FairPlay串流、音频编解码器的使用 后者会由串流标签的转码属性指定 以及通道数 这会由媒体标签的通道属性指定 请注意 如果要进行转译的音频 有不同的取样频率和位元深度 这可能会抑制无间隙衔接的运作 关于提供相符格式及维持连续性 及维持连续性的建议 也适用于这些特性 也就是说 要达到无间隙衔接 请记得为要连贯入列的项目 提供变量一致的音频媒体 最后 在编辑媒体时 请遵循CMAF编辑指引 CMAF指的是 “common media application format.” 在这个MPEG特定格式中 有一个特定的建议 也就是运用编辑列表显示出 提前的以及多余的帧数 现在让我们通过仔细察看 两个候选项目的主变量播放列表 来看一个简单的例子 在这个HTTP实时串流协议清单中 我已经输入了四个视听变量: 一对720p变量和一对1080p变量 每一对中 其中一个含有 高效率音频编码HE_AAC, 另一个则含有 低复杂度音频编码AAC_LC 在这个例子中 假设播放状态 支持含有HE_AAC编码的720p影片 播放即将结束时 AVQueuePlayer至少在一开始会 在接续的项目中 选择编码相似的变量 即使现在的网络环境 支持较高的音质 情况也是如此 在处理无间隙衔接时 无间隙衔接比高音质来的重要 播放持续进行时 会进行自适应比特率的 启发式评估 如果状态维持 播放器会无缝地转换至较高的音质 太棒了 现在 假设我们没有 在第二个项目中输入HE_AAC 在这个情况下 AVQueuePlayer就无法 维持音频的连续性 也无法进行无间隙衔接 但是它能够为播放状态 选择第一个最适当的变量 假设我们已经将内容编辑为 可支持无间隙衔接 在这个情况下 我们必须记得 如何使用AVQueuePlayer 这里有一个简短的代码片段 我们创建两个AVPlayer项目 并在播放之前 将它们按次序入列 请注意 这两个项目 是来自两个不同的链结 创建完AVQueuePlayer 我们可以运用 “在…之后插入”方法 告知播放列你想要的顺序 接着就只剩下“播放”了
我想跟你分享一个进阶技巧 它允许使用单一的涵盖数据 从这个涵盖数据 你可以实例化多个AVPlayer项目 我们可以针对每个AVPlayer项目 在入列AVQueuePlayer之前 定义不同的入点与出点 运用AVPlayer项目的seekToTime方法 我们可以定义入点 接着我们可以运用 forwardPlaybackEndTime定义出点 这个是关于这个概念的图示 项目一、二及三 都来自相同的AV涵盖数据 由三个相同的段落组成 他们的不同之处在于 我运用seekToTime设定了不同入点 以及运用forwardPlaybackEndTime 定义了不同的出点 现在 我可以将这三个相同的项目 入列进我的AVQueuePlayer中 而我将会得到 一个定制化的动态序列 现在让我们通过实际演示 来观看以及聆听 无间隙衔接的效果 这个范例中 我们会互动式地拼接 三段健身串流影片 我会保留显示各项目中的AVKit控件 这样你就能看见 这些是完全不同的串流资源 我会先无缝地播放一次这三段影片 接着我们会互动式地编辑整个片段 在你的软件中 你可以试想在设计程序时 也提供或甚至执行这样的重整功能 好 我们现在来做暖身 ♪有活力的电子音乐♪ ♪ 准备好了吗?来进行坡地模式吧 ♪活泼的嘻哈音乐♪ ♪ 好了 结束了 现在来做缓和运动 ♪平静的电子音乐♪ ♪ 我光是用看的就汗流浃背了 我想要直接跳至 “好了 结束了”的部分 并跳过坡地模式的环节 旧金山这里已经够多山坡了 为了达到我的目的 让我们来编辑这个训练组合的次序 我会将坡地训练移到最上方 这会使我在暖身后 直接且无间隙地过渡至 缓和运动的部分 接着 我会点选 现在位于第二位的暖身运动 作为第一个运动项目开始播放 好 我们现在来做暖身 ♪有活力的电子音乐♪ ♪ 好了 结束了 现在来做缓和运动 ♪平静的电子音乐♪ ♪
让我们来统整一下 在这个影片中学到的重点 我们学到了 若要通过 HTTP实时串流协定达成无间隙衔接 我们必须在各项目中提供 有相符音频格式的变量 接着 我们知道了 要指示AVQueuePlayer 执行无间隙衔接是多么容易 只要将项目按次序地入列 这里有个与此相关的影片 影片中会介绍 为探索变量而设计的新应用程序接口 这个影片或许对你有帮助 如果你的软件或服务 无法保证项目会符合音频格式 我希望你喜欢这部影片 祝你在接下来的WWDC体验愉快 谢谢 ♪
-
-
6:12 - create two items, enqueue in order and play gaplessly
// create two items, enqueue in order, // and play gaplessly let item1 = AVPlayerItem(url: url1) let item2 = AVPlayerItem(url: url2) let player = AVQueuePlayer() player.insert(item1, after: nil) player.insert(item2, after: item1) player.play()
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。