본문 바로가기

IT/리눅스

리눅스 파이어 폭스에서 유튜브 동영상 하드웨어 가속 활성화하기

목차

머리말

윈도에서는 어떤 웹 브라우저를 쓰더라도 동영상 재생에 하드웨어 가속을 활용할 수 있지만, 리눅스에서는 그렇게 쉽지 않다. 물론 리눅스용 드라이버로도 주로 쓰는 H.264, H.265, VP8, VP9 등의 코덱을 디코딩할 수 있고 리눅스용 미디어 재생기에서도 대부분 이를 지원한다. 그러나 웹 브라우저에서는 동영상 하드웨어 가속을 활용하기 쉽지 않았다. 얼마 전까지만 해도 동영상 하드웨어 가속을 공식적으로 지원하는 브라우저가 없었기 때문이다.

 

다만 이 부분을 패치해서 나온 크로미움 브라우저(크롬 브라우저를 포함하는 오픈소스 웹 브라우저 프로젝트)를 사용할 수 있었는데 요즘 웹 브라우저의 장점인 아이디를 이용한 북마크 비밀번호 동기화 기능을 사용하기 번거롭다는 점이 흠이다. 구글 아이디를 통해 동기화를 사용하기 위해 구글링을 하면서 알아낸 방법으로 구글 클라우드 플랫폼을 이용해서 계속 시도해봤지만 실패했다. 굳이 웹 브라우저로 유튜브 보려고 거기까지 해야 하나 싶어서 깔끔하게 포기하고 다음 방법을 찾아보았다.

(핵심적인 적용 방법만 보고 싶으면 핵심 요약을 클릭)

 

Wayland?

리눅스 진영의 윈도우 시스템(혹은 디스플레이 서버)은 30년 넘게 쓰고 있는 X11(혹은 Xorg)을 대체해서 Wayland로 넘어가고 있는 추세인데 11년도 넘은 프로젝트 치고는 개발이 지지부진한 것이 흠이다. 하지만 이미 GNOME이나 KDE 같은 주요 데스크톱 환경에서 Wayland를 지원하거나 아예 기본 윈도우 시스템으로 활용하고 있고, 기본으로 활성화시켜놓는 배포판도 있는 모양이다.

 

비록 실제 성능 향상은 생각보다 없고 리눅스 사용 환경만 파편화시켰다는 비판을 받는 Wayland지만 웹 브라우저의 동영상 하드웨어 가속에 있어서는 이점이 있는지 파이어폭스에서 X11은 놔두고 Wayland 환경에서 동영상 하드웨어 가속을 지원하기 시작했다. 가장 대중적인 H.264부터 시작해서 여러 코덱을 지원하기 시작하는 모양이다.

 

사족이지만 필자가 이걸 처음으로 시도했던 것은 셀러론 J4105 CPU가 붙어 있는 채로 나오는 메인보드를 이용해서 저렴한 가격에 적당히 웹서핑과 유튜브 시청이 가능한 HTPC 겸용 NAS를 구축하려고 했을 때였다. 일단 구석에 방치해놨던 셀러론 N3060 CPU가 탑재된 저렴한 노트북(아마 인터넷 바꿀 때 사은품으로 받았던 것 같다)을 실험대상으로 삼아 파이어폭스 동영상 하드웨어 가속을 활성화시켜보았는데, 그때는 시간만 잡아먹고 실패했다. 서양 웹에서 긁은 잡다한 정보들은 다 무시하고 아치 리눅스뿐 아니라 다른 배포판 유저에게도 유용한 아치 리눅스의 하드웨어 비디오 가속 페이지파이어폭스 페이지의 하드웨어 비디오 가속 항목을 정독해서 다시 시도해보았다.

 

파이어폭스에서 동영상 하드웨어 가속 적용하기

VA-API 사용 여부 확인하기

파이어폭스에서 동영상 하드웨어 가속을 사용하려면 일단 자신이 사용하는 그래픽 카드와 그 드라이버가 해당 코덱을 지원하는지부터 확인해야 한다. 가장 일반적으로 사용하는 코덱인 H.264는 GMA 4500 같은 구식 메인보드 내장형 GPU에서도 지원하고  NDIVIA나 AMD의 그래픽카드도 상당히 구형 제품부터 지원한다. 그러니 일단 윈도 10이 돌아갈 정도의 사양이라면 다 된다고 보면 된다.

 

