我在尝试让 DeepAR 的面具出现在我的 Agora 视频通话中时遇到了问题。我关注了这个Github repo,但是当我按照他们对 videoEncoderCONfiguration 和 startFrameOutput 的方式进行设置时,它对我来说崩溃了,如下所示:
func setupVideo() {
agoraKit.setExternalVideoSource(true, useTexture: true, pushMode: true)
agoraKit.enableVideo()
agoraKit.disableAudio()
agoraKit.setVideoEncoderConfiguration(AgoraVideoEncoderConfiguration(size: AgoraVideoDimension640x360,
frameRate: .fps15,
bitrate: AgoraVideoBitrateStandard,
orientationMode: .adaptative))
}
func joinChannel() {
agoraKit.joinChannel(byToken: nil, channelId: "demoChannel1", info: nil, uid: 0) { [unowned self] (channel, uid, elapsed) -> Void in
// Did join channel "demoChannel1"
UIApplication.shared.isIdleTimerDisabled = true
self.localVideoView.startFrameOutput(withXmin: 0, xmax: 1, ymin: 0, ymax: 1, scale: 1)
self.localVideoView.isHidden = false
}
}
应用程序在行后崩溃并显示此消息self.arView.startFrameOutput(withXmin: 0, xmax: 1, ymin: 0, ymax: 1, scale: 1)
* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[__NSArrayM insertObject:atIndex:]: object cannot be nil”
当我像下面这样基于正常的 Agora 调用 repo 设置调用时,应用程序本身运行良好,但我看不到视频上的掩码,即使我在控制台中打印掩码。
func setupVideo() {
rtcEngine.enableVideo()
let canvas = AgoraRtcVideoCanvas()
canvas.uid = 0
canvas.view = localVideoView
canvas.renderMode = .hidden
rtcEngine.setupLocalVideo(canvas)
}
func joinChannel(channelId: String, token: String, uid: UInt) {
rtcEngine.joinChannel(byToken: token, channelId: channelId, info: nil, uid: uid) { (sid, uid, elapsed) in
self.callAnswered = true
self.showButtonsIfCallIsAnswered()
self.localVideoView.isHidden = false
}
UIApplication.shared.isIdleTimerDisabled = true
}
问题是我看不到掩码,即使控制台正在打印值。当我在 DeepAR 和 Agora 的仓库中设置外部视频源时,应用程序在加入后立即崩溃。
我真的很感谢有人帮我调试这个,这样一切都可以顺利运行:)