SSD Nodes Learn 🎉 VPS $5.50/aydan başlayan
Rehberler Matt ConnorYazan Matt Connor

Docker Jellyfin NVIDIA Donanım Kod Dönüştürme Rehberi

Jellyfin konteynerine NVIDIA GPU atamak için Docker Compose yapılandırması, NVIDIA Container Toolkit kurulumu ve nvidia-smi ile donanım hızlandırmayı doğrulama adımları.

Ne inşa ediyorsunuz

NVIDIA GPU üzerinde Jellyfin donanım kod dönüştürme (transcoding) işlemi, sabit bir sırayla gerçekleştirilen dört adımdan oluşur ve bunların sadece sonuncusu Jellyfin içerisinde gerçekleşir. Konteyner, ana makine sürücüsü tarafından yüklenmemiş bir GPU'yu göremez. Jellyfin, konteynerin göremediği bir GPU'yu kullanamaz. Bu sırayla ilerlediğinizde, her başarısızlığın nerede aranacağı netleşir.

  1. NVIDIA sürücüsünü ana makineye kurun ve ardından nvidia-smi ile doğrulayın.
  2. Docker'ın bir GPU'yu konteynere aktarabilmesi için NVIDIA Container Toolkit'i kurun.
  3. docker-compose.yml içerisinde GPU'yu Jellyfin servisi için rezerve edin ve ardından konteynerin onu gördüğünü doğrulayın.
  4. Jellyfin'in kendi oynatma ayarlarından NVENC ve NVDEC'i açın, ardından gerçek bir oynatmanın bunları kullandığını doğrulayın.

NVENC (NVIDIA kodlayıcı) ve NVDEC (NVIDIA kod çözücü), kart üzerindeki sabit işlevli bloklardır. Bunlar, CUDA (compute unified device architecture) işlerini yürüten shader çekirdeklerinden ayrı silikon birimleridir. Bu ayrım, işlemin yapılmaya değer olmasının temel nedenidir: yazılım tabanlı olarak birden fazla CPU çekirdeğini tüketen bir akış, GPU üzerinde tek bir çekirdeğin küçük bir dilimi ve özel bir donanım bloğu ile işlenir.

Direct play her zaman transcode işleminden daha verimlidir, öncelikle bunu kontrol edin

Herhangi bir yapılandırma yapmadan önce, transcode işlemini basit bir değişiklikle ortadan kaldırıp kaldıramayacağınızı belirleyin. Jellyfin, istemci dosyayı olduğu gibi oynatamadığında transcode işlemi yapar. Bunun nedeni her zaman şu kısa listeden biridir: video codec bileşeni, ses codec bileşeni, kapsayıcı formatı, resim tabanlı altyazılar veya istemcinin talep ettiği bir bit hızı sınırı.

Dashboard menüsünü açın, ardından Playback kısmına gidin ve bir içerik oynatılırken aktif oturumu izleyin. Direct playing olarak işaretlenen bir oturum, dosyayı hiçbir değişikliğe uğratmadan gönderir ve neredeyse hiç CPU tüketmez. Transcoding olarak işaretlenen bir oturum ise Jellyfin'in bu yöntemi seçme nedenini gösterir. Bu nedeni ortadan kaldırdığınızda GPU'nun çalışmasına gerek kalmaz.

İki değişiklik, transcode işlemlerinin çoğunu ortadan kaldırır. İstemci uygulamasının kalite ayarını Auto veya maksimum seviyeye getirin; çünkü 4 Mbps talep eden bir istemci, dosyanın codec bileşeni ne olursa olsun 20 Mbps'lik bir dosyanın yeniden kodlanmasına (re-encode) neden olur. Ayrıca tarayıcı sekmesi yerine yerel bir istemci uygulaması kullanın; çünkü tarayıcı sahip olduğunuz en kısıtlı oynatıcıdır ve aynı TV üzerindeki yerel bir uygulama, aynı dosyayı genellikle Direct play ile oynatabilir.

