「视频」如何通过 Siri 播放视频?且看优酷技术接入实践( 二 )
// 媒体项目类型的解析结果
INMediaItemResolutionResult *sr = [INMediaItemResolutionResult successWithResolvedMediaItem:item];
NSMutableArray*mutableArray = [ NSMutableArrayarray];
INPlayMediaMediaItemResolutionResult *irs = [[INPlayMediaMediaItemResolutionResult alloc] initWithMediaItemResolutionResult:sr];
[mutableArray addObject:irs];
completion(mutableArray);
}
- ( void)handlePlayMedia:( nonnullINPlayMediaIntent *)intent completion:( nonnullvoid(^)(INPlayMediaIntentResponse * _Nonnull))completion
{
NSUserActivity*userActivity = [[ NSUserActivityalloc] initWithActivityType: NSStringFromClass([INPlayMediaIntent class])];
INMediaItem *item = [intent.mediaItems firstObject];
if(item.title.length > 0) {
} else{
}
// media Intent 的回应
INPlayMediaIntentResponse * re = [[INPlayMediaIntentResponse alloc] initWithCode:INPlayMediaIntentResponseCodeContinueInApp userActivity:userActivity];
completion(re);
}
从函数resolveMediaItemsForPlayMedia:withCompletion:中可以获得需要需要播放的媒体项目 。例如:用户说“使用优酷播放大明风华” , 就可以从intent.mediaSearch.mediaName 拿到“大明风华”这四个文字 。拿到文字后需要创建一个INMediaItem 类型的对象 , 该对象描述了对应的媒体内容 。接下来通过INMediaItem类型的对象创建 INMediaItemResolutionResult 类型的对象 , 该对象代表着媒体项目类型的解析结果 。
执行完函数resolveMediaItemsForPlayMedia:withCompletion:会执行函数 handlePlayMedia:completion: , 该函数的作用是处理媒体请求 。因为 Intents 应用程序的生命周期非常短 , 所以 INPlayMediaIntent 告诉主程序开始媒体播放 。这里的媒体播放分为两种:Audio:对于音频内容使用INPlayMediaIntentResponseCodeHandleInApp 进行响应 。它会告诉系统在后台启动主程序 , 在 UIApplicationDelegate 对象上调用方法 application:handleIntent:completionHandler: 。应用程序应使用此应用程序委托方法开始音频播放;Video: 对于视频内容使用 INPlayMediaIntentResponseCodeContinueInApp进行响应 。它会告诉系统系统在前台启动主程序 , 在 UIApplicationDelegate 对象上调用方法 application:continueUserActivity:restorationHandler: 。应用程序应使用此应用程序委托方法开始视频播放 。
在函数handlePlayMedia:completion:里面创建 INPlayMediaIntentResponse 类型对象 , 它是对 mediaIntent的回应 , 注意创建该对象的时候需要传入正确的INPlayMediaIntentResponseCode 。
至此 Siri Extension 数据的获取已经完成 , 接下来的任务是将 Siri 获取到的数据转换为对应的媒体资源 。
优酷对 SiriKit 传递的信息处理
文章图片
文章图片
从流程图中可知对于优酷这种巨型 App 来说 App 内部的信息处理和传递 , 处理链路非常长 , 过程比较复杂复杂 。
处理流程涉及到了壳程序、一个公共 Bundle、播放页Bundle 。
为什么呢?因为优酷业务非常多 , 代码量巨大 , 所以将不同的业务拆分成了不同的 Bundle , 每条业务线维护自己的 Bundle , 每次集成发版本 , 业务线构建自己的 Bundle , 最后通过壳工程将所有业务线的 Framework 集成到一起构建成完整的优酷 App 。
Siri Extension 是添加在壳工程里面 , 而 Siri 的回调在公共 Bundle 里面 , 搜索、跳转播放的逻辑在播放页 Bundle 里面 。
推荐阅读
- 平台■在线视频平台大数据杀熟成惯例 买VIP就活该被宰?
- 『智八斗』就这么被苹果欺负?余承东如何反击
- 「博主」百万美食博主拍出稳定高质量的 vlog,竟只用了一款 5G 视频手机?
- 『』华为P40中招,这款神将仅一个月跳千元?1亿像素+8K视频+骁龙865
- Ubuntu ■如何在 Ubuntu 中添加多个时区 | Linux 中国
- 「腾讯」腾讯视频盈利难:2019年亏损30亿 盗墓题材连拍五年没水花
- 「便利店」便利仔便利店,如何看待真实的便利店市场?
- 「事情」史海峰:万字长文剖析技术人如何成长
- 「视频」视频错误标注“作品由华为手机拍摄”,华为致歉
- 『像素』荣耀潮流情报局:揭秘荣耀30系列预热视频背后的故事