부인 성명

부인 성명

간단히 말해서 문제는 Chrome에서 하드웨어 비디오 가속을 활성화할 수 없다는 것입니다. 내 데스크탑에는 Kubuntu 20.04를 실행하는 GPU Intel UHD 750 및 Core i5 11600이 통합되어 있습니다.

처음에는 하드웨어 가속이 전혀 없어서 intel-media-va-driver-non-freeVLC를 설치했는데도 영상을 재생하는데 가속이 전혀 없었습니다. 의 출력은 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다른 터미널 창에서도 사용할 수 있습니다 ( sudoArchLinux에는 필수, 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.platformencoderMirosoft trueTeams를 지원하지 않습니다.

저것같은 확장자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

관련 정보