VA-API 드라이버에서 지원하는 코덱 (2020-06-07 기준)
VDPAU 드라이버에서 지원하는 코덱 (2020-06-07 기준)

문제는 파이어폭스에서 동영상 하드웨어 가속에 VA-API만을 지원한다는 점이다. 인텔이나 AMD는 이쪽을 지원하기에 바로 사용하면 되는데, NVIDIA 쪽은 VDPAU adapter를 사용해서 VA-API를 이용해야 한다는 것이다. 일단 필자가 테스트한 환경은 인텔이기 때문에 이쪽은 확인해볼 수 없었다. VA-API를 이용할 수 있는 환경이라면 터미널 앱을 켜고 vainfo를 실행해서 실제로 자신의 그래픽 카드가 어떤 코덱을 지원하는지를 확인하면 된다. vainfo를 실행했을 때 중간에 VAProfile+코덱명 형태로 나오고 그 옆에 : VAEntrypointVLD 같은 식으로 나온다면 해당 코덱의 디코딩을 지원하는 것이다. 파이어폭스에서 동영상 가속을 지원하는지 여부만 확인하면 되니까 H.264랑 VP9 정도만 확인하면 된다.

 

파이어폭스 쪽 설정하기

하드웨어 가속이 지원되는 것을 확인했으면 이제 파이어폭스 쪽을 설정해 줄 차례다. 앞에서 말했듯이 파이어폭스는 Wayland 환경에서만 동영상 하드웨어 가속을 지원하기 때문에 일단 Wayland 환경을 적용해야 하고(배포판에 따라 기본적으로 적용되어 있는 경우도 있고 따로 설정해주어야 하는 경우도 있고 지원되지 않는 데스크톱 환경도 있는데, 필자가 사용한 배포판인 우분투 20.04에서는 그냥 디스플레이 매니저(로그온 화면)에서 우측 아래에 있는 톱니바퀴를 눌러서 뜨는 팝업에서 'Wayland에서의 Ubuntu'를 선택하면 된다) 파이어폭스를 실행하기 전에 MOZ_ENABLE_WAYLAND=1이란 환경 변수를 지정해줘야 한다. 따로 방법이 있는 것은 아니며 터미널 창에서 그냥 export MOZ_ENABLE_WAYLAND=1이라고 입력하면 자동으로 적용된다. 아니면 MOZ_ENABLE_WAYLAND=1 firefox처럼 프로그램 명령어와 붙여서 바로 실행시키거나 이것을 바탕화면 단축 아이콘으로 만들어 실행시켜도 된다. 환경변수는 별도의 파일에 저장해서 매번 자동으로 적용시킬 수 있는데, 그놈 홈페이지의 세션 스타트 항목에서는 ~/.config/environment.d.conf란 파일을 생성해서 거기에 저장하도록 권장하고 있다. 아니면 ~/.bashrc~/.profile에 등록해도 된다.

 

그리고 주소창에 about:config를 입력하여 '고급 구성 설정'으로 들어가서 widget.wayland-dmabuf-vaapi.enabledtrue로 설정하여 Wayland 환경에서의 VA-API를 사용하도록 만들어준다. 그리고 media.ffvpx.enabledfalse로 설정해서 내장된 FFmpeg를 비활성화시킨다. 마지막으로 OMTC와 WebRender 중 하나를 선택해서 적용해주면 되는데, 테스트 환경에서는 OMTC를 이용하는 방식은 적용할 수 없었다(정확히는 옵션 적용이 되기는 하지만 하드웨어 가속이 전혀 이루어지지 않았다). WebRender를 적용하려면 앞서 설명했던 방식대로 MOZ_WEBRENDER=1을 환경변수로 지정해준 다음에 마찬가지로 about:config로 들어가서 gfx.webrender.all 항목을 true로 변경해주고 재시작하면 된다. 이제 모든 준비가 끝났다. 주소창에 about:support를 입력하여 '문제 해결 정보'로 들어간 후 '그래픽-판단 로그-WEBRENDER'에 'available by user: Force enabled by pref'라고 나오는 것을 확인하면 Webrender가 적용된 것이다. 'opt-in by default: WebRender is an opt-in feature'라고만 나오면 적용되지 않은 것이다.

 

