写在前面

奈飞(Netflix,另一称“网飞”)近几年真的很火,并且越来越火。从《Seven》(七宗罪)到《V for Vendetta》(V 字仇杀队),从《Love、Death、Robots》(爱死机)到 2021 年火遍全球的《Squid Game》(鱿鱼游戏),奈飞旗下手握数字 IP 无数,这些鼎鼎大名的作品相信已经成为一代人心中的记忆,不过本文接下来并不是要探讨奈飞的数字内容宇宙。

随着流式媒体平台的火爆,有部分小伙伴通过各种姿势上车了 Netflix/Amazon Prime/Disney+/Apple TV+ 等新兴流媒体平台的会员,然后发现自己的黑苹果有时并不能正常播放这些内容;再或者购入了一套心仪已久的 AirPods Pro/Max/HomePod,发现赠送的 Apple Music 会员无法在黑苹果上播放...

这其中的原因,就是 DRM 在作怪。

DRM,英文全称 Digital Rights Management,直译为“数字版权管理”。数字版权管理是指数字内容,如音视频节目内容、文档、电子书籍等在生产、传播、销售、使用过程中进行的权利保护、使用控制与管理的技术。详见百度百科Wikipedia 查看。,本文不深究其原理及作用,仅针对黑苹果如何处理带 DRM 系统的数字内容做一些说明和探讨。

遗憾的是,在 macOS 升级到 11.x 版本(Big Sur)和 Safari 14.x 以后,苹果公司移除了 macOS 所有 DRM 软件解码器,DRM 内容的播放在苹果自家产品上是这么处理的:T2 和 M1 芯片内置了 DRM 硬件解码器;没有 T2 芯片的机型则使用拥有苹果数字证书的 iGPU 固件处理 DRM 内容,没有核显的机型则使用独立显卡的硬件解码器,而更古老的硬件解码器(例如 NVIDIA VP3)则干脆直接删除支持,因为这些机型本来也在新版本 macOS 的计划淘汰名单中。

单就奈飞的情况来看,目前 4K 内容和未来更高清的数字内容会强制要求使用 T2/M1 机型(macOS)或 7 代酷睿及以上平台(Windows),详见 9to5mac 这篇文章,未来的大方向就是内容版权方要求数字内容必须经由硬件解码。

铺垫那么多,其实就是要明确以下几点:

  • 新兴的流式媒体数字内容平台很多都配备了 DRM 以保护版权方利益;
  • 普通 PC(黑苹果)的核显不支持苹果的 iGPU 固件,也没有苹果的数字证书所以不支持硬件解码 DRM 内容;
  • macOS 10.15.x 及以下版本目前仍然保留了 DRM 软件解码器;
  • macOS 11.x 及以上版本完全删除了 DRM 软件解码器和古老的硬件解码器支持,因此 DRM 内容解码靠硬件,需要使用免驱支持的独立显卡,可见「macOS 独立显卡支持表」,免驱显卡优先选择较新型号,AMD 显卡建议 RX400/500(Polaris)及以上,NVIDIA 的免驱显卡则完全不建议考虑。
  • 鉴于 11.x 及以上系统不存在 DRM 软件解码器,接下来要讨论的内容主要基于 10.15.x 的 macOS 系统。

 

DRM 解码测试

建议在你认为已经完成黑苹果安装调试,驱动核显及优化独显(如果有优化方案的话)之后,再进行下列几项常见的 DRM 测试。

FairPlay 1.x:基于软件的 DRM,主要用于旧型号 Mac。

  • 最简单的测试方法是播放 iTunes 商店里的影片,或者尝试这个:FairPlay 1.x Test.m4v
    下载地址一:天翼云(访问码:3wbs)
    下载地址二:百度云(提取码: mj5t)
  • 只要 WhateverGreen.kext 的设置正确,FairPlay 1.x 的影片适用于任何黑苹果配置,包括只有核显的配置。但是,FairPlay 1.x 电影只能在仅有核显的配置上播放大约 3-5 秒,然后错误地认为不支持 HDCP

FairPlay 2.x/3.x:基于硬件的 DRM,主要见于奈飞(Netflix)和 Amazon Prime。

  • 直接到奈飞或 Amazon Prime 网站点几个 4K 影片看一下,或者播放 Amazon Prime 预告片《蜘蛛侠:英雄远征》,这个预告片没有 DRM 加密,但 Amazon 的播放器仍然会先检查是否支持。
  • 「注意」要求 Polaris(RX4x0/RX5x0)及更新架构的 AMD 显卡。

