Ir para o conteúdo

Aceleração de hardware

O Jellyfin suporta aceleração de hardware (HWA) da codificação / decodificação de vídeo usando o FFMpeg. O FFMpeg e o Jellyfin podem suportar várias implementações de aceleração de hardware, como Intel Quicksync (QSV), AMD AMF, nVidia NVENC / NVDEC, OpenMax OMX e MediaCodec por meio de APIs de aceleração de vídeo.

O VAAPI é uma API de aceleração de vídeo que usa libva para interagir com controladores locais para fornecer HWA. O QSV usa uma versão modificada (bifurcada) do VAAPI e a interface com a libmfx e seus drivers proprietários (lista de processadores compatíveis com QSV).

 Aceleraçao do hardware Aceleração de hardware

Aceleração de HW recomendada para SO LinuxQSV, NVENC, VAAPI WindowsQSV, NVENC, AMF, VAAPIMacOSNone (VideoToolbox Coming Soon) AndroidMediaCodec, OMXRPiOMX

Comparação de placas gráficas usando HWA

NVIDIA usando a lista oficial ffmpeg. Nem todos os cartões foram testados. Esses drivers são recomendados para Linux e Windows. Aqui está a lista oficial de placas gráficas NVIDIA para codecs suportados. Exemplo de Ubuntu trabalhando com NVENC. O H264 de 10 bits não suporta a aceleração NVIDIA.

Lista de codecs suportados pelo VAAPI.

O suporte ao AMF Linux ainda não é oficial e as placas AMD GFX devem usar o VAAPI no Linux.

Zen é apenas a CPU. Não há aceleração de hardware para qualquer forma de decodificação / codificação de vídeo. Você precisará de uma APU ou dGPU para acelerar o hardware.

Benchmarks Intel QSV no Linux.

No Windows, você pode usar as bibliotecas DXVA2 / D3D11VA para decodificação e a biblioteca libmfx para codificação.

O CentOS pode exigir drivers adicionais para o QSV.

Aqui estão informações adicionais para saber mais.

Ativando a aceleração de hardware

As opções de aceleração de hardware podem ser encontradas no Painel do administrador na seção Transcodificação . Selecione uma opção de aceleração de hardware válida no menu suspenso, indique um dispositivo, se aplicável, e marque Ativar criptografia de hardware para ativar a criptografia e a decodificação, se o seu hardware suportar.

A aceleração de hardware está imediatamente disponível para reprodução de mídia. Não há necessidade de reiniciar o servidor.

Configuração

Cada tipo de aceleração de hardware, bem como cada tipo de instalação do Jellyfin, requer diferentes opções de configuração antes de poder ser usado. É sempre melhor consultar a documentação do FFMpeg sobre o tipo de aceleração que você escolher para obter as informações mais recentes.

Aceleração no Docker

Para usar a aceleração de hardware no Docker, os dispositivos devem ser movidos para o contêiner. Para ver quais dispositivos de vídeo estão disponíveis, você pode executar o sudo lshw -c video ou vainfo em sua máquina.

Nota

Atualmente, as GPUs NVIDIA não são suportadas no Docker-Compose.

Você pode usar o Docker Run para iniciar o servidor com um comando como o seguinte.

docker execute -d --volume / caminho / para / config: / config --volume / caminho / para / cache: / cache --volume / caminho / para / mídia: / media ~ -user 1000: 1000 --net = host --restart = a menos que pare --dev / dev / dri / renderD128: / dev / dri / renderD128 --dev / dev / dri / card0: / dev / dri / card0 ~ jellyfin / jellyfin

Como alternativa, você pode usar o docker-compose com um arquivo de configuração para não precisar executar um comando longo toda vez que reiniciar o servidor.

versão: "3" serviços: jellyfin: imagem: jellyfin / jellyfin usuário: 1000: 1000 network_mode: "host" volumes: - / caminho / para / config: / config - / caminho / cache: / cache - / caminho / para / media: / dispositivos de mídia: # dispositivos VAAPI - / dev / dri / renderD128: / dev / dri / renderD128 - / dev / dri / card0: / dev / dri / card0 # RPi 4 - / dev / vchiq: / dev / qchiq

Debian Docker Nvidia

Para alcançar a aceleração de hardware usando a janela de encaixe, são necessárias várias etapas.

Pré-requisitos:

https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)

GNU / Linux x86_64 com a versão do kernel; 3.10Docker; = 1.12 GPU NVIDIA com arquitetura; Drivers Fermi (2.1) NVIDIA ~ = 361.93 (não testado nas versões anteriores)

Confirme se sua GPU aparece com este comando.

ICSP | grep VGA

Atualize seu host para que não haja chance de software desatualizado causar problemas.

