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. 如果不能,那么什么时候能?
jim-king-2000 commented 2 years ago

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

这个不造怎么弄……

StaZhu commented 2 years ago

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

这个不造怎么弄……

直接去crbug提issue吧,看看gpu大神咋说。

jim-king-2000 commented 2 years ago

image

貌似MPV用的奏是d3d11va。

StaZhu commented 2 years ago

嗯,看起来是d3d11va

jim-king-2000 commented 2 years ago

我去提bug吧。但这会比较慢,有功夫网,你懂的。

StaZhu commented 2 years ago

我去提bug吧。但这会比较慢,有功夫网,你懂的。

看起来这块涉及到GPU合成,因为我不是专家,只能把问题抛出来,让懂的人看看。

jim-king-2000 commented 2 years ago

您已经很专业了。这个问题确实比较迷。

jim-king-2000 commented 2 years ago

hevc_8k60P_bilibili_1.mp4在VLC下会卡死,但MPV能够正常播放。在Chrome里竟然也能正常播放。

StaZhu commented 2 years ago

hevc_8k60P_bilibili_1.mp4在VLC下会卡死,但MPV能够正常播放。在Chrome里竟然也能正常播放。

了解,很奇怪,已同步给 @taste1981 jianlin大佬,他有5800u,也能复现。

jim-king-2000 commented 2 years ago

那我晚一点去报bug吧。刚才弄了一阵梯子,都不行,无法登录crbug……

jim-king-2000 commented 2 years ago

我在3060Ti的电脑上用Chrome 107打开https://dl6.webmfiles.org/TearsOfSteel_720p_h265.mkv,也会抖。

StaZhu commented 2 years ago

我在3060Ti的电脑上用Chrome 107打开https://dl6.webmfiles.org/TearsOfSteel_720p_h265.mkv,也会抖。

收到,我刚才找了台RTX3070,确定也能复现,复查解码逻辑中。

jim-king-2000 commented 2 years ago

测试页面的视频我全部在3060Ti的机器上(Chrome 107)点了一下:

  1. Rext视频无法播放。
  2. 有的杜比视界视频颜色发绿,但都可以正常播放。
  3. 其余的视频全部可以正常播放。
StaZhu commented 2 years ago
  1. Rext不能播放符合预期:只有intel 11代以后的核显支持 ,而且只支持10bit的。
  2. 杜比视界Profile5目前不支持,也符合预期。
  3. 是的我这都能播。

所以看起来问题就是那个mkv,能解决就都OK了。

jim-king-2000 commented 2 years ago

但在我的Ryzen 5800H机器上,测试页面的视频一个都无法播放。

jim-king-2000 commented 2 years ago

微信图片_20220921162356 我的Ryzen 5800H机器上,测试页面看起来是这样的。

StaZhu commented 2 years ago

Author

一个一个的把视频下本地,大多数不是OK的么?hevc_4K60P_bilibili_pq_4.mp4 这个视频不能播导致GPU进程崩溃了。

jim-king-2000 commented 2 years ago

一个一个的把视频下本地,大多数不是OK的么?

对,一个一个下载下来是可以播放的。

hevc_4K60P_bilibili_pq_4.mp4 这个视频不能播导致GPU进程崩溃了。

这应该也是个bug哦。当然,不一定是chromium的bug。

StaZhu commented 2 years ago

一个一个的把视频下本地,大多数不是OK的么?

对,一个一个下载下来是可以播放的。

hevc_4K60P_bilibili_pq_4.mp4 这个视频不能播导致GPU进程崩溃了。

这应该也是个bug哦。当然,不一定是chromium的bug。

这个符合预期的,整个Chrome只有一个GPU进程,崩了就崩了,都不能播放,比如页面打开后,窗口不是闪了一下子么,这就表明GPU进程崩溃了。

jim-king-2000 commented 2 years ago

11代酷睿的核显(Intel Iris Xe graphics)可以正常播放https://dl6.webmfiles.org/TearsOfSteel_720p_h265.mkv

jim-king-2000 commented 2 years ago

https://user-images.githubusercontent.com/7019050/191457928-4e32c54e-f929-4f82-a859-7241d35055aa.mp4

Intel的卡,播放测试网页里的视频,会时不时闪出下一个视频的帧。

jim-king-2000 commented 2 years ago

Intel的卡,2个12bit rext的视频放不了,其它视频基本上都可以正常播放,除了上面这一个视频之外。

StaZhu commented 2 years ago

@jim-king-2000 同步下, @taste1981 大佬奇迹般的找到根因并修复了,应该会在下周合入,并Cherry-Pick到107正式版,但愿这是最后一个bug🙂。

jim-king-2000 commented 2 years ago

:cow:B

StaZhu commented 2 years ago

@jim-king-2000

打了个包, 麻烦再试试 108.0.5318.0_fix_amd_flash.exe

  1. 辛苦看下AMD显卡播放https://dl6.webmfiles.org/TearsOfSteel_720p_h265.mkv的问题是否解决。
  2. 辛苦看下 hevc_4K60P_bilibili_pq_4.mp4 在新包是否依然崩溃,如果还崩溃,辛苦在崩溃后把 chrome://gpu 导出pdf,把chrome://media-internalsSave log导出media-internals.txt,然后贴到这里,我这两天重点看下。
