Como posso saber se a nvidia vdpau está funcionando para mplayer / vlc / totem?

8

Eu tenho um laptop com uma placa de vídeo Nvidia discreta .

Como posso saber se meu player de vídeo, mplayer, vlc ou totem, está usando a nvidia VDPAU ou não? Por exemplo, executando mplayer2 com o script abaixo, recebo esta mensagem:

Failed to open VDPAU backend libvdpau_nvidia.so: cannot open shared object file: No such file or directory

Mas eu tenho esse arquivo no sistema:

-rw-r--r-- 1 root root 1800952 2011-11-23 07:39 /usr/lib/nvidia-current/vdpau/libvdpau_nvidia.so.290.10

Script para descobrir o codec de um arquivo:

    #!/bin/bash
#Script to automatically find out which codec a file is using and determine whether or not to use VDPAU.

#if no input display usage
if [ -z "$1" ]; then
    echo usage: $0 /path/to/file
    exit
fi

#remember to change this to the path of your mplayer binary
mplayerlocation=/usr/bin/
cd $mplayerlocation

#kinda a lame way to do it, but bring up mplayer and pipe the output to a temporary file, then read which codec the file is
./mplayer -identify -vo vdpau $1 > /tmp/VIDEOCODEC &
sleep 0.5
killall mplayer
videocodec=`cat /tmp/VIDEOCODEC | grep ID_VIDEO_CODEC | cut -c 16-25`
rm /tmp/VIDEOCODEC

echo "VIDEO CODEC: $videocodec"

if [ $videocodec = "ffh264" ]; then
    codec='h264'
    echo \n Playing $1 with $codec codec \n
    ./mplayer -vo vdpau -vc ffh264vdpau $1

    exit
fi

if [ $videocodec = "ffmpeg2" ]; then
    codec='MPEG2'
    echo \n Playing $1 with $codec codec \n
    ./mplayer -vo vdpau -vc ffmpeg12vdpau $1

    exit
fi

if [ $videocodec = "ffwmv3" ]; then
    codec='WMV3'
    echo \n Playing $1 with $codec codec \n
    ./mplayer -vo vdpau -vc ffwmv3vdpau $1

    exit
fi

#VC1 is not supported on most gpus
#uncomment if it is supported on your gpu
#if [ $videocodec = "ffvc1" ]; then
#   codec='VC1'
#   echo \n Playing $1 with $codec codec \n
#   ./mplayer -vo vdpau -vc ffvc1vdpau $1
#
#   exit
#fi

#if it isnt one of those it is not supported by vdpau
#so we should play without vdpau
./mplayer $1
exit

EDIT: aparentemente, ele não consegue encontrar a biblioteca, nem mesmo ao chamá-la através do opt3 da v3 do bumblebee, embora a biblioteca esteja lá:

optirun vdpauinfo 
display: :0.0   screen: 0
Failed to open VDPAU backend libvdpau_nvidia.so: cannot open shared object file: No such file or directory
Error creating VDPAU device: 1
avilella@magneto:~$ locate libvdpau_nvidia.so | xargs ls
/usr/lib/nvidia-current/vdpau/libvdpau_nvidia.so  /usr/lib/nvidia-current/vdpau/libvdpau_nvidia.so.1  /usr/lib/nvidia-current/vdpau/libvdpau_nvidia.so.290.10

EDIT2: Tentei novamente com o Ubuntu 12.04 e ainda não consigo fazê-lo funcionar.

719016
fonte
Por exemplo, para mplayer, recebo um erro: [vdpau] ao chamar vdp_device_create_x11: 1
719016
Possivelmente relacionado: askubuntu.com/questions/100786/…
Bruno Pereira
Tentei novamente com o Ubuntu 12.04 e ainda não consigo fazê-lo funcionar.
719016

Respostas:

11

Para responder à sua pergunta e um pouco sobre como habilitar a decodificação gpu com mplayer ou vlc.

Mplayer

A maneira mais fácil de verificar se você está obtendo decodificação de gpu através do vdpau é fazer o que você fez - execute o mplayer a partir de um terminal. O que você mostrou indica que não está conseguindo.

Os requisitos para o mplayer são:

mplayer ou mplayer 2

nvidia-current ou os drivers nvidia diretamente da nvidia, o pacote nvidia-current funcionará.

libvdpau

Verifique se você atendeu ao que foi dito acima e execute o comando que você fez antes, embora o vídeo seja h.264

Ex. da saída do terminal, linhas irrelevantes removidas

