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.24k stars 60 forks source link

无法播放hevc mkv #31

Closed jim-king-2000 closed 2 years ago

jim-king-2000 commented 2 years ago

感谢

浏览器支持HEVC是一个划时代的进步。感谢!

代码

<body bgcolor=#000000>
<p align=center>
<video controls="controls" autoplay>
<source src="TearsOfSteel_720p_h265.mkv" type="video/mp4">
</video>
</p>
</body>

现象

黑屏。换H.264的mkv文件,可以正常播放。

平台

  1. Win11最新版
  2. Chrome最新版

问题

  1. 现在用--enable-features=PlatformHEVCDecoderSupport能不能播放hevc mkv?
  2. 如果不能,那么什么时候能?
StaZhu commented 2 years ago
  1. 支持不支持?chromium部分支持mkv(官方话术),本人测试过可播。
  2. 能不能播?能播。
  3. 怎么播?把后缀改成mp4直接拖到浏览器就行了,不用写video标签这么麻烦。
  4. 为什么不能播?提供下Chrome版本信息,提供下视频文件地址。
jim-king-2000 commented 2 years ago

拖进去就下载了。并不能播放。

  1. 怎么播?把后缀改成mp4直接拖到浏览器就行了,不用写video标签这么麻烦。

视频文件下载链接: https://dl6.webmfiles.org/TearsOfSteel_720p_h265.mkv chrome版本: 版本 105.0.5195.127(正式版本) (64 位)

  1. 为什么不能播?提供下Chrome版本信息,提供下视频文件地址。
StaZhu commented 2 years ago
  1. 把.mkv改成.mp4拖进去就行了。
  2. 你可以试下Chrome Canary,105有一个bug,107以后修了。
jim-king-2000 commented 2 years ago

果然可以了。不出现下载了。但只有声音没有图像。

  1. 把.mkv改成.mp4拖进去就行了。

好的,我马上试试。

  1. 你可以试下Chrome Canary,105有一个bug,107以后修了。
StaZhu commented 2 years ago

没声音是正常的,Chrome不支持E-AC3

jim-king-2000 commented 2 years ago

亲,有声音,但没有图像。

没声音是正常的,Chrome不支持E-AC3

StaZhu commented 2 years ago

亲,有声音,但没有图像。

没声音是正常的,Chrome不支持E-AC3

大部分网上的mkv一般都是e-ac3的。

更新到Chrome Canary,你发的这个视频是libde265编码器编码出来的,这个编码器有一个值写入的不规范,之前校验太严格了,导致Chrome 105播放失败,Chrome 107以后版本放宽校验了,就OK了,你可以试试

jim-king-2000 commented 2 years ago

果然可以播放了。并且是硬解码。太赞了!!!Chrome 107竟然不需要--enable-features=PlatformHEVCDecoderSupport???

jim-king-2000 commented 2 years ago

但是画面会抖动……

StaZhu commented 2 years ago

但是画面会抖动……

你确定?这个视频,我这一切正常。

jim-king-2000 commented 2 years ago

确定。我这边持续不断的抖动。

你确定?这个视频,我这一切正常。

StaZhu commented 2 years ago

果然可以播放了。并且是硬解码。太赞了!!!Chrome 107竟然不需要--enable-features=PlatformHEVCDecoderSupport???

不需要,107之后默认启用。

StaZhu commented 2 years ago

确定。我这边持续不断的抖动。

你确定?这个视频,我这一切正常。

提供录屏。

jim-king-2000 commented 2 years ago

我一会儿录个视频放上来。

确定。我这边持续不断的抖动。

jim-king-2000 commented 2 years ago

https://user-images.githubusercontent.com/7019050/191227769-62f780b5-467e-46ba-a0db-9dd5b3731ab5.mp4

StaZhu commented 2 years ago

这个貌似是你AMD显卡的问题,建议先更新下显卡驱动。

jim-king-2000 commented 2 years ago

好的。我试试看。

jim-king-2000 commented 2 years ago

顺便再问亲一个问题。Chrome的WebRTC什么时候可以支持HEVC?我用Chrome107播放HEVC的WebRTC流,仍然黑屏。

