我需要停止屏幕重新编码,但是我需要允许通过HDMI共享视频。
我知道捕获的通知通常用于此目的,但是我找不到一种将这两件事分开的方法。
UIScreen.main.addObserver(self, forKeyPath: "captured", options: .new, context: nil)
以上内容在开始/停止屏幕录制时触发通知。而且还会在连接/断开外接显示器时触发(尽管我发现这里是间歇性的)。
我尝试使用以下方法检测UIScreen中的屏幕是否已镜像或仅检查屏幕计数。录像只显示一个屏幕,而镜像屏幕应显示2个屏幕。
recordingLabel.text = "count \(UIScreen.screens.count)"
for screen in UIScreen.screens {
if screen.mirrored != nil {
recordingLabel.text = "Mirrored - count \(UIScreen.screens.count)"
}
}
但这又是断断续续的。在大多数情况下,连接HDMI屏幕时计数不会改变,但在断开连接时计数会变为2。
我还发现使用UIScreen通知可用于已连接/已断开连接。但是捕获的通知似乎正在发生比赛,我仍然需要处理记录。
NotificationCenter.default.addObserver(self, selector: #selector(connected), name: UIScreen.didConnectNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(disconnected), name: UIScreen.didDisconnectNotification, object: nil)
在两种类型的通知都触发时,是否有任何方法可以检测记录类型或防止比赛发生?
编辑: 从那以后我找到了
NotificationCenter.default.addObserver(self, selector: #selector(captureChanged(notification:)), name: UIScreen.capturedDidChangeNotification, object: nil)
哪种方式可以更好地处理连接通知,但在我收到连接通知之前仍会触发。我并不是真的想要添加一个计时器来检测didConnect通知是否在captureChange之后触发,但这可能是唯一的方法