$ mplayer  -vo vdpau -vc ffh264vdpau /home/doug/Videos/sintel.mp4 
MPlayer2 UNKNOWN (C) 2000-2011 MPlayer Team
Playing /home/doug/Videos/sintel.mp4.
Detected file format: QuickTime/MPEG-4/Motion JPEG 2000 format (libavformat)
[lavf] stream 0: video (h264), -vid 0
[lavf] stream 1: audio (aac), -aid 0, -alang und
VIDEO:  [H264]  1280x546  24bpp  24.000 fps  1597.2 kbps (195.0 kbyte/s)
==========================================================================
Forced video codec: ffh264vdpau
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffh264vdpau] vfm: ffmpeg (FFmpeg H.264 (VDPAU))
VO: [vdpau] 1280x546 => 1280x546 H.264 VDPAU acceleration 
[vdpau] Got display refresh rate 59.991 Hz.

Se você suporta / obtém vdpau através do mplayer, pode configurar uma vc=linha ~/.mplayer/configpara verificação automática e usar o decodificador ffvdpau * apropriado para codecs suportados

Outra maneira de verificar é usar vdpauinfo. O pacote está disponível apenas na 12.04, mas pode ser instalado na 11.10. Para fazer isso, acesse aqui, faça o download e instale com gdebi, embora software centerpossa ser instalado para você se você quiser tentar

http://packages.ubuntu.com/precise/vdpauinfo

Para usar, abra um terminal e execute vdpauinfo

Ex. de parte da saída do vdpauinfo em um laptop com suporte básico ao vdpau

$ vdpauinfo
display: :0   screen: 0
API version: 1
Information string: NVIDIA VDPAU Driver Shared Library  280.13  Wed Jul 27 17:18:15 PDT 2011

Video surface:

name   width height types
 -------------------------------------------
420     4096  4096  NV12 YV12 
422     4096  4096  UYVY YUYV 

Decoder capabilities:

name               level macbs width height
-------------------------------------------
MPEG1                 0  8192  2048  2048
MPEG2_SIMPLE          3  8192  2048  2048
MPEG2_MAIN            3  8192  2048  2048
H264_MAIN            41  8192  2048  2048
H264_HIGH            41  8192  2048  2048
VC1_SIMPLE            1  8190  2048  2048
VC1_MAIN              2  8190  2048  2048
VC1_ADVANCED          4  8190  2048  2048

Vlc

Se você possui hardware nvidia e não pode ou não tem suporte a vdpau, não se preocupe com o vlc, que usa o vaapi & é mais complicado de ativar. Além disso, o desempenho do vaapi na nvidia depende muito do hardware. Eu habilitei aqui, mas não use, o ffmpeg multi-thread é melhor com o meu hardware no vlc.

Este é apenas o básico para obter vaapi e ativar no vlc. Para detalhes, você precisa pesquisar e / ou perguntar como.

Os requisitos para o vlc são:

As bibliotecas compartilhadas vlc & ffmpeg que têm suporte a vaapi, 11.10 são boas lá.

libva1, também instala libva-x11-1 vainfo

vdpau-va-driver

Seu maior problema pode ser que as versões do libva * e vdpau-va-driver do ubuntu não são novas o suficiente, você precisará obter mais conselhos lá. In 12.04 they are adequate

A operação vainfoem um terminal deve indicar onde você está

Ex. aqui de vainfo

$ vainfo
libva: libva version 0.32.0
Xlib:  extension "XFree86-DRI" missing on display ":0.0".
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/dri/nvidia_drv_video.so
libva: va_openDriver() returns 0
vainfo: VA API version: 0.32
vainfo: Driver version: Splitted-Desktop Systems VDPAU backend for VA-API - 0.7.3
vainfo: Supported profile and entrypoints
  VAProfileMPEG2Simple            : VAEntrypointVLD
  VAProfileMPEG2Main              : VAEntrypointVLD
  VAProfileH264Main               : VAEntrypointVLD
  VAProfileH264High               : VAEntrypointVLD
  VAProfileVC1Simple              : VAEntrypointVLD
  VAProfileVC1Main                : VAEntrypointVLD
  VAProfileVC1Advanced            : VAEntrypointVLD

Para habilitar a decodificação gpu no vlc thru vaapi e ffmpeg, duas maneiras

Em um terminal, não há necessidade de definir preferências

vlc --ffmpeg-hw /path/to/supported/video/name

Para definir na GUI do vlc, os posts anteriores estão incorretos sobre como, a maneira real é mostrada na tela

Ferramentas> Preferências> Entrada / codecs> marque a caixa, ler "Ignorar filtro de desbloqueio em loop H.264" pode valer a pena

