시놀로지 Docker Jellyfin 하드웨어 가속이 작동하지 않는 이유
시놀로지 NAS에 Docker로 Jellyfin을 설치한 뒤 영상을 재생하다 보면 하드웨어 가속이 작동하지 않아 CPU 사용률이 급격하게 올라가는 경우가 있습니다.
특히 4K 영상이나 HEVC(H.265), AV1 같은 고해상도 영상을 재생할 때 이런 문제가 쉽게 나타납니다.
Jellyfin에서는 하드웨어 가속을 사용하면 NAS에 장착된 GPU 또는 CPU의 내장 그래픽을 이용해 영상의 디코딩과 인코딩 작업을 처리할 수 있습니다.
반대로 하드웨어 가속이 제대로 작동하지 않으면 영상 변환 작업을 CPU가 직접 처리하게 됩니다.
그 결과 다음과 같은 현상이 나타날 수 있습니다.
CPU 사용률 90~100%
영상 재생 중 버퍼링
트랜스코딩 속도 저하
4K 영상 재생 실패
여러 사용자가 동시에 접속했을 때 성능 급격한 저하
그렇다면 시놀로지 NAS에서 Docker로 실행한 Jellyfin의 하드웨어 가속은 왜 제대로 작동하지 않을까요?
단순히 Jellyfin 설정에서 하드웨어 가속 옵션을 켜는 것만으로는 충분하지 않습니다.
NAS의 하드웨어 → Docker 컨테이너 → 장치 접근 권한 → Jellyfin 설정
이 모두 정상적으로 연결되어야 합니다.
Jellyfin 하드웨어 가속이 필요한 이유
Jellyfin에서 사용자가 재생하는 영상이 항상 원본 그대로 재생되는 것은 아닙니다.
사용하는 스마트폰이나 TV가 해당 영상의 코덱이나 해상도를 지원하지 않으면 Jellyfin 서버가 영상을 실시간으로 변환해야 합니다.
이 과정을 트랜스코딩(Transcoding)이라고 합니다.
예를 들어 NAS에 저장된 영상이 4K HEVC인데 TV가 해당 영상 형식을 제대로 지원하지 않는다면 Jellyfin이 재생 가능한 형식으로 변환해야 할 수 있습니다.
이때 CPU만 사용하면 상당한 연산 능력이 필요합니다.
하드웨어 가속이 정상적으로 작동하면 지원되는 하드웨어를 이용해 이 작업을 처리할 수 있기 때문에 CPU 부담을 크게 줄일 수 있습니다.
Docker Jellyfin에서는 하드웨어가 자동으로 연결되지 않는다
시놀로지 NAS에 Jellyfin을 직접 설치하는 것과 Docker 컨테이너로 설치하는 것에는 차이가 있습니다.
Docker 컨테이너는 기본적으로 NAS의 모든 하드웨어 장치에 접근할 수 있는 것이 아닙니다.
즉, NAS에 Intel 내장 그래픽이나 기타 GPU가 있더라도 Jellyfin 컨테이너에서 해당 장치를 사용할 수 있도록 장치 접근을 전달해 주어야 할 수 있습니다.
이 부분이 빠져 있으면 Jellyfin에서 하드웨어 가속을 활성화해도 실제 트랜스코딩은 CPU로 처리될 수 있습니다.
가장 먼저 확인할 것은 GPU 장치
Intel 내장 그래픽을 사용하는 시스템에서는 일반적으로 Linux의 GPU 장치가 /dev/dri 아래에 나타날 수 있습니다.
예를 들어 다음과 같은 장치가 있을 수 있습니다.
/dev/dri/renderD128
이 장치는 하드웨어 가속에 사용되는 중요한 장치 중 하나입니다.
Docker 컨테이너가 이 장치에 접근할 수 있어야 Jellyfin이 해당 하드웨어를 사용할 수 있습니다.
따라서 컨테이너 설정에서 GPU 장치 접근이 제대로 전달됐는지 확인해야 합니다.
Container Manager에서 장치 매핑 확인
시놀로지 Container Manager에서 Jellyfin 컨테이너를 구성할 때는 사용 중인 이미지와 DSM 버전에 따라 GPU 장치 접근 방법이 달라질 수 있습니다.
중요한 것은 Jellyfin 컨테이너 내부에서 GPU 장치를 인식할 수 있는 상태인지입니다.
NAS에서는 GPU가 정상적으로 작동하더라도 Docker 컨테이너 내부에서는 장치가 보이지 않을 수 있습니다.
이 경우 Jellyfin 설정에서 하드웨어 가속을 선택해도 실제 하드웨어 트랜스코딩은 이루어지지 않습니다.
/dev/dri가 중요한 이유
Intel 계열 그래픽을 사용하는 Linux 환경에서는 하드웨어 비디오 가속과 관련된 장치가 /dev/dri에 노출되는 경우가 많습니다.
Docker에서는 필요한 장치를 컨테이너에 전달해야 합니다.
예를 들어 컨테이너에서 /dev/dri 장치를 사용할 수 있어야 하는 구성이라면 Docker 설정에 해당 장치가 전달되어 있는지 확인해야 합니다.
다만 모든 시놀로지 NAS가 동일한 하드웨어를 사용하는 것은 아니며 AMD나 NVIDIA GPU를 사용하는 경우 접근 방법도 달라질 수 있습니다.
따라서 다른 NAS에서 사용한 설정을 그대로 복사하는 것은 주의해야 합니다.
Jellyfin에서 하드웨어 가속을 켰는데도 안 되는 이유
Jellyfin 관리 화면에서 하드웨어 가속을 선택했다고 해서 바로 하드웨어 트랜스코딩이 시작되는 것은 아닙니다.
실제 트랜스코딩이 발생하는 상황에서 하드웨어 장치를 사용할 수 있어야 합니다.
또한 선택한 하드웨어 가속 방식이 NAS의 하드웨어와 호환되어야 합니다.
예를 들어 Intel CPU 기반 NAS라면 Intel GPU 관련 가속 방식을 고려할 수 있고, NVIDIA GPU를 사용하는 환경이라면 NVIDIA 관련 설정이 필요할 수 있습니다.
따라서 자신의 NAS에 어떤 CPU 또는 GPU가 장착되어 있는지 먼저 확인하는 것이 중요합니다.
모든 영상이 하드웨어 트랜스코딩을 사용하는 것은 아니다
이 부분도 많이 오해하는 내용입니다.
Jellyfin에서 영상을 재생할 때 Direct Play가 이루어진다면 굳이 서버에서 영상을 변환할 필요가 없습니다.
즉,
원본 영상
↓
TV 또는 스마트폰에서 직접 재생
이 가능하다면 트랜스코딩 자체가 발생하지 않습니다.
이 경우 하드웨어 가속이 작동하지 않는 것처럼 보여도 실제로는 하드웨어 가속이 필요하지 않은 상황일 수 있습니다.
하드웨어 가속이 제대로 작동하는지를 확인하려면 실제로 트랜스코딩이 발생하는 영상을 테스트해야 합니다.
Direct Play와 Transcoding을 구분해야 한다
Jellyfin에서 재생 상태를 확인할 때 다음과 같은 개념을 구분해야 합니다.
Direct Play
서버가 영상 파일을 거의 그대로 전달합니다.
Direct Stream
영상 자체는 재인코딩하지 않고 필요한 부분만 변환할 수 있습니다.
Transcoding
영상이나 오디오를 서버에서 다른 형식으로 변환합니다.
하드웨어 가속은 주로 Transcoding 과정에서 의미가 있습니다.
따라서 하드웨어 가속 문제를 확인하려면 Jellyfin의 재생 정보에서 현재 영상이 어떤 방식으로 재생되고 있는지 확인하는 것이 좋습니다.
CPU 사용률이 높다고 무조건 하드웨어 가속 실패는 아니다
영상 재생 중 CPU 사용률이 높다고 해서 항상 하드웨어 가속이 작동하지 않는 것은 아닙니다.
트랜스코딩 과정에는 영상 디코딩과 인코딩뿐만 아니라 다양한 작업이 포함될 수 있습니다.
또한 자막 처리나 오디오 변환 등 일부 작업은 CPU를 사용할 수 있습니다.
따라서 단순히 CPU 사용률만 보고 판단하기보다 Jellyfin의 재생 정보와 트랜스코딩 로그를 함께 확인하는 것이 정확합니다.
자막 때문에 트랜스코딩이 발생할 수 있다
Jellyfin에서 하드웨어 가속을 확인할 때 의외로 자주 문제가 되는 것이 자막입니다.
특히 일부 자막은 영상에 직접 합성되는 Burn-in 과정이 발생할 수 있습니다.
이 경우 영상 자체가 서버에서 다시 처리되면서 CPU 사용량이 높아질 수 있습니다.
즉, 영상 코덱이 하드웨어 가속을 지원하더라도 자막 처리 방식 때문에 전체 트랜스코딩 과정에서 CPU 사용량이 높아질 수 있습니다.
따라서 하드웨어 가속 문제를 테스트할 때는 자막을 끈 상태와 켠 상태를 비교해 보는 것도 도움이 됩니다.
코덱 지원 여부도 확인해야 한다
하드웨어 가속은 모든 코덱과 모든 NAS에서 동일하게 지원되는 것이 아닙니다.
예를 들어 다음과 같은 코덱이 사용될 수 있습니다.
H.264
H.265(HEVC)
VP9
AV1
하지만 어떤 코덱을 하드웨어로 디코딩하거나 인코딩할 수 있는지는 사용하는 CPU나 GPU에 따라 달라집니다.
따라서 NAS의 하드웨어가 해당 코덱을 지원하는지 확인해야 합니다.
특히 오래된 NAS에서는 최신 코덱에 대한 하드웨어 가속 지원이 제한될 수 있습니다.
하드웨어 디코딩과 인코딩은 다르다
Jellyfin의 하드웨어 가속 설정을 볼 때 디코딩과 인코딩을 구분하는 것도 중요합니다.
디코딩은 영상을 읽어 처리하는 과정이고, 인코딩은 처리한 영상을 다른 형식으로 압축하는 과정입니다.
사용하는 하드웨어에 따라 지원하는 디코딩과 인코딩 코덱이 다를 수 있습니다.
따라서 특정 영상에서 하드웨어 가속이 일부만 작동하는 것처럼 보인다면 해당 코덱의 디코딩과 인코딩 지원 여부를 각각 확인해야 합니다.
Docker 이미지에 따라 설정 방법이 다르다
Jellyfin Docker 이미지를 설치할 때 어떤 이미지를 사용했는지도 중요합니다.
Jellyfin 공식 이미지와 다른 커뮤니티 이미지에서는 환경변수나 권한 설정 방식이 다를 수 있습니다.
따라서 인터넷에서 찾은 설정을 그대로 적용하기보다는 현재 사용 중인 Jellyfin 이미지의 공식 문서를 확인하는 것이 안전합니다.
특히 GPU 장치, 사용자 권한, 환경변수 설정은 이미지에 따라 차이가 있을 수 있습니다.
컨테이너 권한도 확인해야 한다
GPU 장치를 컨테이너에 연결했는데도 Jellyfin에서 하드웨어 가속이 작동하지 않는다면 컨테이너의 장치 접근 권한을 확인해야 합니다.
Docker에서는 장치가 컨테이너에 전달되어 있어도 애플리케이션이 해당 장치를 사용할 권한이 없을 수 있습니다.
특히 /dev/dri와 같은 장치에 접근하는 과정에서 사용자 또는 그룹 권한이 영향을 줄 수 있습니다.
따라서
GPU 장치 존재 여부
↓
컨테이너에 장치 전달 여부
↓
컨테이너 내부 접근 권한
↓
Jellyfin 설정
순서로 확인하는 것이 좋습니다.
트랜스코딩 임시 폴더도 확인해야 한다
Jellyfin은 트랜스코딩 과정에서 임시 파일을 생성할 수 있습니다.
따라서 트랜스코딩 경로에 충분한 저장 공간과 적절한 쓰기 권한이 있어야 합니다.
볼륨 매핑을 잘못 설정했거나 해당 폴더에 쓰기 권한이 없다면 하드웨어 가속 자체와 별개의 문제가 발생할 수 있습니다.
예를 들어 로그에 파일 생성 또는 접근 권한 오류가 나타난다면 GPU 설정만 계속 수정하기보다 트랜스코딩 경로와 볼륨 권한을 먼저 확인해야 합니다.
Jellyfin 로그를 확인해야 하는 이유
하드웨어 가속 문제를 가장 정확하게 확인할 수 있는 방법 중 하나는 Jellyfin 로그를 확인하는 것입니다.
로그에서 FFmpeg가 어떤 방식으로 실행되는지 확인하면 하드웨어 가속이 실제로 사용되고 있는지 판단하는 데 도움이 됩니다.
예를 들어 하드웨어 가속 장치를 인식하지 못하거나 관련 라이브러리를 불러오지 못하는 메시지가 나타난다면 Docker의 GPU 장치 설정을 다시 확인해야 합니다.
반대로 하드웨어 가속이 정상적으로 초기화됐는데도 CPU 사용률이 높다면 자막 처리나 오디오 트랜스코딩 등 다른 작업이 원인일 수 있습니다.
하드웨어 가속이 작동하는지 확인하는 방법
단순히 Jellyfin 설정 화면에서 하드웨어 가속을 활성화했다고 확인해서는 안 됩니다.
다음과 같은 방식으로 확인하는 것이 좋습니다.
먼저 트랜스코딩이 필요한 영상을 준비합니다.
Jellyfin에서 해당 영상을 재생합니다.
재생 정보에서 Transcoding이 발생하는지 확인합니다.
그다음 Jellyfin의 로그에서 FFmpeg 관련 메시지를 확인합니다.
NAS의 CPU 사용률도 함께 확인합니다.
가능하다면 GPU 사용 상태도 확인합니다.
이렇게 여러 정보를 함께 확인해야 실제로 하드웨어 가속이 사용되고 있는지 판단할 수 있습니다.
하드웨어 가속 문제 확인 순서
문제가 발생했을 때는 다음 순서로 확인하면 좋습니다.
1. NAS CPU/GPU 확인
사용 중인 NAS가 하드웨어 가속을 지원하는지 확인합니다.
2. Jellyfin Docker 이미지 확인
사용 중인 이미지의 하드웨어 가속 설정 방법을 확인합니다.
3. GPU 장치 확인
Linux에서 사용할 수 있는 GPU 장치가 존재하는지 확인합니다.
4. 컨테이너 장치 연결 확인
Jellyfin 컨테이너가 해당 GPU 장치에 접근할 수 있는지 확인합니다.
5. 권한 확인
컨테이너 프로세스가 GPU 장치를 사용할 권한이 있는지 확인합니다.
6. Jellyfin 하드웨어 가속 설정 확인
사용 중인 하드웨어에 맞는 가속 방식을 선택합니다.
7. 코덱 지원 여부 확인
재생하려는 영상의 코덱이 해당 하드웨어에서 지원되는지 확인합니다.
8. 실제 트랜스코딩 테스트
Direct Play가 아닌 실제 Transcoding 상황에서 테스트합니다.
9. 로그 확인
Jellyfin과 FFmpeg 로그에서 하드웨어 가속 관련 오류를 확인합니다.
10. 자막과 오디오 변환 확인
영상 자체가 아니라 자막이나 오디오 때문에 CPU 작업이 발생하는지도 확인합니다.
무조건 하드웨어 가속을 켜는 것이 좋은 것은 아니다
하드웨어 가속이 항상 모든 상황에서 좋은 결과를 만드는 것은 아닙니다.
사용하는 NAS의 CPU나 GPU가 특정 코덱을 지원하지 않거나 드라이버 및 컨테이너 환경이 제대로 구성되지 않은 경우 오히려 문제가 발생할 수 있습니다.
또한 영상이 Direct Play로 재생되고 있다면 서버에서 트랜스코딩 자체가 필요하지 않습니다.
따라서 하드웨어 가속 옵션을 켜는 것보다 실제 사용 환경에서 트랜스코딩이 필요한지부터 확인하는 것이 중요합니다.
마무리
시놀로지 NAS에서 Docker로 Jellyfin을 운영하면서 하드웨어 가속이 작동하지 않는 이유는 단순히 Jellyfin 설정 하나 때문인 경우가 많지 않습니다.
대부분 다음과 같은 여러 요소 중 하나에서 문제가 발생합니다.
NAS 하드웨어의 지원 여부
GPU 장치 연결
Docker 컨테이너의 장치 접근 권한
Jellyfin 하드웨어 가속 설정
코덱 지원 여부
자막 처리
트랜스코딩 경로 권한
Docker 이미지 설정
따라서 Jellyfin 설정 화면에서 하드웨어 가속을 활성화했는데도 CPU 사용률이 높다면 바로 설정을 변경하기보다 실제로 트랜스코딩이 발생하고 있는지부터 확인하는 것이 좋습니다.
특히 Docker 환경에서는 NAS에 GPU가 존재한다고 해서 컨테이너가 자동으로 해당 하드웨어를 사용할 수 있는 것은 아닙니다.
NAS의 하드웨어가 정상적으로 인식되는지 → Docker 컨테이너에 장치가 전달됐는지 → 권한이 있는지 → Jellyfin이 해당 하드웨어를 사용하도록 설정됐는지
순서대로 확인해야 원인을 정확하게 찾을 수 있습니다.
결국 시놀로지 Docker에서 Jellyfin 하드웨어 가속 문제를 해결하는 핵심은 “하드웨어 가속 옵션을 켰는가”가 아니라 “Jellyfin 컨테이너가 실제 트랜스코딩 과정에서 GPU 또는 내장 그래픽을 사용할 수 있는 환경인가”를 확인하는 것입니다.
IT왕세자
댓글 0
첫 댓글을 남겨보세요.