StaZhu commented 2 years ago

顺便再问亲一个问题。Chrome的WebRTC什么时候可以支持HEVC?我用Chrome107播放HEVC的WebRTC流,仍然黑屏。

不是一拨人开发的,代码也完全不一样,WebRTC开发节奏我不太了解哈,你可以到crbug问他们有没有计划。

jim-king-2000 commented 2 years ago

好的,谢谢。再次感谢亲的chrome hevc hardware decoding,太棒了!!!

不是一拨人开发的,代码也完全不一样,WebRTC开发节奏我不太了解哈,你可以到crbug问他们有没有计划。

jim-king-2000 commented 2 years ago

还是抖。

这个貌似是你AMD显卡的问题,建议先更新下显卡驱动。

StaZhu commented 2 years ago

你浏览器播放H264视频抖么?

jim-king-2000 commented 2 years ago

你浏览器播放H264视频抖么?

不抖,非常稳定。用开源播放器播放HEVC视频也很稳定。

StaZhu commented 2 years ago

辛苦打开chrome://gpu页面,导出为pdf,发过来

jim-king-2000 commented 2 years ago

辛苦打开chrome://gpu页面,导出为pdf,发过来

已经在家里了。明早一到公司就发。

StaZhu commented 2 years ago

OK,好的

jim-king-2000 commented 2 years ago

mygpu.txt

jim-king-2000 commented 2 years ago

亲,不知道如何导出pdf。导出成txt可以吗?

辛苦打开chrome://gpu页面,导出为pdf,发过来

StaZhu commented 2 years ago
  1. 右边菜单选“打印”,然后就可以导出pdf了。
  2. 辛苦传一下这个启动参数(桌面快捷方式)再试试 --disable-gpu-driver-bug-workarounds
jim-king-2000 commented 2 years ago

GPU Internals.pdf

右边菜单选“打印”,然后就可以导出pdf了。

还是抖。

辛苦传一下这个启动参数(桌面快捷方式)再试试 --disable-gpu-driver-bug-workarounds

StaZhu commented 2 years ago

看起来像是个很奇怪的问题,我从来没见过,并且我之前用的AMD RX6600测试时没问题的(没测过其他显卡),暂时说不好是啥问题。

  1. 打开测试页面的视频,尝试播放几个,看下是否都有这个问题,还是只有这个视频这样?

  2. 用VLC播放器打开这个视频,正常吗?(用VLC是因为,VLC也走得D3D11做的硬解,同时也注意下:任务管理器 - 性能 - GPU - Video Codec 是否大于0,有可能VLC会fallback到软解)。

  3. 如果还不行,需要辛苦你到crbug.com提个issue,然后我找搞GPU的大神看下。

jim-king-2000 commented 2 years ago

Yes, sir. 立刻执行。

jim-king-2000 commented 2 years ago

微信图片_20220921125922 播放按钮都是灰的。

打开测试页面的视频,尝试播放几个,看下是否都有这个问题,还是只有这个视频这样?

jim-king-2000 commented 2 years ago

VLC没有任何问题。播放很稳定。

用VLC播放器打开这个视频,正常吗?(用VLC是因为,VLC也走得D3D11做的硬解,同时也注意下:任务管理器 - 性能 - GPU - Video Codec 是否大于0,有可能VLC会fallback到软解)。

StaZhu commented 2 years ago

可以等1-2分钟再刷新页面,可能是cdn比较慢,也可以随意右键任意一个视频-另存为,然后拖进来播放。

jim-king-2000 commented 2 years ago

可以等1-2分钟再刷新页面,可能是cdn比较慢,也可以随意右键任意一个视频-另存为,然后拖进来播放。

收到。

StaZhu commented 2 years ago

就等你多试几个视频了,如果都有闪屏的问题,就可以到crbug提反馈了,反馈模板参照这个:https://bugs.chromium.org/p/chromium/issues/detail?id=1362288

jim-king-2000 commented 2 years ago

好的。

jim-king-2000 commented 2 years ago