insira a descrição da imagem aqui

Ex. do terminal da decodificação vlc gpu através do vaapi , usando o repo vlc em 12.04, embora as versões 1.2 / 1.3 / 2.0 sejam as preferidas, um ppa para 2.0 deve estar disponível, se desejado

vlc --ffmpeg-hw '/home/doug/Videos/sintel.mp4' 
VLC media player 1.1.13 The Luggage (revision exported)
clipped .....

libva: libva version 0.32.0
Xlib:  extension "XFree86-DRI" missing on display ":1".
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/dri/nvidia_drv_video.so
libva: va_openDriver() returns 0
[0x863468c] avcodec decoder: Using VA API version 0.32 for hardware decoding.
doug
fonte
Nem mesmo ao chamá-lo através do optirun do bumblebee, não é possível encontrar a biblioteca, embora ela esteja lá: optirun display vdpauinfo:: 0.0 screen: 0 Falha ao abrir o back-end do VDPAU libvdpau_nvidia.so: não é possível abrir o arquivo de objeto compartilhado: nenhum arquivo ou diretório criando dispositivo VDPAU: 1 avilella @ magneto: ~ $ localize libvdpau_nvidia.so | xargs ls /usr/lib/nvidia-current/vdpau/libvdpau_nvidia.so /usr/lib/nvidia-current/vdpau/libvdpau_nvidia.so.1 /usr/lib/nvidia-current/vdpau/libvdpau_nvidia.so.290.10
7190
2
Se, como agora aparece, você possui um hardware de vídeo híbrido / otimizado, precisará pesquisar como permitir a decodificação de gpu através do chip nvidia. Eu nunca ter possuído tal hardware, uma pergunta específica para esse problema pode angariar alguma atenção daqueles que fazer e estão enfrentando ou esperamos 'fixo' este problema
Doug
esta pergunta tem algumas informações sobre híbrido, provavelmente outros askubuntu.com/questions/100786/…
doug
2

Você pode fazer isso verificando o uso da CPU do processo de reprodução, por exemplo top. Se o descarregamento do vdpau estiver em vigor, o uso da CPU deve ser baixo. Por outro lado, a decodificação na CPU resultará em alta carga de CPU.

Egil
fonte
0

VLC, Por padrão, usa a aceleração de hardware da plataforma, se estiver disponível. Você pode verificar acessando Ferramentas -> Preferências -> Vídeo -> Saída de Vídeo Acelerada (Overlay) e ver se está marcada.

Portanto, você deve verificar se os drivers da placa de vídeo Nvidia estão instalados corretamente, o que pode ser feito usando o Sistema-> Administração-> Drivers Adicionais .

AIB
fonte
Para o vlc, Ferramentas-> Preferências-> Vídeo-> Saída de Vídeo Acelerada (Overlay) está marcada, mas se comporta como quando eu a executo com o mplayer, então acho que também não está funcionando.
719016
0

Para verificar se eu reproduzia um filme em HD, faça o download de um trailer no site de trailers da Apple / iTunes. no VLC, acesse Ferramentas-> Preferências-> Vídeo-> Saída de vídeo acelerada (Overlay) e desative-a. Abra o monitor do sistema e vá para a guia "Processos" e encontre o VLC na lista.

Inicie o trailer ou o filme que você possui e veja como o processo VLC está usando a CPU. Agora pare o filme no VLC e vá em Ferramentas-> Preferências-> Vídeo-> Saída de vídeo acelerada (sobreposição) e depois em "Ativar" a aceleração do hardware e salve as configurações. Pode ser necessário fechar e reiniciar o VLC para que as alterações entrem em vigor. Eu o reiniciaria para ser seguro.

Depois que o VLC é reiniciado com a sobreposição de hardware ativada. Reproduza o mesmo filme / trailer de antes e veja se os Recursos da CPU estão mais baixos no painel Monitor do sistema.

Se eles são significativamente menores, significa que está funcionando.

no meu caso, o VLC passou de 60-70% da CPU para apenas 20-30%. Notei que o MPlayer usava menos ainda. passou de 60-70% para menos de 5% com a aceleração por hardware.

Seus resultados variarão, mas se a aceleração de hardware estiver funcionando corretamente, você verá uma queda bastante significativa no uso da CPU nesse processo específico no Monitor do sistema.

Pelo que entendi, a aceleração de hardware de vídeo não é compatível com todos os formatos de vídeo e depende da sua GPU na medida em que formatos pode decodificar.

Wolver1n3
fonte