Resim tabanlı altyazılar, hiçbir istemci ayarının düzeltemediği istisnalardır. Blu-ray kopyalarındaki PGS altyazılar ve DVD kopyalarındaki VOBSUB altyazılar resim formatındadır; bu nedenle video üzerine işlenmeleri gerekir, bu da video akışının tamamen yeniden kodlanması anlamına gelir. SRT formatındaki metin tabanlı altyazılar ise istemciye ayrı bir iz olarak gönderilir ve hiçbir ek yük getirmez. Altyazı izlerini mümkün olan yerlerde metne dönüştürmek, bir GPU'dan daha fazla verim sağlar. Sunucu tarafının geri kalanı Jellyfin medya sunucusunu bir VPS üzerinde çalıştırma rehberi içerisinde ele alınmıştır.

Çoğu VPS planında GPU bulunmaz

Standart VPS planları GPU içermez. Başka bir planlama yapmadan önce sunucuda şu komutu çalıştırın:

lspci -nn | grep -Ei "3d|display|vga"

Tipik bir KVM VPS üzerinde bu komut, hipervizörden gelen sanal bir görüntü bağdaştırıcısını listeler veya yararlı bir çıktı vermez. Bu aygıt video kodlayamaz. Gerçek bir GPU, yalnızca sağlayıcı fiziksel bir kartı örneğinize passthrough yöntemiyle atadığında veya size bir dilimini ayırdığında görünür; bu tür planlar da buna göre fiyatlandırılır. Hangi iş yükleri GPU destekli bir VPS için ödeme yapmayı haklı çıkarır başlıklı bölüm, kimlerin buna ihtiyaç duyup duymayacağını açıklar.

Eğer GPU yoksa, doğrudan oynatmaya (direct play) odaklanın ve yazılımsal kod dönüştürmeyi (software transcoding) istisnai bir durum olarak değerlendirin. Tek bir 1080p H.264 yazılımsal kod dönüştürme işlemi ağır olsa da birkaç CPU çekirdeği ile yönetilebilir. Ton eşlemeli (tone mapping) 4K HDR yazılımsal kod dönüştürme işlemi, küçük bir VPS'in gerçek zamanlı olarak tamamlayabileceği bir iş değildir; bu nedenle CPU yüzde 100 kullanımda takılı kalırken yayın kesintiye uğrar.

NVIDIA sürücüsünün ana makineye kurulması

Jellyfin 10.11, Linux üzerinde en az 520.56.06 sürümünde bir NVIDIA sürücüsü gerektirir. Ubuntu, sizin için uygun paketi seçen bir yardımcı araç sunar.

sudo ubuntu-drivers list --gpgpu
sudo ubuntu-drivers install --gpgpu
sudo reboot

--gpgpu komutu, sürücünün başsız (headless) sunucu sürümünü seçer; medya sunucuları masaüstü ortamı içermediğinden bu sürüm tercih edilir. Liste komutu mevcut dalları görüntüler; örneğin sudo ubuntu-drivers install --gpgpu nvidia:570-server kullanarak belirli bir dalı sabitleyebilirsiniz. Burada yazan dal yerine, liste komutunun çıktı olarak verdiği bir dalı kullanın.

Sunucu sürümü her zaman nvidia-smi paketini otomatik olarak çekmeyebilir. Seçtiğiniz dala uygun utils paketini, örneğin sudo apt install nvidia-utils-570-server komutuyla kurun. Ardından sürücüyü kontrol edin.

nvidia-smi

Sorunsuz bir sonuç, başlık kısmında sürücü ve CUDA sürümünü, kartınızın adını ve boş bir süreç listesini içeren bir tablo döndürür. Bu aşamada iki hata yaygındır. nvidia-smi: command not found hatası, sürücünün değil, utils paketinin eksik olduğu anlamına gelir. NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver hatası, çekirdek modülünün yüklenemediğini gösterir; yeni bir kurulumda bu durum genellikle sistemin yeniden başlatılmadığı veya Secure Boot özelliğinin imzalanmamış bir modülün yüklenmesini engellediği anlamına gelir. Modülün varlığını lsmod | grep nvidia ile doğrulayın.

NVIDIA Container Toolkit kurulumu

Sürücü, ana makinenin GPU'yu kullanmasını sağlar. Ancak Docker, konteyner içerisinde cihaz düğümleri veya sürücü kütüphaneleri bulunmadığı için GPU'yu konteynere aktarmaz. NVIDIA Container Toolkit, konteyner başlatıldığında her ikisini de içeriye enjekte eden bileşendir. Aşağıdakiler, Debian ve Ubuntu için NVIDIA'nın kendi kurulum komutlarıdır.

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

