【问题标题】:How to prevent iOS11 Built in screen recording feature just like Amazon Prime for protected DRM content?如何防止 iOS11 内置屏幕录制功能,就像 Amazon Prime 一样用于受保护的 DRM 内容?
【发布时间】:2018-03-03 14:02:30
【问题描述】:

WideVine iOS CDM Player 正在播放受 DRM 保护的内容。 现在,iOS11 引入了一个新的内置功能,即屏幕录制。 使用此功能,用户可以轻松捕获或记录受 DRM 保护的内容。

我使用了 iOS11 Beta 的 isCaptured 和 UIScreenCapturedDidChange 属性并试图阻止 DRM 保护的内容被记录,但是当我第一次启动我的应用程序时,这 isCaptured 和 UIScreenCapturedDidChange 工作正常。现在,当我终止正在运行的应用程序(终止应用程序)并再次启动时,我的应用程序没有收到任何 isCaptured 和 UIScreenCapturedDidChange 值。

现在我尝试使用 iOS11 屏幕录制功能录制 Netflix 和 Amazon Prime 内容,但它不允许录制并出现黑屏。

我想要在 iOS11 设备上打开屏幕录制时出现类似的黑屏,但我没有解决方案。如果有人有那么请帮忙。

【问题讨论】:

    标签: ios ios11 drm widevine


    【解决方案1】:

    您可以使用UIScreen.main.isCaptured 来判断屏幕是否正在通过屏幕录制或 AirPlay 等进行录制...然后显示您的黑色视图以覆盖您的屏幕

    【讨论】:

    • 谢谢,但是当我尝试使用 KVO 捕获 UIScreen.main.isCaptured 事件时,它第一次通知选择器方法值为 True,但是当我杀死(终止)我正在运行的应用程序并启动时再次应用程序并再次执行相同的过程,然后我的选择器方法没有被调用。
    • 注册 NSNotification 而不是 KVO UIScreenCapturedDidChangeNotification -- 在此处查看更多信息 stackoverflow.com/a/46370265/2145198
    【解决方案2】:

    Netflix 和亚马逊的主要 iOS 应用正在使用适用于苹果设备的 Apple DRM 解决方案 - FairPlay (https://developer.apple.com/streaming/fps/)。 AVPlayer播放FairPlay加密内容时,iOS11录屏无法截取。

    【讨论】:

      【解决方案3】:

      您只需在 Appdelegate.swift 页面中进行以下更改。

      当用户尝试记录屏幕时,它会自动在应用顶部添加一个模糊视图。

          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()
      }
      

      【讨论】:

        猜你喜欢
        • 2017-06-28
        • 2017-12-23
        • 1970-01-01
        • 1970-01-01
        • 2021-05-17
        • 2019-04-06
        • 2011-05-07
        • 1970-01-01
        • 2018-05-14
        相关资源
        最近更新 更多