apt-get update && apt-get dist-upgrade -y

Instale a ondulação a ser usada para baixar os arquivos necessários.

apt-get install curl

Edite o sources.list em /etc/apt/sources.list e adicione contribuições não gratuitas a cada fonte, conforme necessário.

deb http://ftp.ch.debian.org/debian/ stretch main

A linha acima deve ser modificada para corresponder à seguinte linha como exemplo.

deb http://ftp.ch.debian.org/debian/ contribua com o contrib.

Faça o download e adicione as fontes do contêiner da Nvidia dock.

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key adddistribution = $ (. / etc / os-release; echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

Atualize sua lista de pacotes novamente para baixar o software mais recente disponível no novo repositório.

atualização apt-get

Instale os linux-headers e execute o seguinte comando.

apt-get install linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)

Como alternativa, execute este comando se você estiver na corrida pela compatibilidade.

apt-get install -t stretch-backports linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)

Instale a Nvidia docker2 a partir do repositório.

apt-get install nvidia-docker2

Quando solicitado a optar por manter ou instalar o pacote de manutenção, digite y para instalar a liberação de manutenção.

Após a instalação, você pode adicionar a nvidia como o tempo de execução padrão: editando /etc/docker/daemon.json assim:

<"Default Runtime": "nvidia", "runtimes": { "nvidia": { "camino": "nvidia-contenedor-tiempo de ejecución", "runtimeArgs": [] } }}

Reinicie os serviços dos estivadores que estão trabalhando atualmente.

janela de encaixe sudo pkill -SIGHUP

Instale drivers e dependências da nvidia.

apt-get install -t stretch-backports nvidia-driver libnvcuvid1 libnvidia-encode1 libcuda1 nvidia-smi

Por favor, reinicie seu host para aplicar todas as alterações.

reinicie agora

Valide se o seu driver e acoplador estão configurados corretamente com este test drive.

nvidia-smidocker run --gpus 0 nvidia / cuda: 9.0-base nvidia-smi

Valide o acesso aos recursos necessários do host e do estivador.

ldconfig -p | grep cuvidldconfig -p | grep libnvidia-encode.so.1

Inicie seu contêiner adicionando esses parâmetros de ambiente.

-e "NVIDIA_DRIVER_CAPABILITIES = all" -e NVIDIA_VISIBLE_DEVICES = all --runtime = nvidia --gpus all 

Um comando de execução completo ficaria assim.

docker run -d --name = jellyfin -e NVIDIA_DRIVER_CAPABILITIES = all -e NVIDIA_VISIBLE_DEVICES = all --gpus all --runtime = nvidia -p 8096: 8096 -p 8920: 8920 -v / config: / config -v / media: / media -v / cache: / cache --restore, a menos que seja parado ~ jellyfin / jellyfin

Existem algumas etapas especiais ao executar com a próxima opção.

--user 1000: 1000

Pode ser necessário adicionar esse usuário ao grupo de vídeos.

usermod -aG video user

Depois que o contêiner é iniciado, você pode validar novamente o acesso aos recursos do host.

docker exec -it jellyfin ldconfig -p | exec do cuviddocker do grep - jellyfin ldconfig -p | grep libnvidia-encode.so.1

Agora vá para as configurações de reprodução do Jellyfin, ative a Nvidia NVENC e selecione os codecs de destino, dependendo do suporte da sua GPU para reproduzir qualquer arquivo que precise de transcodificação. Alterar a taxa de bits é uma boa maneira de testar isso.

Revise os logs de transcodificação para garantir que tudo esteja funcionando corretamente.

Fluxo #0: 0 -----; #0: 0 (h264 (h264_cuvid) -------; h264 (h264_nvenc)) Fluxo #0: 2 -------; #0: 1 (ac3 (nativo) -------; aac (nativo))<-pre>

Configurando a aceleração VAAPI no Debian / Ubuntu a partir de pacotes .deb

A configuração VAAPI no Debian / Ubuntu requer alguma configuração adicional para garantir que as permissões estejam corretas.

Para verificar as informações da VAAPI no seu sistema, instale e execute o vainfo na linha de comandos.

  1. Configure o VAAPI para o seu sistema seguindo a documentação relevante. Verifique se agora existe um dispositivo de renderização em / dev / dri e observe as permissões e o grupo disponíveis para gravação, neste caso renderize: $ ls -l / dev / dritotal 0drwxr-xr-x 2 root 100 Apr 13 16:37 by-pathcrw-rw ---- 1 root video 226, 0 Apr 13 16:37 card0crw-rw ---- 1 root video 226, 1 abr 13 16:37 card1crw-rw ---- 1 renderização raiz 226, 128 13 de abril 16:37 renderD128 Nota Em algumas versões, o grupo pode ser um vídeo em vez de um render.
  2. Adicione o usuário do serviço Jellyfin ao grupo anterior para permitir o acesso do processo Jellyfin FFMpeg ao dispositivo e reinicie o Jellyfin.