Paketi kurmak yeterli değildir, çünkü Docker'a çalışma zamanının (runtime) varlığı bildirilmelidir.

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

nvidia-ctk runtime configure, /etc/docker/daemon.json dosyasına bir nvidia çalışma zamanı girdisi yazar. Yeniden başlatma adımı, kullanıcıların genellikle atladığı kısımdır ve bu adımı atlamak, tüm kurulum sürecindeki en yaygın hataya neden olur. Jellyfin ile işlem yapmadan önce bağlantı hattını test edin.

sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

Bu komut, ana makinenin yazdırdığı tabloyla aynı tabloyu yazdırmalıdır. Eğer bunun yerine gpu yeteneklerine sahip bir cihaz sürücüsü seçilemediğine dair bir hata verirse, Docker daemon nvidia çalışma zamanından haberdar değildir; bu durumda yapılandırma komutunu tekrar çalıştırın ve daemon'ı yeniden başlatın.

Jellyfin container'ına Docker Compose içinde GPU atama

Bu, Jellyfin'in yayınladığı örnekle uyumlu olan modern Compose biçimidir.

services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    user: 1000:1000
    network_mode: host
    restart: unless-stopped
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=all
    volumes:
      - /srv/jellyfin/config:/config
      - /srv/jellyfin/cache:/cache
      - /srv/media:/media:ro
    runtime: nvidia
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

Servisi ayağa kaldırın ve doğrudan container'a sorgu gönderin.

docker compose up -d
docker compose exec jellyfin nvidia-smi

Eğer bu komut container içinden sürücü tablosunu yazdırıyorsa, GPU doğru şekilde aktarılmış demektir ve kalan tüm sorunlar Jellyfin ayarlarıyla ilgilidir.

Bu dosyadaki dört satır açıklanmayı hak ediyor. capabilities: [gpu], Compose'un kendisi tarafından zorunlu tutulur; bu satırın eksik olması, Compose'un servisi GPU olmadan başlatmak yerine servisi reddetmesine neden olur. NVIDIA_DRIVER_CAPABILITIES=all önemlidir çünkü araç seti, video yeteneği talep edildiğinde video kütüphanelerini yalnızca container içine bağlar ve Jellyfin belgeleri, resmi imaj için bu değişkenin zorunlu olduğunu belirtir. Bu değişken olmadan CUDA çalışır ancak NVDEC çalışmaz ve transcode günlüğü Cannot load libnvcuvid.so.1 hatasını raporlar. network_mode: host, Jellyfin'in kendi örneğinde kullandığı değerdir; çünkü 7359 numaralı UDP portu üzerindeki istemci otomatik keşfi, bridge ağ yapısında çalışmaz.

user: 1000:1000 sonuncusudur ve GPU ile hiçbir ilgisi yoktur. Jellyfin'in medya bağlama noktanızdaki hangi dosyaları okuyabileceğine karar verir; buradaki bir uyumsuzluk, izin hatası yerine boş bir kütüphane olarak görünür. PUID ve PGID'nin bir container kullanıcısını diskteki dosyalarla nasıl eşleştirdiği konusu numaralandırmayı açıklar ve bu, Sonarr ve Radarr yığınını Docker Compose içinde çalıştırıyorsanız zaten ayarlamış olduğunuz numaralandırmanın aynısıdır.

Neden çoğu eğitim hala runtime: nvidia kullanıyor

Eski biçim, bulacağınız neredeyse her rehberde yer alır ve yanlış değildir. Bu bir geçmiş meselesidir. Orijinal nvidia-docker2 paketi, nvidia adında bir OCI çalışma zamanı kaydettiği için, bir GPU'yu container içine almanın tek yolu --runtime=nvidia ve NVIDIA_VISIBLE_DEVICES kullanmaktı. Docker 19.03 sürümü, --gpus bayrağını ve düzgün bir cihaz isteği API'sini ekledi. Compose'un bu değişikliğe uyum sağlaması daha uzun sürdü ve uyum sağladığında, cihaz isteği deploy.resources.reservations.devices altında yer aldı; bu anahtar, çoğu insanın deploy ifadesinin Docker Swarm anlamına geldiğini öğrenmesi nedeniyle görmezden gelmeye alıştığı bir anahtardı.