동영상 하드웨어 가속 여부 확인하기

여기까지 무사히 끝냈다면 동영상을 한 번 재생해보자. 이번 실험 대상이 된 노트북처럼 똥컴인 경우라면 1080p 60fps 동영상을 볼 때 극적인 차이를 느낄 수 있을 것이다. 물론 이 컴퓨터는 구형이라 VP9를 제대로 지원하지 않는다. 이럴 경우에는 'h264ify' 같은 확장 기능을 설치해서 유튜브에서 다른 코덱 대신 H.264 코덱을 사용하게 만들면 무난하게 재생되는 것을 볼 수 있다.(하드웨어 가속을 지원하지 않는 경우에도 CPU 사용량을 낮춰줄 수 있다)

GPU가 얼마나 일하고 있는지를 확인하려면 윈도에서는 그냥 작업 관리자 띄워서 GPU 그래프를 확인하면 그만이지만 리눅스의 기본 시스템 감시자인 top나 그걸 좀 더 세련되게 만든 htop에서는 GPU를 지원하지 않는다. 그래서 별도의 패키지를 설치해야 하는데 우분투 기준으로 인텔 사용자는 intel-gpu-tools 패키지를 설치한 후 터미널에 intel-gpu-top를 실행하면 된다.

sudo apt update && sudo apt -y install intel-gpu-tools
intel-gpu-top

 

h264ify를 적용(60fps 재생은 막아놓지 않은 상태)해서 1080p 60fps 화질로 재생한 모습(GPU 사용량에 주목할 것)

유튜브 영상을 재생하면서 GPU 모니터링을 하면 GPU가 바쁘게 돌아가는 것을 볼 수 있다. CPU 사용량도 같이 늘어나는 것을 보면 완벽한 하드웨어 디코딩은 아닌 것 같지만(이건 GPU에 따라 다를 수 있다) 그냥은 제대로 재생되지 않는 영상(화면은 그대로 음성만 흘러나올 정도)을 제대로 볼 수 있다는 것만으로도 만족스럽다.

 

그런데 아직 이 방법은 권장하기 어렵다

그런데 이 방법에는 중대한 문제가 있다. 그것도 한국어 사용자에게만 있는 문제다. 물론 이 글에서 설정한 것 때문에 발생하는 문제는 아니다. Wayland를 적용해야만 파이어폭스에서 동영상 하드웨어 가속이 가능한데, 아직 Wayland에서 제대로 쓸 수 있는 한국어 입력기가 없어서 발생하는 문제이다.

 

일단 테스트에 사용한 우분투 20.04는 GNOME을 데스크톱 환경으로 쓰고 GNOME에서는 ibus를 다국어 입력기로 밀고 있다. 따라서 우분투 20.04에서도 기본으로 적용되어 있다. 별다른 설정을 하지 않아도 한글을 쓸 수 있는 것은 좋지만 ibus-hangul에는 치명적인 한국어 끝자리 버그가 있다. 원인에 대해서는 프로그래밍 지식이 없기 때문에 설명할 수 었지만, 한글을 입력하다 스페이스바를 누르면 마지막 글자가 사라지거나 스페이스와 위치를 바꿔버리는 버그이다. 마찬가지로 글씨를 완전히 입력하지 않은 상태에서 다른 창에 커서를 옮기고 클릭하면 그쪽으로 글자가 옮겨지는 현상도 발생한다. 이 버그는 스페이스바를 누르기 전에 컨트롤 키를 눌러주는 것으로 예방할 수 있지만, 한국어 입력 방식은 일본어나 중국어처럼 로마자로 입력한 다음 가나나 한자로 변환하는 과정을 거치지 않기 때문에 단어 하나하나마다 스페이스바 이외에 다른 키를 입력하는 습관이 있는 한국인은 아무도 없을 것이다. 그러니 이것으로 문서 작성은 물론이고 긴 댓글을 쓰려고만 해도 상당히 불편할 수밖에 없다.

 