FairPlay 4.x:混合 DRM,见于 AppleTV+。

  • 如果你所在的地区可以正常使用 AppleTV,打开运行,选择 TV+,然后选择 Free AppleTV+ Premieres,然后点击任意内容进行测试。
  • 支持 AppleTV+ 业务的地区苹果公司会赠送一定时间试用,可供测试。
  • 「注意」要求没有核显的 Xeon 系列处理器或 Polaris(RX4x0/RX5x0)及更新架构的 AMD 显卡。在混合 DRM 模式和没有核显的情况下,强制 FairPlay 1.x 工作是可行的。

如果上述测试一切正常,就没有必要继续往下看了。

 

Shiki.kext

  • 在软件解码 DRM 内容流行时,黑苹果世界有位大神开发了 Shiki.kext,目前该项目已合并到 WhateverGreen.kext(WEG),WEG 继承了 Shiki.kext 的所有 DRM 补丁功能。Shiki.kext 允许调用 macOS 内置的 DRM 软件解码器对 DRM 内容进行解码播放,但并不能把苹果公司已删除的 DRM 软件解码器带回来,因此并不保证 11.x 及以上系统可以正常工作。
  • macOS 10.15.x Catalina + Safari 13.x 支持很多 DRM 解码器类型,Acidanthera 团队中的大神 vit9696 曾经整理了一个详细的表格,适用于常见的各类黑苹果硬件类型:
配置 黑果机型 适用模式 ITunes 预告片 ITunes 电影 苹果 TV+ Amazon Prime 预告片 Amazon Prime/Netflix 英特尔 IQSV
核显+AMD独显 iMac/Macmini shikigva=16 软解 FairPlay 1.0 软解 FairPlay 2.0 硬解 FairPlay 4.0 普通硬解 不支持 支持
核显+AMD独显 iMac/Macmini shikigva=80 软解 FairPlay 1.0 软解 FairPlay 2.0 硬解 FairPlay 4.0 硬解 FairPlay 3.0 硬解 FairPlay 3.0 支持
仅AMD独显 iMacPro/MacPro 软解 FairPlay 1.0 软解 FairPlay 2.0 硬解 FairPlay 4.0 硬解 FairPlay 3.0 硬解 FairPlay 3.0 不支持
仅AMD独显 iMacPro/MacPro shikigva=128 硬解 FairPlay 1.0 硬解 FairPlay 2.0 硬解 FairPlay 4.0 硬解 FairPlay 3.0 硬解 FairPlay 3.0 不支持
核显+NVIDIA独显 iMac/Macmini 软解 FairPlay 1.0 软解 FairPlay 2.0 不支持 普通硬解 不支持 支持
仅NVIDIA独显 iMacPro/MacPro shikigva=256 软解 FairPlay 1.0 软解 FairPlay 2.0 软解 FairPlay 3.0 普通硬解 不支持 不支持
仅核显 iMac/Macmini 软解 FairPlay 1.0 不支持 不支持 普通硬解 不支持 支持

几点说明:

  • 「注意」:适用上表的硬件配置情况,iMac 机型必须满足这个条件:拥有 AMD/NVIDIA 独立显卡的配置,核显需设置为专门用于硬解加速的帧缓冲 ID,例如 0x3E9B0007 核显是有画面输出的,而 0x3E980003 核显仅用于计算加速;iMacPro 和 MacPro 机型是没有核显的处理器机型首选。
  • 「普通软解」:软件未加密解码器,任意情况下都能正常工作;
  • 「普通硬解」:硬件未加密解码器,值需要兼容硬解的 GPU 就能工作;
  • 「软解 FairPlay 1.0」:软件 FairPlay 1.0 解码器 (CoreFP);
  • 「软解 FairPlay 2.0」:软件 FairPlay 1.0 解码器 (CoreFP),需要 HDCP
  • 「软解 FairPlay 3.0」:软件 FairPlay 4.0 解码器 (CoreLSKD),需要 HDCP 且无需核显;
  • 「硬解 FairPlay 1.0」:硬件 FairPlay 1.0 解码器 (CoreFP),需要支持的 AMD 显卡;
  • 「硬解 FairPlay 2.0」:硬件 FairPlay 1.0 解码器 (CoreFP),需要 HDCP 和支持的 AMD 显卡;
  • 「硬解 FairPlay 3.0」:硬件 FairPlay 2.0/3.0 解码器 (CoreLSKDMSE),需要 HDCP 和支持的 AMD 显卡;
  • 「硬解 FairPlay 4.0」:硬件 FairPlay 4.0 解码器 (CoreLSKD),需要 HDCP 和支持的 AMD 显卡;
  • 「英特尔 IQSV」:指的是 Intel Quick Sync Video,当存在英特尔核显并在 BIOS 中启用,且设置正确时才有效;
  • 上表中的 shikigva=N 可以直接作为启动参数使用,例如 shikigva=80 或 shikigva=16。也可以用作设备属性(DeviceProperties)进行注入。启动参数的添加方法见「启动参数说明」一文,下面介绍一下如何用设备属性方法分配到你的核显/独显上。「注意」如果你有多个显卡,只能选择其中一个进行设备属性注入,否则无法保证 shikigva 功能是否工作正常。
  • 启动参数说明