Sonuç olarak, her iki biçim de bugün çalışmaktadır ve Jellyfin'in yayınladığı örnek her ikisini de aynı anda içermektedir. runtime: nvidia ifadesini tutmanın bir maliyeti yoktur ve dosyanın eski Compose sürümlerinde çalışmasını sağlar. Yalnızca runtime: nvidia ifadesini tutup deploy bloğunu kaldırırsanız, NVIDIA_VISIBLE_DEVICES=all ifadesini tutmanız gerekir; çünkü bu eski yol, hangi cihazların ekleneceğine karar vermek için ortam değişkenini okur ve bunun yerine okuyabileceği bir cihaz isteği bulunmaz.

Jellyfin icinde NVIDIA donanim kod donusumunu etkinlestirme

Simdiye kadar yapilan islemlerin hicbiri Jellyfin'e ekran kartini kullanmasini soylemedi. Dashboard, ardindan Playback ve son olarak Transcoding yolunu izleyin. Hardware acceleration ayarini Nvidia NVENC olarak belirleyin. Enable hardware encoding secenegini isaretleyin; aksi takdirde Jellyfin GPU uzerinde kod cozme islemi yapip CPU uzerinde kodlama yapar. Bu durum, GPU'nun aktif gorundugu ancak CPU'nun yuk altinda kaldigi kafa karistirici bir ara durumdur.

Enable enhanced NVDEC decoder secenegi, mevcut NVDEC yolu ile eski CUVID yolu arasinda gecis yapar. Bu secenegi acik birakin. Dolby Vision islemleri, NVDEC kullanabilmek icin bu ayarin acik olmasina gereksinim duyar.

Enable hardware decoding for basligi altinda, yalnizca kartinizin donanimsal olarak cozebildigi codec'leri isaretleyin. Kullanicilarin en sik hata yaptigi yer burasidir. AV1 kod cozucusu olmayan bir kartta AV1 secenegini isaretlemek hata mesaji uretmez. Jellyfin donanimsal kod cozme talebinde bulunur, yanit alamaz ve yazilimsal kod cozmeye geri doner. Sonuc olarak yuksek CPU kullanimi ve neredeyse bosta duran bir GPU ile karsilasirsiniz; bu durum, passthrough isleminin hic calismamis gibi gorunmesine neden olur.

Sayfanin tamamini ilgilendiren bir diger kisitlama ise donanim hizlandirmanin yalnizca paketle gelen jellyfin-ffmpeg derlemesi ile calismasidir. Eger FFmpeg yolunu sistemdeki bir FFmpeg'e yonlendirdiyseniz, kismi hizlandirma alirsiniz ya da hic hizlandirma alamazsiniz.

GPU neslinizin hangi kodekleri kodlayıp çözebildiği

Bunlar, Jellyfin'in NVENC ve NVDEC için belgelediği sınırlardır. Kod çözme (decode) ve kodlama (encode) ayrı yeteneklerdir; bir kart bunlardan birine sahipken diğerine sahip olmayabilir.

  • H.264 8-bit: NVENC ve NVDEC içeren her NVIDIA GPU, bunu hem çözer hem de kodlar.
  • HEVC 8-bit: Maxwell ikinci nesil (GM206) ve daha yenilerinde kod çözme ve kodlama mevcuttur.
  • HEVC 10-bit: Maxwell ikinci nesil ve daha yenilerinde kod çözme mevcuttur, ancak kodlama yalnızca Pascal ve daha yenilerinde desteklenir.
  • AV1: Ampere ve daha yenilerinde kod çözme, Ada Lovelace ve daha yenilerinde kodlama mevcuttur.

HEVC 10-bit ayrımı, pratikte sorun yaratan kısımdır. Maxwell döneminden kalma bir kart, 4K HDR dosyanızı GPU üzerinde çözer ancak 10-bit çıktı kodlayamaz; bu nedenle Jellyfin bunun yerine 8-bit H.264 kodlar. Bu yine de oynatılır ve çoğu istemci için zaten doğru tercihtir. Kartınız ne olursa olsun 2026 yılında AV1 kodlamaya nadiren ihtiyaç duyarsınız; çünkü istemci tarafında AV1 kod çözme desteği hala sınırlıdır ve transcode işlemi, zaten zorlanan bir istemciye ulaşmak için yapılır.