sudo usermod -aG render jellyfinsudo systemctl restart jellyfin
  1. Defina a aceleração VAAPI na página "Transcodificação" do painel de administração. Digite o dispositivo / dev / dri / renderD128 acima como o valor do dispositivo da API VA.
  2. Assista a um filme e verifique se a transcodificação está acontecendo, visualizando os logs de ffmpeg-transcode - *. Txt em / var / log / jellyfin e usando radeontop ou ferramentas semelhantes.

Contêiner LXC ou LXD

Isso foi testado com o LXC 3.0 e pode ou não funcionar com versões anteriores.

Siga as etapas acima para adicionar o usuário jellyfin ao grupo de vídeo ou renderização, dependendo das circunstâncias.

  1. Adicione sua GPU ao contêiner.
Adicionar dispositivo de configuração $ lxc  gpu gpu gid = 
  1. Verifique se você tem o cartão dentro do contêiner:
$ jellyfin exec lxc - ls -l / dev / dritotal 0crw-rw ---- 1 vídeo raiz 226, jun 4 02:13 card0crw-rw ---- 1 vídeo raiz 226, jun 4 02:13 controlD64crw -rw ---- 1 vídeo raiz 226, 128 jun 4 02:13 renderD128
  1. Configure o Jellyfin para usar a aceleração de vídeo e aponte-o para o dispositivo correto se a opção padrão estiver errada.
  2. Tente reproduzir um vídeo que exija transcodificação e execute o seguinte, você deve ser atingido.
$ ps aux | grep ffmpeg | grep accel
  1. Você também pode tentar reproduzir um vídeo que exija transcodificação e, se ele for reproduzido, você será bom.

Recursos úteis:

Raspberry Pi 3 e 4

  1. Adicione o usuário do serviço Jellyfin ao grupo de vídeos para permitir que o processo FFMpeg do Jellyfin acesse o codificador e reinicie o Jellyfin.sudo usermod -aG video jellyfinsudo systemctl restart jellyfinNotaSe você estiver usando um Raspberry Pi 4, talvez seja necessário executar o sudo rpi-update para atualizações de kernel e firmware.
  2. Escolha OpenMAX OMX como aceleração de hardware na guia Transcodificação do Painel do servidor.
  3. Altere a quantidade de memória alocada para a GPU. A GPU não pode manipular decodificação e codificação acelerada simultaneamente sudo nano /boot/config.txt Para RPi4, adicione a linha gpu_mem = 320 Veja mais aqui Para RPi3, adicione a linha gpu_mem = 256 Você pode definir qualquer valor, mas 320 é a quantidade Recomendado para 4K HEVC. Verifique a divisão entre a memória da CPU e da GPU: vcgencmd get_mem arm && vcgencmd get_mem gpu Monitore a temperatura e a velocidade do clock da CPU: vcgencmd measure_temp && vcgencmd measure_clock arm
Nota

Atualmente, o RPi4 não suporta decodificação HWA, apenas codificação H.264 HWA. O resfriamento ativo é necessário, o resfriamento passivo é insuficiente para transcodificação. Nos testes RPi3, a transcodificação não funcionou rápido o suficiente para funcionar em tempo real porque o vídeo estava sendo redimensionado.

Verificando transcodificações

Para verificar se você está usando as bibliotecas apropriadas, execute este comando no seu registro de transcodificação. Isso pode ser encontrado em Painel do administrador> Logs e em / var / log / jellyfin, se for através do repositório.

grep -A2 "Mapeamento de fluxo: /var/log/jellyfin/ffmpeg-transcode-85a68972-7129-474c-9c5d-2d9949021b44.txt

Isso produziu os seguintes resultados.

Mapeamento atual: #0 atual: 0 ----; #0: 0 (hevc (nativo) ----; h264 (h264_omx)) Atual #0: 1 ----; #0: 1 (aac (nativo) ----; mp3 (libmp3lame))

O fluxo #0: 0 usou o software para decodificar o HEVC e o HWA para codificar.

O fluxo #0: 1 teve os mesmos resultados. A decodificação é mais fácil do que a codificação, portanto esses geralmente são bons resultados. A decodificação HWA é um trabalho em andamento.

pt_BRPortuguês do Brasil
es_ESEspañol zh_CN简体中文 hi_INहिन्दी arالعربية bn_BDবাংলা ru_RUРусский ja日本語 de_DEDeutsch fr_FRFrançais it_ITItaliano pt_BRPortuguês do Brasil