设备属性注入法

首先从 Hackintool 获取你的显卡 Pci 路径:

如图所示复制 Device Path。

然后打开 OpenCore Configurator / Clover Configurator / OpenCoreAuxiliaryTools / ProperTree 编辑器,照图输入:

OpenCore Configurator

 

OCAuxiliaryTools

PlistEDPlus
Clover Configurator

上图中的 shikigva=80 是可以自行定义的,可参考是本文之前给出的表格,另一种是参考 WEG 的开发堆栈中 kern_shiki.hpp 的内容,开发团队写了非常多的注释,如下:

ShikiGVAPatches {
		// Remove forceOfflineRenderer from AppleGVA Info.plist.
		// This is required to allow hardware acceleration on several mac models with discrete GPUs
		// when only IGPU is available.
		// See /System/Library/PrivateFrameworks/AppleGVA.framework/Resources/Info.plist for more details.
		ForceOnlineRenderer        = 1,
		// Remove hweBGRA from AppleGVA Info.plist.
		// hweBGRA is not supported by NVIDIA GPUs, so the patch is sometimes required when using NVIDIA
		// in a mac model meant to be used with AMD or Intel.
		// See /System/Library/PrivateFrameworks/AppleGVA.framework/Resources/Info.plist for more details.
		AllowNonBGRA               = 2,
		// Prior to 10.13.4 certain GPU+CPU combinations were not meant to provide hardware acceleration and had to be patched.
		// The overall problematic configuration list is: NVIDIA+BDW, NVIDIA+SKL, NVIDIA+KBL, AMD+IVB, NVIDIA+SNB.
		// Enabled automatically if shikigva is *NOT* passed on 10.13.3 and earlier. All are fixed in 10.13.4.
		ForceCompatibleRenderer    = 4,
		// Unlike 10.12.6 without security updates and earlier, on 10.13 and latest 10.12.6 AppleGVA patches
		// do not apply to all processes, and each process needs to be patched explicitly. This is a bug
		// in Lilu, which needs to be explored and fixed. For now this bit ensures that the processes present
		// in WHITELIST section of Patches.plist will definitely get the fixes even on 10.13 and 10.12.6.
		// On 10.12.6 and 10.13 this must be used if any of the following bits are used:
		// - ForceOnlineRenderer
		// - AllowNonBGRA
		// - ForceCompatibleRenderer
		// - ReplaceBoardID
		// - FixSandyBridgeClassName
		// It is enabled automatically on 10.12 and 10.13 if shikigva is *NOT* passed and ForceCompatibleRenderer or
		// FixSandyBridgeClassName are automatically enabled.
		AddExecutableWhitelist     = 8,
		// Use hardware DRM decoder (normally AMD) by pretending to be iMacPro in apps that require it.
		// For example, in Music.app or TV.app for TV+.
		UseHwDrmDecoder            = 16,
		// Replace board-id used by AppleGVA and AppleVPA by a different board-id.
		// Sometimes it is feasible to use different GPU acceleration settings from the main mac model.
		// By default Mac-27ADBB7B4CEE8E61 (iMac14,2) will be used, but you can override this via shiki-id boot-arg.
		// See /System/Library/PrivateFrameworks/AppleGVA.framework/Resources/Info.plist for more details.
		ReplaceBoardID             = 32,
		// Attempt to support fps.2_1 (FairPlay 2.x) in Safari with hardware decoder. Works on most modern AMD GPUs.
		// Note, AMD Polaris Ellesmere is broken in 10.15 (e.g. RX 590), whereas AMD Polaris Baffin (e.g. RX 460) is fine.
		// Easiest check is to run WebKitMediaKeys.isTypeSupported("com.apple.fps.2_1", "video/mp4") in Safari Web Console.
		// Broken GPU driver will just freeze the system with .gpuRestart crash.
		UseHwDrmStreaming          = 64,
		// Disables software decoder unlock patches for FairPlay 1.0.
		// This will use AMD decoder if available, but currently requires IGPU to be either not present or disabled.
		UseLegacyHwDrmDecoder      = 128,
		// Enables software decoder unlock patches for FairPlay 4.0.
		// This will use software decoder, but currently requires IGPU to be either not present or disabled.
		UseSwDrmDecoder            = 256,
};

 

