StaZhu / enable-chromium-hevc-hardware-decoding

A guide that teach you enable hardware HEVC decoding & encoding for Chrome / Edge, or build a custom version of Chromium / Electron that supports hardware & software HEVC decoding and hardware HEVC encoding.
MIT License
1.2k stars 60 forks source link

是否能支持一下网飞,苦uwp客户端久已,edge网飞hevc也是玄学问题特别多。 #6

Closed ChaoSSSSSSSSSSS closed 1 year ago

ChaoSSSSSSSSSSS commented 2 years ago

总结一下uwp网飞的缺点

StaZhu commented 2 years ago

支持网飞呀,windows平台支持EME和MSE,你试了不支持吗?

ChaoSSSSSSSSSSS commented 2 years ago

uTools_1653104051543 uTools_1653105409655 @StaZhu

StaZhu commented 2 years ago

uTools_1653104051543 uTools_1653105409655 @StaZhu

这个应该是chromium 没编译cdm导致,我先看看咋解决。

StaZhu commented 2 years ago

uTools_1653104051543 uTools_1653105409655 @StaZhu

这个应该是chromium 没编译cdm导致,我先看看咋解决。

嗯,可以确定是由于没编译CDM进去导致,有时间我再编一版带CDM的

ChaoSSSSSSSSSSS commented 2 years ago

我也去做了一些功课,网飞似乎会认证软件,其中edge浏览器在他的白名单内,为此还诞生了Super Netflix 插件。

StaZhu commented 2 years ago

我也去做了一些功课,网飞似乎会认证软件,其中edge浏览器在他的白名单内,为此还诞生了Super Netflix 插件。

理论上mock成edge的UA + Chromium 支持加密H265 EME 就可以欺骗Netflix,我在mac尝试了下带上CDM,可以解决你上述的报错问题,所以我再重新编译一版带CDM的就可以了。

ChaoSSSSSSSSSSS commented 2 years ago

其实mac 4K 网飞一直是一个无解的难题。似乎edge在内的mac版都无法正常网飞观影,如果能解决这个项目将会是macos网飞观影的0-1了,apple生态中网飞的观影都是:请购置一台appletv。但我一直听想有一个macmini作为自己的电视机播放设备。

StaZhu commented 2 years ago

其实mac 4K 网飞一直是一个无解的难题。似乎edge在内的mac版都无法正常网飞观影,如果能解决这个项目将会是macos网飞观影的0-1了,apple生态中网飞的观影都是:请购置一台appletv。但我一直听想有一个macmini作为自己的电视机播放设备。

这个不好解决,Mac现在虽然支持HEVC硬解,但是并不支持加密视频流,而且chromium目前完全没有fairplay的任何实现,所以在mac 解码奈飞 4K HEVC是不OK的(至少是目前),但是Windows的HEVC硬解是支持加密视频流的,晚点我编译一版你再试试。

StaZhu commented 2 years ago

其实mac 4K 网飞一直是一个无解的难题。似乎edge在内的mac版都无法正常网飞观影,如果能解决这个项目将会是macos网飞观影的0-1了,apple生态中网飞的观影都是:请购置一台appletv。但我一直听想有一个macmini作为自己的电视机播放设备。

macmini不是可以用safari么?

ChaoSSSSSSSSSSS commented 2 years ago

safari 也是最高1080P,好像是因为白名单还是什么原因忘记了。

ChaoSSSSSSSSSSS commented 2 years ago

哦对,加密视频流会是一个问题。看来还是有一个难关

ChaoSSSSSSSSSSS commented 2 years ago

更新了一下最新状况,去年Q4的系统更新让macos safari支持了网飞4K了。看来可以去买macmini做盒子用了

StaZhu commented 2 years ago

更新了一下最新状况,去年Q4的系统更新让macos safari支持了网飞4K了。看来可以去买macmini做盒子用了

新编译了一版带CDM的,再试试。

ChaoSSSSSSSSSSS commented 2 years ago

问题得到解决,然后网飞 强制AV1 软解了,检索了一下没有找到具体哪里设置能解决这个问题,我试试伪装成其他浏览器

ChaoSSSSSSSSSSS commented 2 years ago

经过了所有网飞白名单不同的版本的测试,测试片源是风骚律师,chrome最新到98都是强制av1,97以内全是VP9。 伪装成safari不会被判定为mac。 真edge for hevc插件到是可以触发hevc,可能是dll加载后才会开始挂载上去,网飞各种插件也没看见可以控制这个片源指向的首发唉。

StaZhu commented 2 years ago

经过了所有网飞白名单不同的版本的测试,测试片源是风骚律师,chrome最新到98都是强制av1,97以内全是VP9。 伪装成safari不会被判定为mac。 真edge for hevc插件到是可以触发hevc,可能是dll加载后才会开始挂载上去,网飞各种插件也没看见可以控制这个片源指向的首发唉。

chromium 104 伪装成 edge 有试过么

ChaoSSSSSSSSSSS commented 2 years ago

试过了,从老edge18到edge80级版本一直到最新的疑虑触发avc

StaZhu commented 2 years ago

试过了,从老edge18到edge80级版本一直到最新的疑虑触发avc

那看起来只能等netflix适配了,不确定netflix的触发逻辑是啥。

wyq977 commented 2 years ago

@ChaoSSSSSSSSSSS 加上CDM你能看到HEVC的4k吗?在Windows下 方便截下图吗 ‘Ctrl’ + ‘Shift’ + ‘Alt’ + ‘D’ 看下数据谢谢