lns103 commented 2 years ago

@jim-king-2000

打了个包, 麻烦再试试 108.0.5318.0_fix_amd_flash.exe

  1. 辛苦看下AMD显卡播放https://dl6.webmfiles.org/TearsOfSteel_720p_h265.mkv的问题是否解决。
  2. 辛苦看下 hevc_4K60P_bilibili_pq_4.mp4 在新包是否依然崩溃,如果还崩溃,辛苦在崩溃后把 chrome://gpu 导出pdf,把chrome://media-internalsSave log导出media-internals.txt,然后贴到这里,我这两天重点看下。

偏个题,我的N卡用这个版本放那个mkv是没有问题了,但是我尝试重新封装成mp4之后还是有闪动问题 这是我重新封装的命令

ffmpeg -i TearsOfSteel_720p_h265.mkv -c:v copy out.h265
ffmpeg -i TearsOfSteel_720p_h265.mkv -c:a copy out.aac
ffmpeg -r 24 -i out.h265 -i out.aac -c copy test.mp4

重新封装的时候会出现警告(但可以成功)

[mp4 @ 000002c4ad46d4c0] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
[mp4 @ 000002c4ad46d4c0] pts has no valueB time=00:00:00.00 bitrate=N/A speed=   0x
    Last message repeated 284 times

自带播放器、potplayer和mpv都可以正常播放,但是chrome和edge都会闪动 (包括您发的 108.0.5318.0_fix_amd_flash.exe)

如果使用ffmpeg -i TearsOfSteel_720p_h265.mkv -c copy test2.mp4,则视频无法被所有播放器播放

StaZhu commented 2 years ago
  1. 闪动问题这个我知道,你直接转成裸流后生成mp4时间戳与poc映射关系会丢,你用这个方式转h264也是一样的抖动问题,blink的实现就是对比时间戳和poc,发现差距过大就主动丢帧。

  2. 第二个问题应该是ffmpeg自身的问题。

jim-king-2000 commented 2 years ago

@StaZhu

辛苦看下AMD显卡播放https://dl6.webmfiles.org/TearsOfSteel_720p_h265.mkv的问题是否解决。

已解决。视频不再抖动。

辛苦看下 hevc_4K60P_bilibili_pq_4.mp4 在新包是否依然崩溃,如果还崩溃,辛苦在崩溃后把 chrome://gpu 导出pdf,把chrome://media-internals点Save log导出media-internals.txt,然后贴到这里,我这两天重点看下。

不崩溃了。播放很流畅。

  1. 测试页面直接打开还是会崩溃。
  2. 由于不在公司,Intel的卡无法测试。 以上2个问题,周一上午我到了公司会继续测试。
StaZhu commented 2 years ago

@StaZhu

辛苦看下AMD显卡播放https://dl6.webmfiles.org/TearsOfSteel_720p_h265.mkv的问题是否解决。

已解决。视频不再抖动。

辛苦看下 hevc_4K60P_bilibili_pq_4.mp4 在新包是否依然崩溃,如果还崩溃,辛苦在崩溃后把 chrome://gpu 导出pdf,把chrome://media-internals点Save log导出media-internals.txt,然后贴到这里,我这两天重点看下。

不崩溃了。播放很流畅。

  1. 测试页面直接打开还是会崩溃。
  2. 由于不在公司,Intel的卡无法测试。 以上2个问题,周一上午我到了公司会继续测试。

可以试试看是哪个视频导致的崩溃,也有可能是页面视频过多导致显存用满了,然后就崩了(比如Intel的显卡就有这个问题)。

jim-king-2000 commented 2 years ago

901582a6d409fbb3d6e11c00d5337784.mp4 Intel的卡,播放测试网页里的视频,会时不时闪出下一个视频的帧。

这个问题依然存在。并且这个问题会随着鼠标指针划过播放器的画布而变得严重。如果鼠标一直不动,则闪烁会少很多。

StaZhu commented 2 years ago

901582a6d409fbb3d6e11c00d5337784.mp4 Intel的卡,播放测试网页里的视频,会时不时闪出下一个视频的帧。

这个问题依然存在。并且这个问题会随着鼠标指针划过播放器的画布而变得严重。如果鼠标一直不动,则闪烁会少很多。

这个貌似是chrome渲染的问题,我这N卡也会遇到,一页内有多个视频,特定视频播放时会遇到,或者把视频全屏播放也可以解决。你可以去提个crbug,但是这个和解码没啥关系。

jim-king-2000 commented 2 years ago

901582a6d409fbb3d6e11c00d5337784.mp4 Intel的卡,播放测试网页里的视频,会时不时闪出下一个视频的帧。

这个问题依然存在。并且这个问题会随着鼠标指针划过播放器的画布而变得严重。如果鼠标一直不动,则闪烁会少很多。

这个貌似是chrome渲染的问题,我这N卡也会遇到,一页内有多个视频,特定视频播放时会遇到,或者把视频全屏播放也可以解决。你可以去提个crbug,但是这个和解码没啥关系。

我爬梯子太麻烦了。既然是已知issue,那么亲知道了就行了。我这边暂时没问题了。关issue了。再次感谢亲。