Shiki 全参数解释

除了通用的 DRM 解锁补丁外,Shiki.kext 还提供了一组补丁来解决硬件视频加速支持的各种问题。这些设置可作为 shikigva 的参数使用,下面的功能都有一个位掩码,将所需要的功能位掩码相加,即可得出 shikigva=N 这个启动参数的 N 值。

例如,如要启用 ForceOnlineRenderer、addExecutableWhitelist 和 ReplaceBoardID,只需将这几个功能的对应位掩码相加:1 + 8 + 32 = 41,将 41 传递给 shikigva 即可,即:shikigva=41

ForceOnlineRenderer = 1
# 从 AppleGVA Info.plist 移除 forceOfflineRenderer。
# 如果机型是具有独显的 Mac 机型,但只有核显可用时,若要进行硬件加速,此项是必须的。
# 更多信息可参阅 /System/Library/PrivateFrameworks/AppleGVA.framework/Resources/Info.plist


AllowNonBGRA = 2
# 从 AppleGVA Info.plist 移除 hweBGRA。
# NVIDIA 显卡不支持 hweBGRA,因此,如果在一个原本只有 AMD 独显或英特尔核显的 Mac 机型上使用了 NVIDIA 独显,那么这个补丁有时是必须的。
# 更多信息参阅 /System/Library/PrivateFrameworks/AppleGVA.framework/Resources/Info.plist


ForceCompatibleRenderer = 4
# 在 10.13.4 之前,某些 GPU+CPU 组合并不能提供硬件加速,必须打补丁。
# 总体有问题的配置列表是:
# NVIDIA + Broadwell / NVIDIA + Skylake / NVIDIA + Kabylake / AMD + IvyBridge / NVIDIA + SandyBridge
# 如果 shikigva 未在 10.13.3 及更早版本上传递,则该项自动启用。所有都在 10.13.4 中修复。


AddExecutableWhitelist = 8
# 与没有安全更新的 10.12.6 和更早版本不同,10.13 和最新的 10.12.6 AppleGVA 补丁并不适用于所有进程,每个进程都需要显式修补。这是 Lilu 的一个 bug,需要探索和修复。
# 目前,该位确保 Patches.plist 的白名单部分中存在的进程即使在 10.13 和 10.12.6 上也肯定会得到修复。当使用了下面任意一个补丁时,在 10.12.6 和 10.13 上必须启用这个补丁:
# - ForceOnlineRenderer
# - AllowNonBGRA
# - ForceCompatibleRenderer
# - ReplaceBoardID
# - FixSandyBridgeClassName
# 如果 shikigva 未传递并且 ForceCompatibleRenderer 或 FixSandyBridgeClassName 自动启用,该补丁会在 10.12 和 10.13 自动启用


UseHwDrmDecoder = 16
# 在需要硬件 DRM 解码器的应用程序中伪装为 iMacPro 机型以使用硬件 DRM 解码器(通常是 AMD)
# 例如, Music.app(AppleMusic)或 TV.app(AppleTV+)

ReplaceBoardID = 32
# 将 AppleGVA 和 AppleVPA 使用的 board-id 替换为不同的 board-id
# 某些情况下使用和当前 Mac 机型不同的 GPU 加速设置是可行的
# 默认情况下该补丁使用 Mac-27ADBB7B4CEE8E61(iMac14,2),也可以使用 shiki-id=N 作为启动参数来手动指定
# 更多内容参阅 /System/Library/PrivateFrameworks/AppleGVA.framework/Resources/Info.plist


