como obter aceleração de hardware vdpau usando ffmpeg no Ubuntu?

2

Estou desenvolvendo um player multimídia usando o ffmpeg. Eu estou tentando arduamente para obter aceleração de hardware através do ffmpeg usando o acelerador de hardware vdpau. Eu não tive sucesso até agora. Abaixo, mencionei detalhes das especificações do meu sistema, software e o erro da ferramenta de linha de comando ffmpeg. Por favor, sinta-se livre para comentar se precisar de mais informações. Qualquer sugestão rápida será muito útil.

Here is my system hardware specification:
Processor: Intel® Core™ i5-4570 CPU @ 3.20GHz × 4 
Graphis: GeForce GTX 750 Ti/PCIe/SSE2
Os: Ubuntu-14.04 64bit
Memory: 8GiB

Software: ffmpeg-2.8.1

outros registros úteis: 1. Encontre enable hw accelerator no ffmpeg

./ ffmpeg -hwaccels

ffmpeg version 2.8.1 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  configuration: --enable-shared
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
Hardware acceleration methods:
vdpau

2. Hw accel decoding usando ffmpeg

./ ffmpeg -hwaccel vdpau -i /tmp/test.mp4 /tmp/test.ts

Registro de erros:

libva info: VA-API version 0.35.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so
libva info: va_openDriver() returns -1

3.Command: lspci -vnn | grep -i VGA -A 12

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM107 [GeForce GTX 750 Ti] [10de:1380] (rev a2) (prog-if 00 [VGA controller])
    Subsystem: ZOTAC International (MCO) Ltd. Device [19da:288a]
    Flags: bus master, fast devsel, latency 0, IRQ 48
    Memory at f6000000 (32-bit, non-prefetchable) [size=16M]
    Memory at e0000000 (64-bit, prefetchable) [size=256M]
    Memory at f0000000 (64-bit, prefetchable) [size=32M]
    I/O ports at e000 [size=128]
    [virtual] Expansion ROM at f7000000 [disabled] [size=512K]
    Capabilities: 
    Kernel driver in use: nvidia

01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:0fbc] (rev a1)
    Subsystem: ZOTAC International (MCO) Ltd. Device [19da:288a]
    
por Raju 26.05.2016 / 06:29

1 resposta

0

De acordo com a documentação aqui,

Para permitir isso, você normalmente precisa do pacote de desenvolvimento libvdpau em sua distribuição e de uma placa gráfica compatível.

Observe que o VDPAU não pode ser usado para decodificar quadros na memória, os quadros compactados são enviados pelo libavcodec para o dispositivo GPU suportado pelo VDPAU e, em seguida, a imagem decodificada pode ser acessada usando a API VDPAU. Isso não é feito automaticamente pelo FFmpeg, mas deve ser feito no nível do aplicativo (verifique, por exemplo, o arquivo ffmpeg_vdpau.c usado pelo ffmpeg.c). Além disso, observe que com essa API não é possível mover o quadro decodificado de volta para a RAM, por exemplo, caso você precise codificar novamente o quadro decodificado (por exemplo, ao fazer a transcodificação em um servidor).

Diversos decodificadores são suportados atualmente pela API VDPAU no libavcodec, em particular H.264, MPEG-1/2/4 e VC-1.

A saída de mediainfo videofile deve esclarecer se o codec em uso é suportado, no entanto, a tabela FFMpeg IMplementations na documentação mencionada acima indica que o VDPAU está obsoleto por motivos técnicos e não deve ser usado.

Não tenho mais nada a acrescentar, mas espero que esta informação seja útil do mesmo modo.

    
por Elder Geek 03.05.2017 / 17:20