Tone mapping neden GPU'yu sessizce doyuma ulaştırır

HDR (yüksek dinamik aralık) ile SDR (standart dinamik aralık) arasındaki tone mapping, GPU bütçenizi tüketen ayardır ve bunun nedeni mimaridir. Kod çözme (decode) işlemi NVDEC üzerinde çalışır. Kodlama (encode) işlemi NVENC üzerinde çalışır. Tone mapping ise bunların hiçbirinde çalışmaz: hesaplama işlerini yürüten GPU'nun genel amaçlı birimi olan shader çekirdeklerinde yürütülen bir CUDA filtresidir. Dolayısıyla tone mapping gerektiren bir 4K HDR akışı, kod çözücüyü ve kodlayıcıyı kullanır, üstüne bir de shader'lara yük bindirir.

Jellyfin, CUDA tone mapping özelliğinin HEVC 10-bit kod çözebilen her NVIDIA GPU'da kullanılabilir olduğunu belirtir. Bu, onay kutusunun 4K çözünürlükte bunu sürdüremeyecek kartlarda da göründüğü ve çalıştığı anlamına gelir. Belirti, akışın başlaması, arabelleğe alması ve asla kararlı hale gelmemesidir; bu sırada nvidia-smi kodlayıcının neredeyse boşta olduğunu rapor eder.

Shader yükünün ayrı olarak izlenmesinin nedeni budur.

nvidia-smi dmon -s u

Bu komut, sm, enc ve dec için ayrı sütunlarla saniyede bir satır yazdırır. Yüksek bir sm değerinin yanındaki düşük enc ve dec değerleri, sabit işlevli blokların boşta olduğunu ve darboğazın shader'lar olduğunu gösterir; yani tone mapping, ölçeklendirme veya altyazı gömme işlemi size maliyet çıkarmaktadır. CUDA yolu ayrıca Dolby Vision profile 5'i sıfır kopyalama (zero copy) ile işler; bu önemlidir çünkü sıfır kopyalama olmadan kareler filtre adımları arasında sistem belleğine gidip gelir ve bu gidiş-dönüş her bir karede bant genişliği maliyeti oluşturur.

Tüketici sınıfı NVENC oturum sınırının gerçekte neyi kısıtladığı

ChartNVENC engines and concurrent encode session cap, NVIDIA published support matrix, August 2026
The data behind this chart
[
  {
    "label": "GeForce RTX 5090",
    "nvenc_engines": 3,
    "max_encode_sessions": 12
  },
  {
    "label": "GeForce RTX 4090",
    "nvenc_engines": 2,
    "max_encode_sessions": 12
  },
  {
    "label": "GeForce RTX 4060",
    "nvenc_engines": 1,
    "max_encode_sessions": 12
  }
]

Bunlar, burada yapılan ölçümler değil, NVIDIA'nın Ağustos 2026 itibarıyla yayınladığı matris değerleridir. Bir GeForce kartı, modeli ne olursa olsun 12 eşzamanlı kodlama oturumu ile sınırlandırılmıştır. Bu sınır silikonda değil sürücüde yer alır ve NVIDIA bunu yıllar içinde birden fazla kez artırmıştır; bu nedenle eski forum başlıkları yerine güncel matrisi inceleyin. Kartlar arasında gerçekten değişen kısım motor sayısıdır: GeForce RTX 5090 modeli 3 adet NVENC motoru barındırırken, GeForce RTX 4060 modeli 1 adet barındırır. Daha fazla motor, daha yüksek paralel kodlama iş hacmi anlamına gelir, daha yüksek bir oturum sınırı değil.

Sınır, kodlama oturumlarını sayar; dolayısıyla yalnızca kod dönüştürme (transcoding) akışlarını kapsar. Doğrudan oynatma (direct play) ve remux işlemleri hiçbir zaman bir kodlama oturumu açmaz. L4 gibi veri merkezi kartları aynı matriste sınırsız olarak listelenir ve bir GPU VPS planı genellikle size bu tür bir veri merkezi kartı sağlar; bu nedenle söz konusu sınır çoğunlukla ev sunucusu kullanıcılarını ilgilendiren bir konudur.