UseHwDrmStreaming = 64
# 尝试在 Safari 中使用硬件解码器支持 fps.2_1 (FairPlay 2.x),该补丁适用于大多数较新的 AMD 显卡
# 「注意」Polaris.Ellesmere 在 10.15 中(例如 RX590)驱动已被破坏,但 Polaris.Baffin(例如 RX460)则正常
# 最简单的测试方法是在 Safari 的 Web 控制台中运行 WebKitMediaKeys.isTypeSupported("com.apple.fps.2_1", "video/mp4")
# 损坏的显卡驱动程序会导致系统因 .gpuRestart 崩溃而卡死,也就是冻屏


UseLegacyHwDrmDecoder = 128
# 禁用 FairPlay 1.0 软件解码器的解锁补丁。
# 如果有 AMD 解码器则会自动应用(代表配有 AMD 独显),但目前补丁要求不存核显在或禁用核显


UseSwDrmDecoder = 256
# 启用 FairPlay 4.0 软件解码器的解锁补丁
# 这将使用软件解码器,但目前补丁要求不存核显在或禁用核显

比较常见的搭配是 16/40/80/256。如果计划开启 ReplaceBoardID 就还需要再搭配启动参数 shiki-id,例如 shiki-id=Mac-7BA5B2D9E42DDD94,这是 iMacPro 机型的 Board-id。

对于常见的 Intel 处理器 + AMD 独显的配置,笔者个人比较推荐的搭配是 shikigva=80 shiki-id=Mac-7BA5B2D9E42DDD94  ,这个搭配能让 AppleMusic 和部分带 DRM 的流媒体正常工作,同时保留了核显和随航。

如果尝试了可能的位掩码组合后仍然对你遇到的问题没有帮助,建议直接关闭核显,更换为 iMacPro 或 MacPro 等没有核显的机型。

「划重点」虽然 OC 团队一再宣称 Shiki 相关功能并没有为 macOS 11.x 及以上版本准备和设计,但上面的大部分设置和建议,在 11.x 及以上版本系统里其实也是有效的,如果你的硬件解码或 DRM 内容播放不正常,建议尝试关闭核显的方案。

 

小结

总的来说,应用 Shiki 的功能调整 macOS 的 DRM 解码策略是比较简单的。举个例子,如果你的配置是 AMD 5900X,独显是 5700XT,那么按照表格你可以选择 shikigva=128,你可以使用启动参数方式,也可以使用设备属性注入方式,修改好配置后重启系统进行验证是否生效;

再举个例子,如果你的配置是 i9-9900K,独显是 Radeon VII,选择面就宽一点,在启用核显的情况下有 shikigva=16 和 shikigva=80 两种,在关闭核显后还可以尝试 shikigva=128,修改好配置后重启系统进行验证是否生效。

比较少见的特殊配置,例如 i7-3770k + 6800XT (已关闭核显)这类老处理器搭较新显卡的情况,不包含在上面的表单中。建议按照上面给出的 Shiki 的全功能解释逐个尝试,或自行研究。

对于比较古老的处理器(例如 Xeon 或 Core 2 Quad)搭配支持的 AMD 显卡,要使用带 DRM 的流式媒体时,需要给显卡注入以下设备属性:

unfairgva | 01 00 00 00 | Data

AMD 显卡的视频解码器首选项可以覆盖部分类型的 DRM 内容(如 Apple TV 和 iTunes 电影流)的首选项。但是这些首选项可能不完全和 macOS 其它功能兼容,可能导致其他软件或程序的解码/编码功能出现问题。下面提供了几组可供修改的首选项修改,不建议日常使用,在需要时修改。打开终端按需输入即可:

defaults write com.apple.AppleGVA gvaForceAMDAVCDecode -boolean yes
# 强制 AMD AVC 加速解码器


defaults write com.apple.AppleGVA gvaForceAMDKE -boolean yes
# 强制 AMD DRM 解码器用于流媒体服务(例如 AppleTV 和 iTunes 电影流)


defaults write com.apple.AppleGVA gvaForceAMDAVCEncode -boolean yes
# 强制 AMD AVC 加速编码器


defaults write com.apple.AppleGVA gvaForceAMDHEVCDecode -boolean yes
# 强制 AMD HEVC 加速解码器


defaults write com.apple.AppleGVA disableGVAEncryption -string YES
# 强制 AMD HEVC 加速解码器


defaults write com.apple.coremedia hardwareVideoDecoder -string force
# 强制硬件加速视频解码器(适用于任何分辨率)


defaults write com.apple.coremedia hardwareVideoDecoder -string disable
# 关闭硬件加速视频解码器(QuickTime / AppleTV)

上述第一条还可能同时可以解决 macOS Big Sur 中 VDADecoderCreate failed. err: -12473 的问题。