阻止屏幕重新编码,但允许HDMI屏幕镜像Swift 4

时间:2018-09-24 13:30:32

标签: ios notifications swift4 hdmi screen-recording

我需要停止屏幕重新编码,但是我需要允许通过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之后触发,但这可能是唯一的方法

0 个答案:

没有答案