Sınıra ulaştığınızda kod dönüştürme işlemi başarısız olur ve FFmpeg günlüğü OpenEncodeSessionEx failed: out of memory (10) hatasını verir. Hata mesajı bellekten bahsetse de, oturum sınırı reddi aynı kodu döndürür; bu yüzden bir VRAM sızıntısı aramaya başlamadan önce eşzamanlı akış sayınızı kontrol edin. Uygulamada çoğu kullanıcı, on ikinci oturuma ulaşmadan önce ton eşleme (tone-mapping) sınırına veya yükleme bant genişliği limitine takılır.

GPU'nun kod dönüştürme yaptığını doğrulayın, yapılandırmaya güvenmeyin

Kaydedilmiş bir ayar, işlemin gerçekleştiğinin kanıtı değildir. Kod dönüştürmeyi zorunlu kılan bir dosyayı oynatın ve ardından üç kontrol gerçekleştirin.

  1. Dashboard'u ve ardından Playback sekmesini açın. Aktif oturumda Transcoding ibaresi yer almalı ve bunun nedeni belirtilmelidir. Eğer Direct playing yazıyorsa, hiçbir şey kod dönüştürülmüyordur ve yanlış dosyayı test ediyorsunuz demektir.
  2. Dashboard'u ve ardından Logs sekmesini açın, en yeni FFmpeg.Transcode günlüğünü görüntüleyin. Donanım tabanlı kod dönüştürme işlemi, komut satırında -hwaccel cuda ve -hwaccel_output_format cuda parametrelerini, kodlayıcı olarak ise h264_nvenc veya hevc_nvenc değerini gösterir. Eğer orada libx264 ifadesini görüyorsanız, ayarlar sayfası ne iddia ederse etsin, kod dönüştürme işlemi yazılımsal olarak yapılıyordur.
  3. Oynatma devam ederken ana makine üzerinde nvidia-smi komutunu çalıştırın. /usr/lib/jellyfin-ffmpeg/ffmpeg sürecine ait bir işlem, GPU belleği tahsis edilmiş şekilde görünmeli ve nvidia-smi dmon -s u çıktısında enc ve dec sütunları sıfırdan farklı değerler göstermelidir.

Üçüncü kontrolü container içinde değil, ana makine üzerinde çalıştırın. Container içindeki nvidia-smi komutu, kendi namespace'i dışındaki süreç kimliklerini göremediği için genellikle boş bir süreç listesi döndürür; ancak kullanım değerleri yine de doğru okunabilir. Container içinde boş bir süreç listesi görülmesi bir hata değildir.

Sistem size bildirmeden yazılıma geçtiğinde

Jellyfin oynatmaya devam etmeyi tercih eder. Donanım yolu kullanılamadığında, yayını kesmek yerine yazılım kodlamasına geçer; bu nedenle güvenilir gösterge bir hata uyarısı değil, CPU yükü ve FFmpeg günlükleridir.

Transcode günlüğündeki Cannot load libnvcuvid.so.1 ifadesi, kod çözücü kütüphanesinin container içine hiç mount edilmediği anlamına gelir. NVIDIA_DRIVER_CAPABILITIES=all ayarını yapın ve container'ı yeniden oluşturun; çünkü ortam değişkeni değişiklikleri, container'ın yeniden inşa edilmesi için docker compose up -d gerektirir, basit bir yeniden başlatma işlemi eski ayarları korur.

h264_nvenc kaynağından gelen No capable devices found hatası, FFmpeg'in kodlayıcı kütüphanesine ulaştığını ancak kullanılabilir bir kart bulamadığını gösterir. docker compose exec jellyfin nvidia-smi ayarını tekrar kontrol edin; bu durum genellikle cihaz rezervasyonunun kaldırıldığı veya container'ın eski bir dosyadan yeniden oluşturulduğu anlamına gelir.

GPU boşta iken yüksek CPU kullanımı, kod çözme tarafının sessizce başarısız olduğunu gösterir. Neslinizin kodunu çözemediği codec bileşenlerinin işaretini kaldırın, ardından aynı dosyayı tekrar oynatın ve -hwaccel cuda ifadesinin görünüp görünmediğini anlamak için FFmpeg günlüğünü tekrar okuyun.

1080p sorunsuz çalışırken 4K HDR içeriğin başlayıp takılması, kurulumun bozuk olduğu anlamına değil, ton eşleme (tone-mapping) sınırına ulaşıldığı anlamına gelir. Bunu nvidia-smi dmon -s u içindeki sm sütunundan doğrulayın, ardından ya istemcinin talep ettiği çözünürlüğü düşürün ya da 4K HDR dosyalarını doğrudan oynatabilen (direct play) istemcilerde tutun.