ChaoSSSSSSSSSSS commented 2 years ago

@ChaoSSSSSSSSSSS 加上CDM你能看到HEVC的4k吗?在Windows下 方便截下图吗 ‘Ctrl’ + ‘Shift’ + ‘Alt’ + ‘D’ 看下数据谢谢

没有任何特征版本可以让网飞调hevc的解码模式出来,你可以看看uwp的特征,用在浏览器上,但我懒得去抓包了。你可以从这个角度试试数据上就是强制AV1。我已经测试了几十个各种版本了,AV1 VP9 AVC就是无法hevc。

wyq977 commented 2 years ago

那你AV1 加上CDM之后可以播放1080p 2k 4k的吗 现在只是不能选到HEVC是吗

ChaoSSSSSSSSSSS commented 2 years ago

那你AV1 加上CDM之后可以播放1080p 2k 4k的吗 现在只是不能选到HEVC是吗

可以4K

wyq977 commented 2 years ago

OK 谢谢 我回头试试 之前chrome上一直用NF 1080p插件

VP9 1080p 但是不能2k 4k

jason-akw commented 2 years ago

在windows測了release裡面的兩個版本(104、105),netflix都是報DRM錯誤的,有什麼選項需要打開嗎?

StaZhu commented 2 years ago

在windows測了release裡面的兩個版本(104、105),netflix都是報DRM錯誤的,有什麼選項需要打開嗎?

EME部分chromium的大佬还在搞,按我了解,奈飞会掉用硬件加密widevine模块(最终走mediafoundation cdm),因为我对eme部分不是太了解,他们的代码也不开源,杜比视界eme支持上周才合进去,但还没加到flag里打包到chrome canary,持续跟进官方进展吧。

StaZhu commented 1 year ago

Windows Netfilx 4K 好像还需要 playready? Chromium 似乎不支持, Edge 是有的

Playready是微软的CDM实现,主要用于Edge。Playready 支持软件HEVC/杜比视界解密, 也支持硬件HEVC/杜比视界解密。

Widevine是Chrome的CDM实现,主要用于Chrome。Widevine 不支持软件HEVC/杜比视界解密(L3级别),并且Chrome Media Team也没有计划支持Widevine HEVC/DV的软解密(见:crbug.com/1405231),但支持HEVC硬件解密(L1级别),同时是最新的Chrome110版本,启动参数带上--enable-features=PlatformEncryptedDolbyVision,也支持杜比视界Profile4/5/8硬件解密(L1级别)。

我不确定Netflix 4K 是否走的是杜比视界,那么原则上他们如果想适配,那么应该从Chrome 110左右的版本已经在适配了,等到Chrome 112 - 114左右版本,当Chrome官方默认启用了Widevine 杜比视界不需要传--enable-features=PlatformEncryptedDolbyVision之后,Chrome就有了硬件DRM杜比视界的能力了。

综上,假定支持Netflix没支持Chrome是因为杜比视界,那么在Netflix官方会主动做适配的情况,并且Chrome 11x版本默认启用DV DRM支持后,可能这个问题就解决了。

但由于Widevine和Playready都是闭源的,我对这块进度的了解仅限于这么多了。

StaZhu commented 1 year ago

因为我没有Netflix会员,所以你也可以试试带上启动参数--enable-features=PlatformEncryptedDolbyVision,打开Chrome 110,然后试试打开网飞,有进展也可以在这里同步

StaZhu commented 1 year ago

周末确认了几个事情:

  1. HardwareSecureDecryptionExperiment在Windows Chrome 110已默认开启 (链接) 因此可以说HEVC Widevine L1从Chrome 110开始已经默认支持了,测试代码:

    navigator.requestMediaKeySystemAccess("com.widevine.alpha.experiment", [{
    initDataTypes: ["cenc"],
    distinctiveIdentifier: "required",
    persistentState: "required",
    sessionTypes: ["temporary"],
    videoCapabilities: [{
    robustness: "HW_SECURE_ALL",
    contentType: "video/mp4; codecs=hev1.1.6.L120.90",
    }],
    }]);

    可以看到key是com.widevine.alpha.experiment而不是com.widevine.alpha 说明为实验性功能。

  2. DV Widevine L1(PlatformEncryptedDolbyVision)从Windows Chrome 110开始启动测试,需要手动传启动参数--enable-features=PlatformEncryptedDolbyVision开启,支持杜比视界Profile 4,5,8(不过经测试,显示器开HDR时不可用,可能和我的显示器只支持HDR10有关系),测试代码:

    navigator.requestMediaKeySystemAccess("com.widevine.alpha.experiment", [{
    initDataTypes: ["cenc"],
    distinctiveIdentifier: "required",
    persistentState: "required",
    sessionTypes: ["temporary"],
    videoCapabilities: [{
    robustness: "HW_SECURE_ALL",
    contentType: "video/mp4; codecs=dvhe.05.07",
    }],
    }]);
  3. Netflix的JS代码里有搜到com.widevine.alpha.experiment关键字,至少知道网飞可能在测试了,其他进度不清楚。

结论:

  1. Chrome 110 Windows平台已默认支持HEVC Widevine L1硬解密。
  2. Chrome 110 Windows平台需要启动参数可支持杜比视界,杜比世界在HDR10显示器上不可用。
  3. Chrome 其他平台目前没有支持的可能性。
  4. 有迹象表明网飞在测试,但具体进度不明确。