我的应用程序中有视频播放,我不希望被记录下来。像Netflix应用程序一样,在屏幕录制时允许音频捕获但不允许视频被捕获。
有人知道如何实现这个功能吗?
我的应用程序中有视频播放,我不希望被记录下来。像Netflix应用程序一样,在屏幕录制时允许音频捕获但不允许视频被捕获。
有人知道如何实现这个功能吗?
UIScreenCapturedDidChange
通知。NotificationCenter.default.addObserver(self, selector: #selector(screenCaptureChanged), name: NSNotification.Name.UIScreenCapturedDidChange, object: nil)
当iOS 11屏幕录制开始和结束时,会调用此功能。当用户正在录制屏幕时,可以修改UI以阻止任何不想录制的内容。
当UIScreen
的isCaptured
属性更改时,将触发此通知。您也可以自己检查此属性:
UIScreen.main.isCaptured
您可以从以下链接深入了解FPS: https://developer.apple.com/streaming/fps/ 任何应用程序都可以使用FPS来实现与Netflix相同的效果。如果您的应用程序使用FairPlay Streaming(FPS),则iOS 11屏幕录制功能或macOS上的QuickTime Player将自动不捕获您的视频内容。播放内容的部分将变黑。
注意:FairPlay Streaming仅为您的内容的视频部分提供保护。要防止音频部分被捕获,您仍应使用本文档中讨论的UIScreen API向用户提供适当的消息,如果屏幕捕获开始。
NotificationCenter.default.addObserver(self, selector: #selector(screenCaptureChanged), name: NSNotification.Name.UIScreenCapturedDidChange, object: nil)
然后,在screenCaptureChanged
方法中:(void) screenCaptureChanged {
if (@available(iOS 11.0, *)) {
BOOL isCaptured = [[UIScreen mainScreen] isCaptured];
if (isCaptured) {
self.blackView.hidden = false;
}
else {
self.blackView.hidden = true;
}
}
}
这个解决方案将在用户录制时阻止PlayerVideo。但是,我想创建像Netflix一样的功能。我希望用户在观看电影时可以自由操作。如果他们正在录制,他们可以继续观看视频而不会出现黑屏。然而,当他们停止录制时,视频将保存为黑屏视图。我还在研究Netflix是如何做到这一点的。weak var screen : UIView? = nil
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
NotificationCenter.default.addObserver(self, selector: #selector(preventScreenRecording), name: UIScreen.capturedDidChangeNotification, object: nil)
return true
}
@objc func preventScreenRecording() {
let isCaptured = UIScreen.main.isCaptured
print("isCaptured: \(isCaptured)")
if isCaptured {
blurScreen()
}
else {
removeBlurScreen()
}
}
func blurScreen(style: UIBlurEffect.Style = UIBlurEffect.Style.regular) {
screen = UIScreen.main.snapshotView(afterScreenUpdates: false)
let blurEffect = UIBlurEffect(style: style)
let blurBackground = UIVisualEffectView(effect: blurEffect)
screen?.addSubview(blurBackground)
blurBackground.frame = (screen?.frame)!
window?.addSubview(screen!)
}
func removeBlurScreen() {
screen?.removeFromSuperview()
}
Netflix的解决方案与代码无关。它被称为DRM或数字版权管理。它保护数据免受任何盗版,包括屏幕录制/截图和下载。这真是太昂贵了。