간단히 말해서 문제는 Chrome에서 하드웨어 비디오 가속을 활성화할 수 없다는 것입니다. 내 데스크탑에는 Kubuntu 20.04를 실행하는 GPU Intel UHD 750 및 Core i5 11600이 통합되어 있습니다.
처음에는 하드웨어 가속이 전혀 없어서 intel-media-va-driver-non-free
VLC를 설치했는데도 영상을 재생하는데 가속이 전혀 없었습니다. 의 출력은 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로 업데이트했지만 도움이 되지 않았습니다. 그런 다음 여기 설명에서 제안한 대로 Intel 드라이버의 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.linuxupising.com/2021/01/how-to-enable-hardware-accelerated.html그러나 이것은 도움이 되지 않습니다. 이 chrome://gpu
탭에는 다음이 표시됩니다.
그래픽 기능 상태
- 캔버스: 소프트웨어만 해당. 하드웨어 가속이 비활성화되었습니다.
- 캔버스 out-of-process 래스터화: 비활성화됨
- 합성: 소프트웨어만 해당. 하드웨어 가속이 비활성화되었습니다.
- 다중 래스터 스레드: 비활성화됨
- Out-of-process 래스터화: 비활성화됨
- OpenGL: 비활성화됨
- 래스터화: 소프트웨어에만 해당. 하드웨어 가속 비활성화
- 원시 그림: 비활성화됨
- Skia 렌더러: 활성화됨
- 비디오 디코딩: 소프트웨어 전용. 하드웨어 가속이 비활성화되었습니다.
- 불칸: 비활성화됨
- WebGL: 비활성화됨
- WebGL2: 비활성화됨
감지된 문제
- 가속 비디오 디코딩은 차단 목록, about:flags 또는 명령줄을 통해 비활성화되었습니다.
비활성화된 기능: video_decode - GPU 합성은 차단 목록, about:flags 또는 명령줄을 통해 비활성화됩니다. 브라우저는 소프트웨어 구성으로 돌아가며 하드웨어 가속을 사용할 수 없습니다.
비활성화된 기능: gpu_compositing - GPU 프로세스를 시작할 수 없습니다. SwiftShader로 인해 GPU 프로세스가 너무 자주 충돌합니다.
비활성화된 기능: 모두
...
또한 Firefox에서 비디오 가속을 활성화하려고 시도했지만 실패했습니다. 또한 Chromium을 설치했는데 chrome://gpu
이제 거의 모든 기능이 활성화되어 있지만 비디오 가속은 활성화되지 않은 것으로 표시됩니다.
도와주세요!
답변1
부인 성명
Chrome 기반 브라우저에서는 실제로 하드웨어 가속을 얻지 못할 수도 있습니다. 하지만 포기하지 마세요. 아직 할 수 있는 일이 남아 있습니다.
내 설정과 귀하의 설정의 차이점은 다음과 같습니다.
- 환경: ArchLinux+XOrg+KDE
- GPU: (
TigerLake-LP GT2 [Iris Xe Graphics]
에서lspci
). - 커널: 5.15.7-zen1-1-zen
레시피도 비슷할 것 같아요.
필수 패키지
나에겐 이것들이 있다(이름은 우분투와 다를 수 있습니다):
- 메사
- xf86-비디오-인텔
- 리부아
- libva-인텔 드라이버
- libva-메사-드라이버
- libva-vdpau-드라이버
- 메사 비디오보
- intelgmmlib
- 인텔 미디어 드라이버
다음을 확인하려면 몇 가지 도구가 필요할 수도 있습니다.
- libva 유틸리티
- vdpau 정보
- 인텔 GPU 도구
브라우저 설정
설정한 chrome://flags
다음 브라우저를 다시 시작했습니다. 이는 Chromium에서도 작동하지만 Vivaldi 내부 URL은 vivaldi://
접두사에 있습니다.
- 소프트웨어 렌더링 목록 재정의
- GPU 래스터화
- 제로 카피 래스터라이저
- 새로운 GPU 스레드를 사용하려면 디스플레이 합성기를 활성화하세요.
- 2D 캔버스 가속화
- 프로세스 외부 2D 캔버스 래스터화
브라우저 시작
추가 옵션을 사용하여 브라우저를 다시 시작해야 합니다.
--enable-features=VaapiVideoDecoder
시작 프로필을 편집하여 이 프로필을 추가할 수 있습니다. 내 것은 이제 다음과 같습니다
/usr/bin/google-chrome-stable --enable-features=VaapiVideoDecoder %U
상태 확인
IMHO, 이것이 당신이 할 수 있는 최선의 방법입니다.
브라우저
다시 시작한 후 내부 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/...
.
내부에플레이어 속성다음과 같은 줄을 찾을 수 있습니다.
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", "블리터", "비디오" 및 "비디오 향상"이라는 네 가지 "엔진"을 사용할 수 있습니다.
브라우저 재생 중에 처음 두 엔진은 사용 중이고 "비디오"는 유휴 상태인 것을 볼 수 있습니다. 내 GPU에서 제공하는 비디오 디코딩 엔진이 전혀 사용되지 않습니다!
브라우저는 하드웨어 가속 비디오를 사용할 수 있어야 한다고 생각하지만 사용할 수 없는 것 같습니다.
다른 검사를 해보자.
가시광통신
VLC가 하드웨어 가속을 활용할 수 있는 것 같습니다. GUI를 사용하여 실행하고 도구 > 기본 설정 > 입력 및 코덱으로 이동하여 아래의 "자동" 옵션을 선택하세요.하드웨어 가속 디코딩. 그런 다음 이를 닫고 명령줄에서 테스트 비디오를 재생하여 진단 출력을 얻습니다.
[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
"video" 리소스가 현재 활발하게 사용되고 있음을 확인할 수 있습니다.
파이어폭스 브라우저
나는 이것이 원래 범위(Chrome)에서 약간 벗어난다는 것을 알고 있지만 언급할 가치가 있다고 생각했습니다. Firefox를 사용하면 XOrg 및 Wayland의 VA-API 덕분에 일부 하드웨어 가속 비디오 디코딩이 실행되는 것을 볼 수 있습니다.
ArchLinux 위키(아래 링크)에 있는 이 가이드는 다음을 안내합니다(이는 귀하의 책임입니다) 하드웨어 가속 비디오를 활성화하기 위해 일부 스위치를 수정하는 방법을 알아봅니다. intel_gpu_top
일반적으로 GPU가 작동하는지 표시됩니다.
예를 들어 Vimeo는 이 지원을 활용할 수 있는 것으로 보이지만 YouTube는특정 브라우저 확장VP9 비디오 코덱을 비활성화합니다.
마찬가지로 .Firefox도 media.webrtc.platformencoder
Mirosoft true
Teams를 지원하지 않습니다.
저것같은 확장자Chrome에 존재하지만 Firefox만큼 잘 작동하지 않는 것 같습니다.
마무리하다
비디오 디코딩의 하드웨어 가속이 Linux에서 작동하는 것 같습니다.
이는 환경의 버그보다는 Chromium 기반 브라우저의 버그를 더 많이 지적합니다.
어쩌면 미래는 더 밝아질지도 모릅니다. 하지만 지금은 아닙니다.
인용하다
주로 ArchLinux 위키에서 가져온 것이지만 이러한 세부 정보는 수많은 다른 배포판에도 적용될 수 있다고 생각합니다.
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