在 Chrome、Kubuntu 20.04 中啟用硬體影片加速
簡而言之:無法在 Chrome 中啟用硬體影片加速。我的台式機集成了 GPU Intel UHD 750 和 Core i5 11600,它執行 Kubuntu 20.04。
最初,我根本沒有硬體加速,所以即使是 VLC 播放影片也沒有加速,儘管我已經
intel-media-va-driver-non-free
安裝了。的輸出vainfo
是libva info: VA-API version 1.7.0 libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so libva info: Found init function __vaDriverInit_1_7 libva info: va_openDriver() returns 1 libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so libva info: Found init function __vaDriverInit_1_6 libva info: va_openDriver() returns -1
我搜尋了解決方案,但沒有找到有同樣問題的人。我決定就相關問題遵循一些建議。首先,我將核心從 5.11 更新到 5.15,但這並沒有幫助。然後我添加了一個 repo 來安裝英特爾驅動程序的 21.xx 版本,如此處評論中所建議的:https ://githubmemory.com/repo/HaveAGitGat/Tdarr/issues/452 。在升級了一些軟體包並安裝了一些保留的軟體包後,我得到了影片加速。的目前輸出
vainfo
為libva info: VA-API version 1.12.0 libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so libva info: Found init function __vaDriverInit_1_12 libva info: va_openDriver() returns 0 vainfo: VA-API version: 1.12 (libva 2.12.0) vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 21.3.3 (6fdf88c) vainfo: Supported profile and entrypoints VAProfileNone : VAEntrypointVideoProc VAProfileNone : VAEntrypointStats
等等。
下一步是在 Chrome 中啟用硬體加速。我按照這裡的說明https://www.linuxupprising.com/2021/01/how-to-enable-hardware-accelerated.html但沒有幫助。該
chrome://gpu
選項卡顯示以下內容圖形功能狀態
- 帆布:僅限軟體。禁用硬體加速
- 畫布程序外光柵化:已禁用
- 合成:僅限軟體。禁用硬體加速
- 多個光柵執行緒:禁用
- 程序外光柵化:禁用
- OpenGL:已禁用
- 光柵化:僅限軟體。禁用硬體加速
- 原始繪圖:已禁用
- Skia 渲染器:已啟用
- 影片解碼:僅限軟體。禁用硬體加速
- Vulkan:已禁用
- WebGL:已禁用
- WebGL2:已禁用
檢測到的問題
- 已通過阻止列表、about:flags 或命令行禁用加速影片解碼。
禁用功能:video_decode
- Gpu 合成已通過阻止列表、about:flags 或命令行禁用。瀏覽器將退回到軟體合成,硬體加速將不可用。
禁用功能:gpu_compositing
- GPU 程序無法啟動:GPU 程序使用 SwiftShader 崩潰太多次。
禁用功能:所有
…
我還嘗試在 Firefox 中啟用影片加速,但失敗了。此外,我安裝了 Chromium,
chrome://gpu
現在顯示幾乎所有功能都已啟用,但影片加速未啟用。請幫忙!
免責聲明
您可能不會在基於 Chrome 的瀏覽器中真正獲得硬體加速。但我們不要投降:有些事情還是可以做的。
我與您的設置的區別是:
- 環境:ArchLinux+XOrg+KDE
- GPU:(
TigerLake-LP GT2 [Iris Xe Graphics]
來自lspci
)。- 核心:5.15.7-zen1-1-zen
我想配方應該是一樣的。
需要的包
我有這些(名稱可能與 Ubuntu 不同):
- 檯面
- xf86-影片-英特爾
- 圖書館
- libva 英特爾驅動程序
- libva 表驅動程序
- libva-vdpau-驅動程序
- vdpau 表
- 英特爾-gmmlib
- 英特爾媒體驅動程序
您可能還需要一些工具來檢查:
- libva-utils
- vdpauinfo
- 英特爾 GPU 工具
瀏覽器設置
我設置它們
chrome://flags
,然後重新啟動瀏覽器。這也適用於 Chromium,而 Vivaldi 內部 URL 位於vivaldi://
前綴上。
- 覆蓋軟體渲染列表
- GPU 光柵化
- 零拷貝光柵化器
- 使顯示合成器能夠使用新的 gpu 執行緒
- 加速的 2D 畫布
- 程序外 2D 畫佈光柵化
瀏覽器啟動
您需要使用額外的選項重新啟動瀏覽器:
--enable-features=VaapiVideoDecoder
您可以編輯您的啟動配置文件以添加此配置文件。我的現在看起來像這樣:
/usr/bin/google-chrome-stable --enable-features=VaapiVideoDecoder %U
檢查狀態
這是最好的,恕我直言,你能做到。
瀏覽器
重新啟動後,您可以轉到內部 URL
chrome://gpu
並檢查。這是我自己的狀態:Graphics Feature Status Canvas: Hardware accelerated Canvas out-of-process rasterization: Enabled Compositing: Hardware accelerated Multiple Raster Threads: Enabled Out-of-process Rasterization: Hardware accelerated OpenGL: Enabled Rasterization: Hardware accelerated on all pages Raw Draw: Disabled Skia Renderer: Enabled Video Decode: Hardware accelerated Vulkan: Disabled WebGL: Hardware accelerated WebGL2: Hardware accelerated
我保留
Raw Draw: Disabled
是因為它在瀏覽器中表現不佳。如果您想嘗試它,請返回標誌並啟用“啟用原始繪製”標誌。
vainfo
如果您安裝了它,只需執行它。我的工作是這樣的:
[enzo@Feynman ~] vainfo vainfo: VA-API version: 1.13 (libva 2.13.0) vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 21.4.3 () vainfo: Supported profile and entrypoints VAProfileNone : VAEntrypointVideoProc VAProfileNone : VAEntrypointStats VAProfileMPEG2Simple : VAEntrypointVLD VAProfileMPEG2Simple : VAEntrypointEncSlice VAProfileMPEG2Main : VAEntrypointVLD VAProfileMPEG2Main : VAEntrypointEncSlice VAProfileH264Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointEncSlice VAProfileH264Main : VAEntrypointFEI VAProfileH264Main : VAEntrypointEncSliceLP VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileH264High : VAEntrypointFEI VAProfileH264High : VAEntrypointEncSliceLP VAProfileVC1Simple : VAEntrypointVLD VAProfileVC1Main : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD VAProfileJPEGBaseline : VAEntrypointVLD VAProfileJPEGBaseline : VAEntrypointEncPicture VAProfileH264ConstrainedBaseline: VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice VAProfileH264ConstrainedBaseline: VAEntrypointFEI VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP VAProfileVP8Version0_3 : VAEntrypointVLD VAProfileHEVCMain : VAEntrypointVLD VAProfileHEVCMain : VAEntrypointEncSlice VAProfileHEVCMain : VAEntrypointFEI VAProfileHEVCMain : VAEntrypointEncSliceLP VAProfileHEVCMain10 : VAEntrypointVLD VAProfileHEVCMain10 : VAEntrypointEncSlice VAProfileHEVCMain10 : VAEntrypointEncSliceLP VAProfileVP9Profile0 : VAEntrypointVLD VAProfileVP9Profile0 : VAEntrypointEncSliceLP VAProfileVP9Profile1 : VAEntrypointVLD VAProfileVP9Profile1 : VAEntrypointEncSliceLP VAProfileVP9Profile2 : VAEntrypointVLD VAProfileVP9Profile2 : VAEntrypointEncSliceLP VAProfileVP9Profile3 : VAEntrypointVLD VAProfileVP9Profile3 : VAEntrypointEncSliceLP VAProfileHEVCMain12 : VAEntrypointVLD VAProfileHEVCMain12 : VAEntrypointEncSlice VAProfileHEVCMain422_10 : VAEntrypointVLD VAProfileHEVCMain422_10 : VAEntrypointEncSlice VAProfileHEVCMain422_12 : VAEntrypointVLD VAProfileHEVCMain422_12 : VAEntrypointEncSlice VAProfileHEVCMain444 : VAEntrypointVLD VAProfileHEVCMain444 : VAEntrypointEncSliceLP VAProfileHEVCMain444_10 : VAEntrypointVLD VAProfileHEVCMain444_10 : VAEntrypointEncSliceLP VAProfileHEVCMain444_12 : VAEntrypointVLD VAProfileHEVCSccMain : VAEntrypointVLD VAProfileHEVCSccMain : VAEntrypointEncSliceLP VAProfileHEVCSccMain10 : VAEntrypointVLD VAProfileHEVCSccMain10 : VAEntrypointEncSliceLP VAProfileHEVCSccMain444 : VAEntrypointVLD VAProfileHEVCSccMain444 : VAEntrypointEncSliceLP VAProfileAV1Profile0 : VAEntrypointVLD VAProfileHEVCSccMain444_10 : VAEntrypointVLD VAProfileHEVCSccMain444_10 : VAEntrypointEncSliceLP
vdpauinfo
和上面一樣。某處存在導致核心轉儲的錯誤。不過,似乎沒有人注意到這一點。:-(
但是,使用
MALLOC_CHECK_
並沒有多大幫助。[enzo@Feynman ~] MALLOC_CHECK_=2 vdpauinfo display: :0 screen: 0 API version: 1 Information string: OpenGL/VAAPI backend for VDPAU Video surface: name width height types ------------------------------------------- 420 4096 4096 NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 422 4096 4096 NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 444 4096 4096 NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 420_16 4096 4096 NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 422_16 4096 4096 NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 444_16 4096 4096 NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 Decoder capabilities: name level macbs width height ---------------------------------------------------- MPEG1 --- not supported --- MPEG2_SIMPLE --- not supported --- MPEG2_MAIN --- not supported --- H264_BASELINE 51 16384 2048 2048 H264_MAIN 51 16384 2048 2048 H264_HIGH 51 16384 2048 2048 VC1_SIMPLE --- not supported --- VC1_MAIN --- not supported --- VC1_ADVANCED --- not supported --- MPEG4_PART2_SP --- not supported --- MPEG4_PART2_ASP --- not supported --- DIVX4_QMOBILE --- not supported --- DIVX4_MOBILE --- not supported --- DIVX4_HOME_THEATER --- not supported --- DIVX4_HD_1080P --- not supported --- DIVX5_QMOBILE --- not supported --- DIVX5_MOBILE --- not supported --- DIVX5_HOME_THEATER --- not supported --- DIVX5_HD_1080P --- not supported --- H264_CONSTRAINED_BASELINE 51 16384 2048 2048 H264_EXTENDED --- not supported --- H264_PROGRESSIVE_HIGH --- not supported --- H264_CONSTRAINED_HIGH --- not supported --- H264_HIGH_444_PREDICTIVE --- not supported --- VP9_PROFILE_0 --- not supported --- VP9_PROFILE_1 --- not supported --- VP9_PROFILE_2 --- not supported --- VP9_PROFILE_3 --- not supported --- HEVC_MAIN --- not supported --- HEVC_MAIN_10 --- not supported --- HEVC_MAIN_STILL --- not supported --- HEVC_MAIN_12 --- not supported --- HEVC_MAIN_444 --- not supported --- HEVC_MAIN_444_10 --- not supported --- HEVC_MAIN_444_12 --- not supported --- Output surface: name width height nat types ---------------------------------------------------- B8G8R8A8 16384 16384 y R8G8B8A8 16384 16384 y R10G10B10A2 16384 16384 y B10G10R10A2 16384 16384 y A8 16384 16384 y Bitmap surface: name width height ------------------------------ B8G8R8A8 16384 16384 R8G8B8A8 16384 16384 R10G10B10A2 16384 16384 B10G10R10A2 16384 16384 A8 16384 16384 Video mixer: feature name sup ------------------------------------ DEINTERLACE_TEMPORAL - DEINTERLACE_TEMPORAL_SPATIAL - INVERSE_TELECINE - NOISE_REDUCTION - SHARPNESS - LUMA_KEY - HIGH QUALITY SCALING - L1 - HIGH QUALITY SCALING - L2 - HIGH QUALITY SCALING - L3 - HIGH QUALITY SCALING - L4 - HIGH QUALITY SCALING - L5 - HIGH QUALITY SCALING - L6 - HIGH QUALITY SCALING - L7 - HIGH QUALITY SCALING - L8 - HIGH QUALITY SCALING - L9 - parameter name sup min max ----------------------------------------------------- VIDEO_SURFACE_WIDTH - VIDEO_SURFACE_HEIGHT - CHROMA_TYPE - LAYERS - attribute name sup min max ----------------------------------------------------- BACKGROUND_COLOR - CSC_MATRIX - NOISE_REDUCTION_LEVEL - SHARPNESS_LEVEL - LUMA_KEY_MIN_LUMA - LUMA_KEY_MAX_LUMA - Segmentation fault (core dumped)
我懷疑某些 VDPAU 庫中存在錯誤,導致此錯誤以及隨後無法使用硬體加速。不過只是猜測。
真實世界
現實可能會令人失望地偏離我們的願望。
在一個選項卡上播放影片(我使用 Youtube),然後在另一個選項卡上打開
chrome://media-internals
,選擇播放器選項卡。在最近播放器中選擇名為 的項目blob:https://www.youtube.com/...
。在Player 屬性中,您可以找到這樣的行:
kVideoDecoderName "Dav1dVideoDecoder"
這不是硬體解碼器,應該是
VDAVideoDecoder
。在下一個日誌區域中,您可以找到一些線索:
00:00:00.321 info "Selected FFmpegAudioDecoder for audio decoding, config: codec: opus, profile: unknown, bytes_per_channel: 4, channel_layout: STEREO, channels: 2, samples_per_second: 48000, sample_format: Float 32-bit, bytes_per_frame: 8, seek_preroll: 80000us, codec_delay: 312, has extra data: true, encryption scheme: Unencrypted, discard decoder delay: true, target_output_channel_layout: STEREO, has aac extra data: false" 00:00:00.321 info "Failed to initialize DecryptingVideoDecoder" 00:00:00.321 info "Failed to initialize VDAVideoDecoder" 00:00:00.321 info "Failed to initialize VpxVideoDecoder" 00:00:00.322 info "Effective playback rate changed from 0 to 1" 00:00:00.322 event "kPlay" 00:00:00.325 kIsVideoDecryptingDemuxerStream false 00:00:00.325 kVideoDecoderName "Dav1dVideoDecoder" 00:00:00.325 kIsPlatformVideoDecoder false
您也可以
intel_gpu_top
在另一個終端視窗中使用(sudo
在 ArchLinux 中需要,不確定 Ubuntu)。我有四個可用的“引擎”:“渲染/3D”、“Blitter”、“影片”和“影片增強”。
在瀏覽器播放期間,我可以看到前兩個引擎很忙,而“影片”只是空閒。我的GPU提供的影片解碼引擎根本沒有使用!
儘管瀏覽器認為應該使用,但似乎瀏覽器無法使用硬體加速影片。
讓我們做一個不同的檢查。
VLC
看起來 VLC 可以利用硬體加速。使用 GUI 啟動它,然後轉到 Tools > Preferences > Input & Codecs 並選擇Hardware-accelerated decoder下的“Automatic”選項。然後關閉它並從命令行播放測試影片(以獲取一些診斷輸出)。
[enzo@Feynman ~] vlc ATestVideo.AC3.1080p.x264-WRM.mkv VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2) [00005597db23e640] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface. [00005597db311900] main audio output error: too low audio sample frequency (0) [00007ff9e8d2fc00] main decoder error: failed to create audio output [00005597db311900] vlcpulse audio output error: digital pass-through stream connection failure: Not supported [00005597db311900] main audio output error: module not functional [00007ff9e8d2fc00] main decoder error: failed to create audio output [00007ff9c8005d20] gl gl: Initialized libplacebo v3.120.3 (API v120) [00007ff9e8c0d6b0] avcodec decoder: Using Intel iHD driver for Intel(R) Gen Graphics - 21.4.3 () for hardware decoding
在最後兩行中說它正在使用硬體解碼。由於我們不信任日誌,因此您可以在另一個終端視窗中執行
intel_gpu_top
並看到“影片”資源現在正在被積極使用。火狐
我知道這有點超出原始範圍(Chrome),但我認為值得一提。由於 VA-API,在 XOrg 和 Wayland 下,使用 Firefox 可以看到一些硬體加速的影片解碼。
ArchLinux wiki 上的指南(下面的連結)將指導您(風險自負)如何修改一些切換以啟用硬體加速影片,而我們通常
intel_gpu_top
會顯示 GPU 是否工作。例如,Vimeo 似乎能夠利用這種支持,而 YouTube 需要特定的瀏覽器擴展才能禁用 VP9 影片編解碼器。
同樣,如果您還設置
media.webrtc.platformencoder
為true
. Firefox 不支持 Mirosoft Teams。Chrome 也有同樣的擴展,但它似乎不如 Firefox 有效。
包起來
看起來用於影片解碼的硬體加速正在 Linux 中發揮作用。
然後,這將指向基於 Chromium 的瀏覽器中的錯誤,而不是環境中的錯誤。
也許未來會更加光明。但是不是現在。
參考
主要來自 ArchLinux wiki,但我認為這些細節可以應用於大量其他發行版。
https://wiki.archlinux.org/title/Hardware_video_acceleration https://wiki.archlinux.org/title/Chromium#Hardware_video_acceleration https://wiki.archlinux.org/title/VLC_media_player#Hardware_video_acceleration https://wiki.archlinux.org/title/firefox#Hardware_video_acceleration