大多数浏览器和
Developer App 均支持流媒体播放。
-
将 SiriKit Media Intent 扩展到更多平台
了解如何使用 SiriKit Media Intents 让 Siri 点歌或打开音频播放程序。我们接下来会演示如何在我们多个平台上将 Siri 支持添加到用户音乐、播客或其他音频服务中,包括 HomePod 和 Apple TV。用户只要询问Siri就可开始收听。了解新的 API 功能。该功能支持其他功能项,以便用户在不离开 Siri 界面即可快速收听。
资源
- If you’d like to integrate your music service with HomePod, let us know
- Managing Audio with SiriKit
- Providing Hands-Free App Control with Intents
相关视频
Tech Talks
WWDC20
-
下载
(你好 WWDC 2020) 你好 欢迎参加 WWDC (将 SiriKit Media Intent 扩展到更多平台) 大家好 我是 Danny Mandel 欢迎观看“将 SiriKit Media Intent 扩展到更多平台”的演讲视频 今年我们为 SiriKit Media 增加了精彩的新功能 以及一些新的体验 内容非常丰富 今年 我们着重强调 SiriKit Media Intent 在家庭中的作用 为此 我们将对一些新的平台开放 此外 我们会探讨一些新功能 视频最后会讲解一些新的方法 让你们能够 更流畅地体验 SiriKit Media 下面我们马上开始吧 先来介绍全新 SiriKit Media 平台 去年我们 为大家倾力呈现了一些精彩体验 今年我们继续将这些精彩 带到了你们最常听音乐的地方 你们家中
对于 HomePod 我们使用相同的 media intents 以及全新的云播放 API 充分利用 Apple 智慧家庭设备 HomePod 的独特之处 你们可以 访问 developer.apple.com/siri 查看 开发者计划的所有详细内容
同时 我们 很高兴地宣布 SiriKit Media Intent 现在也支持 Apple TV 除了 iOS app 之外 我们知道你们当中很多人 有 Apple TV 的自定义经验 所以我们 也想为这些应用开放 SiriKit Media 下面由我的同事 Ryan Klems 通过实际操作给大家 演示一下如何在 Apple TV 中使用它 去年我们在 iOS 13 和 watchOS 6 中 介绍了 SiriKit Media Intent 是如何处理媒体应用的 今年我们很高兴地宣布 相同的功能也支持 Apple tvOS 14 现在你们可以在大屏幕上 使用 Siri 来支持应用程序 SiriKit Media Intent 可以把 多种多样的自然语言查询添加到应用程序 可以进行简单的搜索 (有什么可以帮您?) 在 ControlAudio 中播放音乐
还可以要求播放某个乐队 在 ControlAudio 中 播放 Khruangbin 乐队的作品
可以要求播放某位艺人的某一首歌 在 ControlAudio 中播放 Marshmello 和 Halsey 演唱的《Be Kind》
等等其他要求 那么如何实现这些要求呢? 将 SiriKit Media Intent 处理流程添加至 Apple tvOS 的方式 与添加至 iOS 的方式一样 详细信息请看 2019 WWDC 的视频 视频名《Introducing SiriKit Media Intents》 其中介绍了 添加扩展目标到应用程序的操作步骤 接下来我们简单回顾下 如何在 SiriKit Media 应用中 处理自然语言请求
处理 SiriKit Media 请求的关键是 intent 句柄 而实施的关键方法是 Resolved mediaItems 通过 Resolved mediaItems 你们可以评估应用程序收到的 INPlayMediaIntent 对象 然后执行搜索 将其转化为具体的 mediaItem 最后在应用中播放 验证 mediaItem 参数之后 会调用 handler 而这会启动应用程序并开始播放 Apple tvOS 的不同之处在于 用户一次只能和一个应用程序互动 因此 互动方式更倾向于前台启动 这与 iOS 不同 其互动方式更倾向于后台启动 控制实现的方法是通过句柄方法 返回 continueInApp 而不是通过 handleInApp 通过去年我们介绍的简单操作步骤 你们可以为应用程序添加该功能 在 Apple tvOS 中 通过 Siri 播放音频内容 我们非常开心 看到 SiriKit Media Intent 去年在 iOS 和 watchOS 中的表现出色 今年我们非常期待 你们在 Apple tvOS 中对它的使用 Ryan 谢谢你的演示 非常棒 关于平台的介绍先到这里 下面我将介绍哪些新功能 可以让用户更方便地使用 Siri 听音乐 在介绍示例时 我们会使用范例 app 即 WWDC19 推出的 ControlAudio 下面我们来讲解下 全新的备选 Siri UI 菜单 首先来看下全新紧凑 Siri UI 中 当前的 SiriKit Mediat 体验 我们请求播放 《New Me Same Us》专辑中的一首歌 ControlAudio 选取了一首歌进行播放 除此之外 显示不了更多选项 所以我们只能播放这一首歌 我们都知道有时候除了开始播放的内容外 我们还想要点别的 那么有没有办法 可以更方便地快速选择 而不必打开应用 中断目前的操作呢? SiriKit Media 全新的 备选 UI 菜单 可以回答这个问题 可以看到 用户请求播放刚刚那首歌 Siri 开始播放
不过 这次我们 可以看到一个新的菜单出现 菜单显示”更多选择“ 轻触菜单 我们可以看到下列 UI
可以看到 这里列出了来自相同专辑的其他歌曲 有些用户可能想听这些 而不是 ControlAudio 选择的那首 现在我们可以轻触任意一首 进行播放 而不必局限于第一首歌 这就是全新的 SiriKit Media 备选 UI 这是如何实现的呢?其实很简单 在目前的 resolvedMediaItems 方法中 你们可能是基于 INMediaItem 解析结果的基础上 调 resolvedMediaItem 方法 调用 success 函数 现在这一方法可以 返回单个 media item 解析结果
为返回多个 item 你们只需要切换至新的复数版本 也就是 successes with resolvedMediaItems 在列表第一个 item 后面的所有东西 都会以备选的形式显示
下面你们可能会问 当用户选择其中一个选项时 如何处理轻触操作呢? 过程很简单 当用户轻触其中一个选项时 他们轻触的 media item 被设置为 INPlayMediaIntent 中准许处理的 media item 也就是说你可以像处理如今的任何其他 INPlayMediaIntent 一样进行操作
让我们来看下需要更改哪些代码 来使 SiriKit Media 备选菜单得以实现 首先我们需要在我们的示范项目 ControlAudio 中打开 intent 句柄
定位到 resolvedMediaItems
目前我们调用的是该方法的单数版本 Success With 函数 下面我们运行 app 看看具体情况
在 ControlAudio 中 播放《New Me Same Us》专辑中的歌曲 现在为您播放 Little Dragon 乐队歌曲 《Where You Belong》 好 可以看到开始播放了 但是没有备选菜单出现
现在返回至 Xcode 终止程序 更新方法 使其返回多个 media item 而不是只返回一个
现在我们调用的是该方法的复数版本 Successes With 函数 再次运行应用 看看这次它会做出什么反应
在 ControlAudio 中 播放《New Me Same Us》专辑中的歌曲 现在为您播放 Little Dragon 乐队歌曲 《Where You Belong》 好 现在有备选菜单了 我们播放一首吧 选《New Fiction》
可以看到 开始播放了 使用 SiriKit Media 中的 全新备选菜单支持 就是这么简单 接下来介绍一些性能方面的改进 这是今年 SiriKit Media 的新特性
去年当我们推出 SiriKit Media Intent 时 我们要求使用 intents 扩展 实现 SiriKit Media 的功能 今年 有了新的方式 来处理 SiriKit Media Intent 那就是 in-app intent handling In-app intent handling 将整个过程迁移到了应用内部 而不是移至扩展 这样做的好处之一是避免了启动进程 你们不需要启动 intents 扩展和应用 来开启后台音频 只需要启动应用即可
然而 因为这会启动整个应用 有可能造成在解析阶段 Siri 反应变慢 Intents 扩展体积小 是一个轻量级进程 专门为快速启动而优化 所以你们肯定需要优化完整应用启动体验 来获得同样快速的反应 另外一个好处就是 可以在应用中提前开始播放器的加载 因为解析语句是在那里实现的 因此 如果你需要发起网络请求获取证书 可把它放在在解析语句开始阶段 确保在处理 intent 时 播放器已完成100%初始化 建议大家观看视频 了解 in-app intent handling 的详细内容
对于基于 extension 编写程序的开发者 今年我们 也通过 app 预加载进行了性能提升 看目前的 SiriKit Media 编码 运行时经过 标准解析、确认和句柄三个阶段 然后所有这些阶段完成后 给 app 下达后台启动命令 开始播放 这的确很好地分离了一些重要事项 因为扩展 可以包含所有的 intent 处理逻辑语句 而 app 可以处理播放逻辑语句 不过 它会推迟一些重要的应用事项 比如播放器设置或证书获取 会远远晚于应该执行的时间点
通过 app 预加载 SiriKit 可以将应用提前开启 并在扩展执行完成后随时可以播放 需要注意的是 app 预加载 确实需要在 app 内进行一些额外的编码 因此你们需要和我们一起配合 确保其正常运行 最后我想说的是优点和缺点 并存于 in-app intent handling 和 app 预加载之中 所以你们需要根据自身情况 审视其优缺点 找到最适合你们的方式 此外 我们想和开发者群体的所有人说 我们既是开发者 也是使用者 我们非常高兴 有一个共同的框架 用以修复错误 开发新功能以及提升性能 让你们和 Apple Siri 团队都能从中受益 谢谢大家 希望你们 今年在为用户带去全新、出色 SiriKit Media 体验的过程中获得乐趣
-
-
2:45 - resolveMediaItems method
func resolveMediaItems(for intent: INPlayMediaIntent, with completion: @escaping ([INPlayMediaMediaItemResolutionResult]) -> Void) { }
-
3:03 - handle with .continueInApp
func handle(intent: INPlayMediaIntent, completion: (INPlayMediaIntentResponse) -> Void) { completion(INPlayMediaIntentResponse(code: .continueInApp, userActivity: nil)) }
-
5:24 - Singular successWithResolvedMediaItem call
INPlayMediaMediaItemResolutionResult.success(with: mediaItems[0])
-
5:40 - Plural successesWithResolvedMediaItems call
INPlayMediaMediaItemResolutionResult.successes(with: mediaItems)
-
6:07 - handle with .handleInApp
func handle(intent: INPlayMediaIntent, completion: (INPlayMediaIntentResponse) -> Void) { completion(INPlayMediaIntentResponse(code: .handleInApp, userActivity: nil)) }
-
6:37 - ControlAudio resolveMediaItems
func resolveMediaItems(for intent: INPlayMediaIntent, with completion: @escaping ([INPlayMediaMediaItemResolutionResult]) -> Void) { let mediaSearch = intent.mediaSearch resolveMediaItems(for: mediaSearch) { optionalMediaItems in guard let mediaItems = optionalMediaItems else { return } completion(INPlayMediaMediaItemResolutionResult.successes(with: mediaItems)) } }
-
10:24 - App prewarming background appLaunch
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Locate any app prewarming logic in this method -- fetch credentials, get audio player ready, etc. return true }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。