我对IOS编程有些陌生,我正尝试使用Replaykit进行直播,在从App调用广播服务选择器视图以及创建2个扩展(广播上传)方面都取得了一些进展。扩展和广播用户界面扩展)。
显然,一旦从选择器视图中选择了扩展UI扩展,便应该加载该广播UI扩展,而其他人则在广播开始后就接收数据,我在第一个示例中尝试通过创建一个故事图板并为其提供一个相同的自定义类来创建视图与Broadcast UI扩展的错误相同,但是当我从选择器视图中单击扩展时,我会得到立即错误The user declined application recording
(不确定我是否在这里错过了任何步骤),也没有情节提要时也会遇到相同的错误,我在Broadcast UI扩展视图控制器的print()
中尝试了override func viewDidLoad()
,并且在调试区域中没有日志,所以我什至不知道它是否完全加载了。
我需要显示一个简单的UI,然后将其调用Broadcast UI扩展视图控制器功能(func userDidFinishSetup()
),然后将开始广播。我还将接受是否可以在不使用UI的情况下直接在App中启动广播,在Replaykit docs中,我看到了一个startBroadcast
功能,我认为可以实现此目标,但出现了broadcastInvalidSession = -5808
错误表示我“试图在没有上次会话的情况下开始广播”。非常感谢帮助,谢谢。
广播UI视图控制器
import ReplayKit
class BroadcastSetupViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("WASSUP?");
}
// Call this method when the user has finished interacting with the view controller and a broadcast stream can start
func userDidFinishSetup() {
print("GET IN!!!");
// URL of the resource where broadcast can be viewed that will be returned to the application
let broadcastURL = URL(string:"http://apple.com/broadcast/streamID")
// Dictionary with setup information that will be provided to broadcast extension when broadcast is started
let setupInfo: [String : NSCoding & NSObjectProtocol] = ["broadcastName": "example" as NSCoding & NSObjectProtocol]
// Tell ReplayKit that the extension is finished setting up and can begin broadcasting
self.extensionContext?.completeRequest(withBroadcast: broadcastURL!, setupInfo: setupInfo)
}
func userDidCancelSetup() {
let error = NSError(domain: "YouAppDomain", code: -1, userInfo: nil)
// Tell ReplayKit that the extension was cancelled by the user
self.extensionContext?.cancelRequest(withError: error)
}
}
答案 0 :(得分:0)
您的广播扩展的情节提要板是否已在扩展的信息plist中配置?
在NSExtension词典下,您应添加一个名为“ NSExtensionMainStoryboard”的键,该值应为故事板的名称,即-“ MainInterface”
您是否还可以设置在扩展程序中调用的断点?
答案 1 :(得分:0)
因此,我很遗憾地接到了Apple技术支持事件,他们建议我在广播UI扩展的info.plist中添加“ NSExtensionMainStoryboard”,类似于Greg的回答,但如果不起作用,我会通过我的代码发送并我们发现我还必须从阻止加载的位置删除“ NSExtensionPrincipalClass”键,然后再正常运行。