8

我有来自“ASRock”的“Beebox”。本机处理器为Intel Celeron N3150,支持VP8视频流的硬件编解码。我想在 Google Chrome(在 Debian Linux 上)中使用此功能进行 WebRTC 调用。但我不确定如何证明 Chrome 确实在使用硬件编码/解码。

到目前为止我的发现

不幸的是,Linux 上的情况非常混乱。除了我不知道 Chrome 真正使用的不同加速 API(VAAPI、VDPAU 等)之外,Chrome 通过说:

视频解码:仅软件,硬件加速不可用

视频编码:硬件加速

在“ chrome://gpu ”页面上。

编码:尽管 ist 说编码是加速的,但在将高清视频编码为 VP8 流时,我的 CPU 负载为 60-70%。这在我看来不像是硬件编码。

解码:据我在网上看到,Linux下的Chrome似乎根本不支持硬件解码。有一个名为--ignore-gpu-blacklist的 Chrome 开关,它确实将“视频解码”行从“仅软件 ... ”变为“硬件加速”,但这并没有改变任何东西。我还对 Kodi 和 VLC 等不同的媒体播放器进行了一些研究。这些播放器在播放 VP8 时显示大约 25-30% 的 CPU 负载,这确实可能是硬件解码,但令人惊讶的是,当我在这些播放器中关闭硬件编码时根本没有任何变化。这反过来又让我相信即使这些也不能在硬件中解码。

工具: 我找到了一些工具,甚至是来自英特尔的,但大多数都是指 GPU 负载(这意味着 3D 加速)。我还尝试了mesa-utils中的glxinfo ,上面写着:“直接渲染:是”,并且根据这个线程确认支持硬件解码(?)。但这只是说明支持可用,而不是当前是否有任何应用程序真正使用它。

问题

当在 Linux 上对 VP8 视频流进行编码或解码时,有没有办法清楚地验证硬件编码器和/或解码器是否工作?

非常感谢您的帮助!

4

1 回答 1

8

1)这里有一个更具体的标志。在Chrome://gpu中,你应该看到VPx Video Decode:

它说的是硬件还是软件?

2) 相关的,尝试一下:在 Chrome 中访问 YouTube,播放任何视频。播放时右键单击视频,然后Stats for Nerds从上下文菜单中选择。

这将告诉您 YouTube 是否为您提供 VP8、VP9 或 H.264。这可能是一个有用的线索,尤其是在您获得 H.264 时。(在笔记本电脑上会更有帮助,因为如果 Chrome 像 MS Edge 一样,它会在笔记本电脑使用电池供电时停止宣传 VPx 支持,迫使 YouTube 给它 H.264,因为 VPx 比 H 消耗更多的电池.264,即使它是硬件解码的。H.264 是一个少得多的编解码器,它的硬件解码比 VPx 硬件解码更有效。Kaby Lake 可能最终会缩小差距。)

3)还有一些其他的问题。Chrome 软件渲染列表中有一些有趣的条目表明 Chrome 可能会忽略甚至相当新的 Intel GPU,包括您的 Braswell 芯片。在这里查看。请注意,一个条目说:“VPx 解码在 Intel Broadwell、Skylake 和 CherryView 上太慢了”

如果您按照面包屑跟踪,您会看到这意味着每个 gpu 都具有一些特定的 PCIID 掩码(例如 N3150 应该是 0x22b1)。但这只是Windows,而且它也可能是已经修复的旧错误的残余。

还要注意其他可能的条目,其中一些提到特定的英特尔驱动程序版本,以及特定的 Linux 内核版本。

4) 确保您的Chrome://flags页面实际上表明软件渲染列表已被覆盖(这是第一个标志)。您提到了命令行语法,带有旧的“黑名单”术语,但是这个标志近年来出现了一些错误,基本上不适用于某些人和其他问题。我只是仔细检查一下,无论您如何设置此标志,它实际上都会在标志页面中以正确的设置显示。如果没有,显然在该页面中正确设置它。请注意,有一个错误可能与您的问题相关,也可能不相关 - 覆盖软件渲染列表会翻转 VPx Video Decode 标志chrome://gpu即使在没有 VPx 硬件加速的 PC 上也能实现硬件加速,例如我现在使用的 Ivy Bridge 笔记本电脑,配备 Intel HD 4000。我不知道这是否只是一个表现性错误,Chrome 实际上并没有尝试使用硬件加速,或者如果 Chrome 确实在这样做(这似乎必须崩溃或其他什么,但事实并非如此)。

Chrome 标志是一团混乱和冲突的单词选择。标志说Override software rendering list。此标志需要启用,而不是禁用。但如果它已启用,您将不会看到“已启用”一词或任何类型的状态指示器。您会看到Disable一词,作为更改设置的邀请。只是让你知道......也许这对你来说都是旧帽子。

5) 最后一点,但非常强大的资源是Intel Media SDK ,可以查看您系统上的 VP8 发生了什么。如果默认情况下它不是免费的,它作为英特尔 IDE/C++ 编译器的学生版和付费 IDE 版的免费试用版的一部分是免费的。你可以在那里做很多事情来看看发生了什么。我被他们的开发者指南第 24 页中的这段话打动了:

可以通过简单的编译步骤将硬件加速添加到 FFmpeg。对于使用 FFmpeg 命令行或 libav* API 编写的应用程序,它们可以通过更改编解码器名称来启用硬件 - 例如从 libx264 到 h264_qsv。

我会在 ffmpeg 中为 VP8 编解码器使用该方法,看看您是否可以在 Chrome 之外触发系统上的硬件加速。

6) 另请注意,当涉及视频编解码器时,“硬件加速”一词在整个行业中的使用不一致,我不确定 Chrome 的确切含义(在标志中)。解码可以由 GPU加速,也可以由恰好位于 GPU 上的固定功能单元在硬件中完全执行(但不使用 GPU 着色器)。这两者都称为硬件加速,但它们不是一回事。有时“完全在硬件中”或“固定功能”将用于将该场景与一般 GPU 加速(有时称为部分加速或混合加速)区分开来。

官方 文档相当混乱,但 Braswell(就像它的前身和Broadwell一样)应该有完整的 VP8 固定函数解码。而编码和 VP9(就像在Skylake中一样,可能具有相同的 QSV 模块)是通过混合解决方案提供的。我认为他们正在使用某种 GPU 加速(使用着色器,可能使用 OpenGL 或 OpenCL 或其他东西,但我不知道细节)。这种区别尤其重要,尤其是当您使用电池供电的设备时(更不用说 HEVC 在质量方面的效率会突飞猛进)。我想这可能会证明 Chrome 开发团队关于如何使用 Braswell 模型的决定是合理的。不幸的是,所有这些都没有得到很好的记录......

于 2017-01-07T08:04:58.040 回答