iOS 11控制中心触发Broadcast Upload Extension及视频样本获取问题
iOS 11 Broadcast Upload Extension 问题解答
一、如何通过iOS 11控制中心触发Broadcast Upload Extension?
首先得确保你的Broadcast Upload Extension已经正确添加并关联到主APP,之后按以下步骤操作:
- 调出控制中心:iOS 11非全面屏设备从屏幕底部向上滑动,就能打开控制中心。
- 添加屏幕录制控件:如果控制中心里没看到屏幕录制按钮,进入「设置」>「控制中心」>「自定义控制」,找到「屏幕录制」并添加到已包含的控件列表。
- 触发目标扩展:长按(或3D Touch)控制中心里的屏幕录制按钮,会弹出扩展选择列表,找到你的APP对应的Broadcast Upload Extension选项并选中,最后点击「开始录制」,系统就会触发该扩展开始工作。
二、点击开始直播后无法获取视频样本的故障原因排查
碰到这种情况,基本是配置或代码环节出了问题,我整理了几个高频排查方向:
- 权限配置缺失:
主APP和扩展都需要正确配置权限。主APP的Info.plist要添加NSMicrophoneUsageDescription(如果需要采集音频)和NSScreenRecordingUsageDescription;扩展的Info.plist也要确保权限声明正确,而且iOS 11中屏幕录制权限需要用户主动授权,记得检查主APP是否主动发起了权限请求。 - Extension配置错误:
检查扩展Info.plist里的NSExtension节点:NSExtensionPointIdentifier必须设置为com.apple.broadcast-services-uploadNSExtensionAttributes中的RPBroadcastExtensionVersion要匹配iOS 11的版本要求,若配置了RPBroadcastUploadExtensionSettingsBundleURL,要确保指向的配置文件路径正确。
- 代码逻辑问题:
重点检查SampleHandler类的processSampleBuffer:withType:方法:有没有正确判断样本类型为RPSampleBufferTypeVideo,有没有错误释放或处理样本缓冲区,导致无法获取有效数据;另外,这个方法里不能执行耗时操作,Extension运行环境有严格时间限制,耗时操作可能会被系统直接终止进程。 - 系统兼容性限制:
iOS 11的Broadcast Upload Extension有特定限制,比如不支持部分高分辨率或特殊编码的视频,要检查你的视频源是否符合系统要求;同时iOS 11对Extension的内存限制很严格,如果扩展占用内存过高,会被系统强制杀掉,自然无法获取视频样本。 - 主APP与Extension通信异常:
如果主APP需要给扩展传递配置信息,检查RPBroadcastActivityViewController的broadcastConfiguration是否正确设置,有没有传递必要的初始化参数,参数错误可能导致扩展无法正常初始化采集样本。
内容的提问来源于stack exchange,提问作者yingzhuo