물론 다른 입력기 중에서는 uim-byeoru와 같이 해당 버그가 없는 것들도 있다. 하지만 지금 당장 Wayland에서 제대로 작동하면서 비교적 간편하게 설치하고 지속적인 업데이트를 기대할 수 있는 한국어 입력기는 ibus-hangul 뿐이다(uim과 fcitx는 Wayland 환경에서는 실행조차 되지 않는다). 그러니 해당 버그가 있는 입력기가 버그를 고치거나(이건 입력기만의 문제가 아니라서 해결하기 어려울 수 있음) 해당 버그가 없는 입력기가 Wayland를 지원하기만을 기다려야 하는 상황이다.

 

GNOME/Web? 이런 것도 있었어?

동영상 하드웨어 가속을 크롬에선 지원해줄 생각이 없다고 하고 크로미움에선 PPA 저장소 설정이라든지 개조된 크로미움 웹 브라우저에서 구글 아이디 연동하는 것이 번거로워서 이를 새로 지원하기 시작한(지난 4월에 출시된 75 버전부터 지원하기 시작했다) 파이어폭스를 이용하는 방법을 이렇게 잔뜩 적어놨는데 파이어폭스는 거의 모든 개인용 OS에서 지원하는 크로스 플랫폼에 강력한 확장 기능과 동기화 기능을 지원하는 좋은 웹 브라우저이지만 Wayland에서의 한국어 입력기 문제 때문에 당장 쓰라고 권하지는 못하겠다. Wayland 자체도 아직 완전히 안정화되지 못한 상황에서 그냥 X11 쓰고 그냥 유튜브는 CPU 빨로 보는 편이 나을지도 모르겠다.

 

그런데 아치 리눅스 위키의 앱별 하드웨어 비디오 가속 지원 표에 못 보던 것이 생겼다. 바로 GNOME/Web이다. 이게 뭔가 했는데 예전에 Epiphany라고 불렸던 앱이었다. 옛날엔 그냥 크롬 하고 파이어폭스만 썼고 GNOME 데스크톱 환경에 기본적으로 탑재되고 상대적으로 심심하게 생긴 이 앱을 한 번도 제대로 써본 적이 없었다. 그런데 그런 GNOME/Web이 동영상 하드웨어 가속을 제대로 지원한다는 것이다.

 

GNOME/Web이 세 가지 방식의 API를 통한 디코딩을 모두 지원한다고 한다. (2020-06-07 기준)

다음에는 X11 환경에서 GNOME/Web으로 유튜브 하드웨어 가속이 잘 이루어지는지 확인하고 포스팅하도록 하겠다.

 

핵심 요약

1. vainfo를 실행해서 VA-API로 H.264와 VP9 코덱 디코딩 가능한지 확인

2. ~/.config/environment.d/.conf~/.bashrc~/.profile에 다음 내용 추가

export MOZ_ENABLE_WAYLAND=1
export MOZ_WEBRENDER=1

3. 로그아웃 후 다시 로그온

4. 파이어폭스 주소창에 about:config 입력

5. widget.wayland-dmabuf-vaapi.enabledtrue로 설정

6. media.ffvpx.enabled 항목을 false로 설정

7. gfx.webrender.all 항목을 true로 설정

8. 파이어폭스 재시작

 

참고자료

wiki.archlinux.org/index.php/Hardware_video_acceleration

 

Hardware video acceleration - ArchWiki

Hardware video acceleration makes it possible for the video card to decode/encode video, thus offloading the CPU and saving power. There are several ways to achieve this on Linux: Video Acceleration API (VA-API) is a specification and open source library t

wiki.archlinux.org

wiki.archlinux.org/index.php/Firefox#Hardware_video_acceleration

 

Firefox - ArchWiki

Firefox is a popular open source graphical web browser from Mozilla. Installing Firefox can be installed with the firefox package. Other alternatives include: Firefox Developer Edition — for developers https://www.mozilla.org/firefox/developer/ || firefo

wiki.archlinux.org

wiki.gnome.org/Initiatives/Wayland/SessionStart

 

Initiatives/Wayland/SessionStart - GNOME Wiki!

Session start Traditional session setup Under X11, starting a graphical session typically involves running a tower of shell scripts starting with /etc/X11/xinit/xinitrc or similar. Another noteworthy point is that the shell running these scripts is a login

wiki.gnome.org