FAQ

NVENC özelliğini etkinleştirmeme rağmen Jellyfin neden hala CPU kullanıyor?

Dashboard altındaki Logs kısmından en güncel FFmpeg.Transcode günlüğünü kontrol edin. Eğer libx264 ifadesi görünüyorsa, hiçbir donanım yolu kullanılmamış demektir; bu genellikle container'ın GPU'yu göremediği anlamına gelir, doğrulamak için docker compose exec jellyfin nvidia-smi komutunu çalıştırın. Eğer h264_nvenc ifadesi görünmesine rağmen CPU hala meşgulse, kod çözme (decode) işlemi yazılımsal olarak gerçekleşiyordur. Bu durum, kartınızın desteklemediği bir codec bileşenini seçtiğinizde veya "Enable hardware encoding" seçeneği kapalı bırakıldığı için işlem hattının sadece yarısı GPU'ya taşındığında meydana gelir.

Docker Compose dosyasında hala runtime: nvidia satırına ihtiyacım var mı?

Eğer deploy.resources.reservations.devices bloğuna ve güncel bir Docker Compose sürümüne sahipseniz, hayır. Bu blok, modern cihaz isteği biçimidir ve aynı işi yapar. runtime: nvidia, nvidia-docker2 döneminden kalma eski bir yöntemdir; hala çalışır ve Jellyfin'in kendi yayınladığı örneklerde her ikisi de yer alır. İkisini de tutmak bir sorun yaratmaz. Sadece runtime: nvidia satırını tutuyorsanız, NVIDIA_VISIBLE_DEVICES=all satırını da tutmanız gerekir; çünkü bu yol, cihaz listesini ortam değişkenlerinden okur ve herhangi bir cihaz isteği içermez.

Bir NVIDIA GPU aynı anda kaç yayını transcode edebilir?

NVIDIA'nın yayınladığı matrise göre, Ağustos 2026 itibarıyla GeForce kartlar on iki eşzamanlı kodlama (encode) oturumu ile sınırlandırılmıştır; veri merkezi kartları ise sınırsız olarak listelenmiştir. Sizi kısıtlayan şey nadiren bu sınırdır. HDR'dan SDR'ye ton eşleme (tone mapping) işlemi NVENC üzerinde değil, shader çekirdekleri üzerinde çalışır; bu nedenle birkaç adet 4K HDR yayını, oturum sayacı dolmadan çok önce shader'ları tüketecektir. Kendi durumunuzu nvidia-smi dmon -s u ile ölçün ve oturum sayısına değil, sm sütununa odaklanın.

GPU'su olmayan bir VPS üzerinde donanım transcode kullanabilir miyim?

Hayır. Kodlama işlemi fiziksel NVENC bloğuna ihtiyaç duyar ve standart bir VPS üzerinde lspci -nn | grep -Ei "3d|display|vga" komutu, yalnızca hipervizörden gelen sanal bir görüntü bağdaştırıcısını gösterir. GPU içermeyen bir planda gerçekçi çözüm, transcode ihtiyacını ortadan kaldırmaktır: istemcinin kalite ayarını Auto konumuna getirin, tarayıcı yerine yerel bir istemci uygulaması kullanın ve görüntü tabanlı altyazı izlerini metne dönüştürerek video yeniden kodlamasını zorunlu kılmalarını engelleyin.

1080p transcode sorunsuz çalışırken 4K HDR neden takılıyor?

Bu iki iş yükü, kartın farklı bölümlerini kullanır. 1080p SDR transcode işlemi sadece kod çözme ve kodlama gerektirir; her ikisi de sabit işlevli donanım üzerinde çalışır. 4K HDR yayını ise shader çekirdekleri üzerinde çalışan bir CUDA filtresi olan ton eşlemeyi ve ölçeklendirilmesi gereken çok daha büyük bir kareyi işin içine katar. nvidia-smi dmon -s u çıktısında düşük enc ve dec değerlerinin yanında yüksek sm değeri görmeniz, sabit işlevli blokların boşta olduğunu ve genel amaçlı çekirdeklerin darboğaz yarattığını doğrular.