¿Cómo puedo saber si nvidia vdpau funciona para mplayer / vlc / totem?

8

Tengo una computadora portátil con una discreta tarjeta gráfica Nvidia .

¿Cómo puedo saber si mi reproductor de video, ya sea mplayer o vlc o totem, está usando nvidia VDPAU o no? Por ejemplo, ejecutando mplayer2 con el siguiente script, recibo este mensaje:

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

Pero tengo ese archivo en el 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 descubrir el códec de un archivo:

    #!/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

EDITAR: aparentemente no puede encontrar la biblioteca, ni siquiera cuando la llama a través de bumblebee's v3 optirun, aunque la biblioteca está allí:

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: intenté de nuevo con Ubuntu 12.04 y todavía no puedo hacer que funcione.

719016
fuente
Por ejemplo, para mplayer, recibo un error: [vdpau] al llamar a vdp_device_create_x11: 1
719016
Posiblemente relacionado: askubuntu.com/questions/100786/…
Bruno Pereira
Intenté nuevamente con Ubuntu 12.04 y todavía no puedo hacer que funcione.
719016

Respuestas:

11

Para responder a su pregunta y un poco sobre cómo habilitar la decodificación de gpu con mplayer o vlc.

Mplayer

La forma más fácil de ver si está obteniendo decodificación de gpu a través de vdpau es hacer lo que ha hecho: ejecutar mplayer desde una terminal. El cajero automático que has mostrado indica que no lo estás obteniendo.

Los requisitos para mplayer son:

mplayer o mplayer 2

nvidia-current o los controladores de nvidia directamente desde nvidia, el paquete nvidia-current funcionará.

libvdpau

Asegúrese de cumplir con lo anterior, luego ejecute el comando que hizo antes, aunque asegúrese de que el video sea h.264

Ex. de salida de terminal, líneas irrelevantes eliminadas

$ 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.

Si admite / obtiene vdpau a través de mplayer, puede configurar una vc=línea ~/.mplayer/configpara verificar automáticamente y usar el decodificador ffvdpau * apropiado para los códecs compatibles

Otra forma de verificar es usar vdpauinfo. El paquete solo está disponible en 12.04 pero se puede instalar en 11.10. Para hacerlo, vaya aquí, descargue e instale con gdebi, aunque software centerpuede instalarlo si desea probar

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

Para usar abrir una terminal y ejecutar vdpauinfo

Ex. de algunos de los resultados de vdpauinfo en una computadora portátil con soporte básico de 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

Si tiene hardware nvidia y no puede o no tiene soporte para vdpau, no se moleste con vlc que usa vaapi y es un truco para habilitar. Además, el rendimiento de vaapi en nvidia depende mucho del hardware. He habilitado aquí pero no lo uso, ffmpeg multi-thread es mejor con mi hardware en vlc.

Esto es solo lo básico para obtener vaapi y habilitar en vlc. Para obtener detalles específicos, debe buscar y preguntar cómo.

Los requisitos para vlc son:

vlc & ffmpeg libs compartidas que tienen soporte vaapi, 11.10 es bueno allí.

libva1, también instalar libva-x11-1 vainfo

vdpau-va-driver

Su mayor problema puede ser que las versiones de ubuntu de libva * y vdpau-va-driver no son lo suficientemente nuevas, necesitará obtener más consejos allí. In 12.04 they are adequate

Correr vainfoen una terminal debería decirte dónde estás parado

Ex. aquí 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 la decodificación de gpu en vlc a través de vaapi y ffmpeg, de dos maneras

Desde una terminal, no es necesario establecer preferencias

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

Para configurar en la interfaz gráfica de usuario de vlc, las publicaciones anteriores son incorrectas en cuanto a cómo, la forma real se muestra en la pantalla

Herramientas> Preferencias> Entrada / Códecs> marque la casilla, leer sobre "Omitir filtro de desbloqueo en bucle H.264" puede valer la pena

ingrese la descripción de la imagen aquí

Ex. desde la terminal de vlc decodificación de gpu a través de vaapi , utilizando el vpo de repo en 12.04 aunque 1.2 / 1.3 / 2.0 son versiones preferidas, un ppa para 2.0 debería estar disponible si se desea

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
fuente
Ni siquiera cuando lo llama a través del optirun de bumblebee, no puede encontrar la biblioteca, aunque está allí: optirun vdpauinfo display:: 0.0 screen: 0 Error al abrir el back-end de VDPAU libvdpau_nvidia.so: no se puede abrir el archivo de objeto compartido: No existe tal archivo o directorio Error creando un dispositivo VDPAU: 1 avilella @ magneto: ~ $ localizar 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
2
Si, como parece ahora, tiene un hardware de video híbrido / optimus, entonces deberá investigar cómo permitir la decodificación de gpu a través del chip nvidia. Yo nunca han poseído tal hardware, una pregunta específica a ese problema puede reunir una cierta atención de los que lo hacen y se enfrenta con suerte o 'fijo' este problema
Doug
esta pregunta tiene alguna información sobre híbrido, probablemente otros askubuntu.com/questions/100786/…
doug
2

Puede hacerlo verificando el uso de la CPU del proceso de reproducción, por ejemplo top. Si la descarga de vdpau está vigente, el uso de la CPU debe ser bajo. Por otro lado, la decodificación en la CPU dará como resultado una alta carga de CPU.

Egil
fuente
0

VLC: De forma predeterminada, utiliza la aceleración de hardware de la plataforma si está disponible. Puede verificar yendo a Herramientas-> Preferencias-> Video-> Salida de video acelerada (Superposición) y ver si está marcada.

Por lo tanto, debe verificar si los controladores para la tarjeta gráfica Nvidia están instalados correctamente, lo que puede hacer utilizando el Sistema-> Administración-> Controladores adicionales .

AIB
fuente
Para vlc, Tools-> Preferences-> Video-> Accelerated Video Output (Overlay) está marcado, pero se comporta como cuando lo ejecuto con mplayer, así que supongo que tampoco funciona.
719016
0

Para comprobar que reproduciría una película en HD, descargue un avance del sitio web del avance de la película Apple / iTunes. en VLC llegó a Herramientas-> Preferencias-> Video-> Salida de video acelerada (Superposición) y la deshabilitó. Abra el monitor del sistema y vaya a la pestaña "Procesos" y busque VLC en la lista.

Inicie el avance o la película que tiene y observe qué tan alto está usando la CPU el proceso VLC. Ahora pare la película en VLC y vaya a Herramientas-> Preferencias-> Video-> Salida de video acelerada (Superposición) y luego "Habilite" la aceleración de hardware y guarde sus configuraciones. Puede ser necesario cerrar y luego reiniciar VLC para que los cambios surtan efecto. Lo reiniciaría para estar seguro.

Una vez que se reinicia VLC con la superposición de hardware habilitada. Reproduzca la misma película / avance que antes y vea si los recursos de la CPU son inferiores en el panel Monitor del sistema.

Si son significativamente más bajos, eso significa que está funcionando.

en mi caso, VLC pasó de usar 60-70% de CPU a solo 20-30%. Noté que MPlayer usó incluso menos. pasó del 60-70% a menos del 5% con aceleración de hardware.

Sus resultados variarán, pero si la aceleración de hardware funciona correctamente, debería ver una disminución bastante significativa en el uso de la CPU en ese proceso específico en el Monitor del sistema.

Por lo que entiendo, la aceleración de hardware de video no es compatible con todos los formatos de video y depende de su GPU en cuanto a qué formatos puede decodificar.

Wolver1n3
fuente