大多数浏览器和
Developer App 均支持流媒体播放。
-
让您的 app 全面采用空间音频
探索空间音频如何帮助您的 app 和网络上的媒体带来剧场般的体验。我们将向您展示如何将沉浸式音频轻松整合到兼容硬件的聆听体验中,以及如何根据带宽或连接自动提供不同的聆听体验,此过程只需改动少量代码,甚至无需改动代码。获取关于如何在您的 app 中定制体验的建议,以及利用空间音频以激动人心的全新方式讲述故事。
资源
相关视频
WWDC23
WWDC21
-
下载
♪ (空间音频为App 带来沉浸式体验) 大家好!在本环节中 我们将探索空间音频如何 为您的App打造沉浸式体验 我叫西蒙 是Apple流媒体团队的一员 您是否想要为用户缔造影院般体验 并凭借这种体验 使您的服务与众不同? 您是否希望利用多点音频源 提供沉浸式音频 营造出身临其境的感觉? 我们能否在用户的移动设备上 做到这一切? 在本环节中 我们将探索空间音频 以及如何利用Core AVFoundation播放 API和WebKit来实现这一点 我们要讲的内容很多 我们将一同探讨什么是空间音频 将它与我们熟悉的现有技术进行比较 然后我们将列举该功能提供的 各项技术和处理方式 在下半部分 我将介绍API 和不同的处理方式 接下来 我们将回顾 以前版本对空间音频的支持程度 以便您能够适当地对功能进行定位 我还将展示2021年秋季 OS版本的新功能 最后 我们将进行一场演示 很高兴能跟大家分享上述内容 相信各位会喜欢的! 想要知道什么是空间音频 我们先从传统的立体声说起 不管是使用耳机 还是立体声扬声器 我们感知到的声场非常有限 我们无法听到背后 正前方或头上的声音等 因此难以营造栩栩如生的环绕声体验 当我们佩戴耳机时 声音从我们耳朵里的 微型扬声器中发出 我们称之为头上体验 当我们在观看影片期间 自然地转动脑袋时 微型扬声器会随之移动 这不是影院般体验 却是空间音频的用武之地 空间音频提供影院般体验 是一种心理声学技术 能营造引人入胜的虚拟声场效果 它最适合多声道内容 但也为立体声内容 提供引人入胜的体验 最后 空间音频支持视听 和纯音频媒体资源 最重要的是 它适用于用户 已经拥有的各种Apple产品 您可以轻松地为您的用户 带来空间音频体验 正如我刚才所说 在应用程序中 嵌入空间音频的最佳方法 是提供多声道音频 当提供参考多声道音频 替代方案的HLS变体时 这种体验 最能适应用户的环境 您的内容库里可能已经有了 多声道音频源媒体 只需要发布此媒体 便可在应用程序中默认 启用空间音频 无需对软件进行任何修改 常规媒体文件以及2021秋季版本 WebKit媒体源扩展中 的多声道音轨 也受益于有限的支持 稍后我将对此进行详细说明 我们来看看您现在可以创造的 媒体体验 您现在可以利用空间视频 打造多种多样的体验 您可以提供环绕音效体验 让我们感觉就像是在音乐会上 您可以制作带有互动场景的 全动态视频游戏 让玩家踏上身临其境的冒险之旅 但这项技术的工作原理是什么? 在使用空间视频时 虚拟声场是静态的 声场不会随着头部的随意移动而移动 不像我们之前看到的立体声 我们得到的是与影院如出一撤的 音效和感受 这种效果可能来自于我们 许多产品中的内置扬声器 现在精选耳机产品也有这种效果 在使用具有空间效果的耳机时 播放设备惯性测量单元的测量值 与耳机中的类似测量值 进行比较 以确定用户的头部姿势 这被用来动态改变音频渲染 以保持静态的声场效果 结果就是用户感觉声音是从 相机或听者周围的原始位置发出 从而实现头外体验 公交车转弯或飞机倾斜飞行时 空间音频效果依然保持 我们还提供了一种 混合立体声源的技术 以营造出5.1声道体验 我们开发这项功能以提供空间音频 以及您现有的立体声内容库 对于支持这项功能的耳机 这是2021年秋季版本中 默认的立体声处理方式 我们也利用这种处理方式 使您更愿意接受和提供空间音频 因为现在您可能在想 分发多声道音频 可能会妨碍媒体的视觉质量 毕竟 多声道音频的码率 比如今的立体声AAC音频高得多 如何在受限的网络带宽环境中 同时满足这两个条件呢? 这是个现实问题 我们的解决办法是使空间音频体验 适应于用户的带宽 当带宽不足以带来 高质量的视听体验时 音频会无缝降级为立体声 一种混合但仍然具有 空间感的处理方式 如果在降级之前提供了头部追踪 那么降级之后将保持不变 不久后 当带宽稳定恢复时 将重新采用完整的 多声道空间处理方式 考虑到这种自适应空间音频体验 使立体声和多声道音频 之间的音量水平 正常化就显得非常重要 此外 请在媒体编码中 提供DRC (动态范围控制) 和对白归一的元数据 这在developer.apple.com 的HLS AuthoringSpecification 中有更详细的描述 现在 我们来看看您可以用于 定制空间音频体验的接口 为了在应用程序中定制 默认的空间音频体验 无论是通过AVPlayerItem 还是现在的AVSampleBufferAudioRenderer 你指定四种AVAudio SpatializationFormats之一 这些都是为了实现单声道和立体声 多声道以及二者结合 的空间化 也就是单声道 立体声 和多声道源音频格式 您还可以指定零来禁用音频空间化 请注意 我们的平台通过 控制中心和蓝牙设置 根据音频路由的类型 为用户提供系统级控制 以便进一步提供定制化体验 我们取四个值之一 并将其设置在 AVPlayerItem 和2021年秋季版本新功能 AVSampleBuffer AudioRenderer 的allowedAudioSpatialization Formats属性上 现在 您可能想知道如何利用 AVFoundation API 发现音频路由是否支持空间音频? 您如何知道是否应该向 AVSampleBuffer AudioRenderer 实例提供多声道音频? 在2021年秋季版本中 我们引入了一个属性 在AVAudioSession PortDescription上 表明这一点 另外 我们在AVAudio Session上引入了一个机制 供您向系统表明 您的应用程序能够提供多声道音频 如果客户没有在控制中心 或蓝牙偏好设定中 启用空间音频处理方式 就会显示此提示 请注意 如果应用程序使用 AVPlayer 这些提示都是替您管理的 isSpatialAudio Enabled属性表明端口 能够支持空间音频 且得到用户允许 我们建议您在每个事件中 留意路由变更通知 并检查isSpatial AudioEnabled 同样 当客户修改控制中心 和蓝牙设置中的空间偏好时 AVAudioSession 将发出 spatialPlaybackCapabilities ChangedNotification 为了方便起见 该通知内含 关于空间音频启用状态的信息 利用 AVAudio Session Spatial AudioEnabledKey 来检索与此通知相关的状态 最后 想要向系统表明您的软件 或服务可以提供多声道内容 您可以在意图中调用函数 setSupportsMulti channelContent 用于告诉用户 如果网络条件允许 且启用了空间处理方式 那么空间体验可用 现在让我们看看过去三年的版本 对该特性的支持情况 在macOS Catalina iOS和iPad OS 13中 指定任何带有 http方案的URL 空间音频通过带有AVPlayer Item和WebKit 视频标签的内置扬声器提供 该技术适用于2018年及以后的 MacBook iPhone 和iPad Pro系列产品 默认是通过选择可用的 多声道音频副本来提供空间化 在macOS Big Sur iOS和iPad OS 14中 我们引入了对AirPods Pro和AirPods Max 头轨耳机的支持 通过这些配件实现的空间化功能 将纳入2016年及以后的 iPhone和ipad配套设备 默认依然是通过选择可用的 多声道音频副本来提供空间化 接下来是 macOS Monterey iOS iPadOS和 tvOS 15的全新支持 这里 我们通过 AVPlayerItem AVSampleBufferAudioRenderer 和有限的WebKit支持 为W3C媒体源扩展MSE提供支持 MSE路径不提供 定制空间化体验的接口 但确实存在一个接口可以通过 Media Capabilities API集中的 AudioConfiguration字典 来检测空间音频支持的可用性 在这些版本中 默认是 在条件允许的情况下 为所有可用的单声道 立体声和多声道源 提供音频空间化 对于只有音频的内容 包括所有的AVSampleBuffer AudioRenderer用途 默认情况下 只提供多声道音频副本 现在我们知道了什么是空间音频 以及如何使用它 接下来我们 为您准备了特别内容 我们将向您展示如何在软件和服务中 使用空间音频 以充满创意的新方式讲述故事 我们来听一听! ♪
哈哈 我们再听一次 呃 库比蒂诺吗? 我们遇到了一个问题 这次是什么? 我知道 我知道 什么? -抱歉 西蒙 -不? 这行不通。 -真的吗? -我知道 该死 好吧 我们做这个很棒的演示 是为了展示您可以用空间音频 达到的各种炫酷效果 但是您知道 看来今天是实现不了了 注意 我们要试一试别的 我无法给大家看视频 但要是我可以 描述它呢? 我不知道您目前身处何地 但我希望您闭上眼睛 想象一下自己正位于WWDC大厅 您知道那是怎样的感受 对吧? 感觉如何? 在您的脑海中描绘它 想象一下讲台和大屏幕 我们即将把灯光调暗 开始播放这个视频 嘿!你!把灯光调暗 我们身处于旧金山上方的高空 从湾区飞掠而来 在高楼大厦间穿梭 风在我们身边呼啸 然后我们飞出这座城市 沿半岛而下 一直来到苹果园区 我们飞进园区 当我们飞过时 您看到一个发型靓丽的人 弯腰躲闪 他喊道:“慢一点!” 这具有非常酷的 从左至右的多普勒效应 慢一点! 我们现在正飞过苹果园区 感受在树木间穿行的嗖嗖声 我们来到池塘 享受片刻的安静祥和 老实说 我对空间音频不感兴趣 然后 我们再次上路 与飞鸟同行 直至抵达 Caffè Macs的大玻璃门 我们行走在光滑的水磨石地板上 直到看见这个女人 她正在吃披萨 她的iPad支在桌子上 她完全沉浸在一部情节紧张的电影中 那是黄昏时分的茂密丛林
这音频简直 不会吧! 它把我们拉进了电影场景 他很好地描述了这个演示 我几乎觉得我就在现场 太生动了
远处的猴子发出叫声 但场面突然变得诡异起来 所有动物都异常安静 我们只能听见叶子的沙沙声 这时 一棵树倒了 局面崩溃了 有什么东西来了!很大的东西! 砰砰砰 我们能听见自己的心跳声 从胸腔里传来 然后是寂静 就在我们准备长舒一口气的时候
一只恐龙从我们正对面的 树林中冲了出来! 我们抬起头 刚好对着它张开的大嘴巴!
第42场拍摄到此结束 我们后退几步 发现自己身处片场 我不知道自己是否喜欢那种灯光 那只恐龙停在那里一动不动 一群人开始清理片场 去找凯利 你有20名演员? 是的 他们在化妆 观看太空发射 你来吗? 我们跟着两个人上了一辆拖车 去观看今天的太空发射 当然是用环绕音频播放 观众屏息凝神 但我们却穿过他们 进入到电视中 -准备发射 -一切正常 现在我们身处航天舱内
把踏板踩到底 火箭点火! 起飞! 向月球前进! 下一站 宁静号 一切正常 三级 二级 一级助推器分离 正常 火箭的第二级已经脱落 我们也跟着往下掉 跟着第二级火箭掉向地球 速度越来越快 现在我们掉入了大气层 朝地面冲去 前方有什么东西 是一架大型喷气式飞机 越来越大 然后
大家早上好 我是机长 从驾驶舱与各位通话
我们正降落到今天的最终目的地 请不要
太棒了!
好了 嗯 这很有趣 我们总结一下我们的所见所闻 我们发现我们可以很轻松地 为用户提供空间音频体验 实际上 您可能不需要做任何事情 便可在您的应用程序中使用空间音频 只要在您的HLS变体播放列表中 提供多声道音频就行了 请记住 必须使立体声 和多声道音频之间 的音量水平正常化 并包含DRC元数据 最后 我们讨论了 在过去三年的OS版本中 如何为广大的用户 提供空间音频 在我们的相关视频中 您将了解如何发现 您的HLS资源是否拥有多声道音频 当您探索AVFoundation 中的HLS变体时 请了解所有相关内容 希望大家喜欢今天的视频 和我们的团队 反正我是很喜欢 希望空间视频能够为您和 您的App带来沉浸式体验 敬请观看WWDC 2021 的其余内容 谢谢大家 ♪
-
-
6:55 - Spatialization Formats
public struct AVAudioSpatializationFormats : OptionSet { public init(rawValue: UInt) public static var monoAndStereo: AVAudioSpatializationFormats { get } public static var multichannel: AVAudioSpatializationFormats { get } public static var monoStereoAndMultichannel: AVAudioSpatializationFormats { get } }
-
7:21 - AVPlayerItem and AVSampleBufferAudioRenderer
@available(macOS 11.0, *) var allowedAudioSpatializationFormats: Int32
-
8:21 - Spatial audio availability
@available(iOS 6.0, *) class AVAudioSessionPortDescription : NSObject { @available(iOS 15.0, *) var isSpatialAudioEnabled: Bool { get } }
-
8:35 - Spatial audio availability
extension AVAudioSession { @available(iOS 15.0, *) class let spatialPlaybackCapabilitiesChangedNotification: NSNotification.Name } @available(iOS 15.0, *) let AVAudioSessionSpatialAudioEnabledKey: String
-
9:01 - Control center integration
extension AVAudioSession { @available(iOS 15.0, *) func setSupportsMultichannelContent(_ inValue: Bool) throws @available(iOS 15.0, *) var supportsMultichannelContent: Bool { get } }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。