我测试了https://lf3-cdn-tos.bytegoofy.com/obj/tcs-client/resources/video_demo_hevc.html上的5个视频,现总结如下:

  1. hevc_8k60P_bilibili_1.mp4,在VLC里都很卡,所以就没有在Chrome里尝试了。
  2. hevc_4K60P_bilibili_pq_4.mp4,在VLC里可以流畅播放。但在Chrome里无法播放。并且一旦Chrome一旦播放该视频失败,别的可以播放的视频也无法播放了(有声音,没图像。新建选项卡播放也不行)。关闭Chrome再打开,则可以正常播放其它视频。
  3. 其它60帧以下的视频均可在Chrome里正常播放,没有闪烁。
StaZhu commented 2 years ago

让朋友用5700XT试了下,这个视频也有问题,并且我页面里别的视频都没问题,怀疑是这个视频的问题(但是这个视频在n卡i卡苹果mac都没有问题,就很迷)

jim-king-2000 commented 2 years ago

让朋友用5700XT试了下,这个视频也有问题,并且我页面里别的视频都没问题,怀疑是这个视频的问题(但是这个视频在n卡i卡苹果mac都没有问题,就很迷)

  1. 建议亲好好研究一下这个视频。
  2. 测试页面的视频,60帧的也有问题,无法播放。
StaZhu commented 2 years ago
  1. 很可能是amd卡实现的问题,vlc是有兜底软解的逻辑的,硬解失败会自动切换软解,所以你那里能播不代表走的是硬解。(比如你的那个视频我在Intel显卡,N卡,苹果都可以播,不同显卡厂商实现都有所不同,这块我没法保证他们硬件如何实现的)
  2. 测试页面有的hevc rext视频不能播是正常的,amd显卡不支持对应的profile.
  3. hevc_4K60P_bilibili_pq_4.mp4这个视频我朋友的5700xt能播,你是下到本地拖进去的方式播的么?
jim-king-2000 commented 2 years ago

hevc_4K60P_bilibili_pq_4.mp4这个视频我朋友的5700xt能播,你是下到本地拖进去的方式播的么?

是的,下载到本地,然后拖进浏览器。

jim-king-2000 commented 2 years ago

https://user-images.githubusercontent.com/7019050/191422836-fea2de1f-8f97-45a8-a91e-153d9f47f468.mp4

StaZhu commented 2 years ago

AMD RX5700

https://user-images.githubusercontent.com/25657307/191423149-1fe4d003-4eac-4dc0-8fa5-3ab5268d81d8.MOV

jim-king-2000 commented 2 years ago

很可能是amd卡实现的问题,vlc是有兜底软解的逻辑的,硬解失败会自动切换软解,所以你那里能播不代表走的是硬解。(比如你的那个视频我在Intel显卡,N卡,苹果都可以播,不同显卡厂商实现都有所不同,这块我没法保证他们硬件如何实现的)

VLC应该是硬解。我看到GPU里Video Codec 0有使用率。

StaZhu commented 2 years ago

很可能是amd卡实现的问题,vlc是有兜底软解的逻辑的,硬解失败会自动切换软解,所以你那里能播不代表走的是硬解。(比如你的那个视频我在Intel显卡,N卡,苹果都可以播,不同显卡厂商实现都有所不同,这块我没法保证他们硬件如何实现的)

VLC应该是硬解。我看到GPU里Video Codec 0有使用率。

vlc有实现多套硬解的,比如dxva2和d3d11,你有强制他走d3d11va吗,这块可以在设置页设置。

可以到crbug提个issue。

jim-king-2000 commented 2 years ago

image

jim-king-2000 commented 2 years ago

vlc有实现多套硬解的,比如dxva2和d3d11,你有强制他走d3d11va吗,这块可以在设置页设置。

上图看得出VLC用的是哪个解码器吗?

StaZhu commented 2 years ago

vlc有实现多套硬解的,比如dxva2和d3d11,你有强制他走d3d11va吗,这块可以在设置页设置。

上图看得出VLC用的是哪个解码器吗?

看不出来,只能在它的设置页面强行指定解码框架,然后重启。