Come posso sapere se nvidia vdpau funziona per mplayer / vlc / totem?


8

Ho un laptop con una scheda grafica Nvidia discreta .

Come faccio a sapere se il mio lettore video, sia esso mplayer, vlc o totem, utilizza nvidia VDPAU o no? Ad esempio, eseguendo mplayer2 con lo script seguente, ricevo questo messaggio:

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

Ma ho un tale file nel sistema:

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

Script per scoprire il codec per un file:

    #!/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: apparentemente non riesce a trovare la libreria, nemmeno quando la si chiama tramite optirun v3 di bumblebee, sebbene la libreria sia 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: ho provato di nuovo con Ubuntu 12.04 e non riesco ancora a farlo funzionare.


Ad esempio, per mplayer, ho un: [VDPAU] Errore al momento della chiamata vdp_device_create_x11 1
719 mila sedici


Ho provato di nuovo con Ubuntu 12.04 e non riesco ancora a farlo funzionare.
719016,

Risposte:


11

Per rispondere alla tua domanda e un po 'su come abilitare la decodifica gpu con mplayer o vlc.

Mplayer

Il modo più semplice per vedere se stai ottenendo la decodifica gpu tramite vdpau è fare quello che hai fatto: esegui mplayer da un terminale. Atm quello che hai mostrato indica che non lo stai ricevendo.

I requisiti per mplayer sono:

mplayer o mplayer 2

nvidia-current o i driver nvidia direttamente da nvidia, lo farà il pacchetto nvidia-current.

libvdpau

Assicurati di aver soddisfatto quanto sopra, quindi esegui il comando che hai fatto prima, anche se assicurati che il video sia h.264

Ex. di uscita terminale, rimosse le linee irrilevanti

$ 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 supporti / ottieni vdpau tramite mplayer, puoi impostare una vc=riga ~/.mplayer/configper il controllo automatico e utilizzare il decodificatore ffvdpau * appropriato per i codec supportati

Un altro modo per verificare è usare vdpauinfo. Il pacchetto è disponibile solo in 12.04 ma può essere installato in 11.10. Per fare ciò, vai qui, scarica e installa con gdebi, sebbene software centerpossa installarti se vuoi provare

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

Per usare aprire un terminale ed eseguire vdpauinfo

Ex. di alcuni degli output di vdpauinfo su un laptop con supporto vdpau di base

$ 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 hai l'hardware nvidia e non puoi o non hai il supporto vdpau, non preoccuparti di vlc che usa vaapi ed è più semplice da abilitare. Inoltre, le prestazioni di vaapi su nvidia dipendono molto dall'hardware. Ho abilitato qui ma non uso, il multi-thread di ffmpeg è migliore con il mio hardware in vlc.

Queste sono solo le basi per ottenere vaapi e abilitare in vlc. Per le specifiche dovresti cercare e o chiedere come.

I requisiti per vlc sono:

vlc & ffmpeg lib lib condivise che hanno il supporto vaapi, 11.10 è buono lì.

libva1, installa anche libva-x11-1 vainfo

vdpau-va-driver

Il tuo problema più grande potrebbe essere che le versioni di libva * e vdpau-va-driver di Ubuntu non sono abbastanza nuove, dovrai avere ulteriori consigli lì. In 12.04 they are adequate

Correre vainfoin un terminale dovrebbe dirti dove ti trovi

Ex. qui di 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

Per abilitare la decodifica gpu in vlc tramite vaapi e ffmpeg, due modi

Da un terminale, non è necessario impostare le preferenze

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

Per impostare nella GUI di VLC, i post precedenti non sono corretti su come, il modo effettivo è mostrato sullo schermo

Strumenti> Preferenze> Input / Codec> selezionare la casella, la lettura di "Salta il filtro di deblock in-loop H.264" potrebbe rivelarsi utile

inserisci qui la descrizione dell'immagine

Ex. dal terminale di vlc gpu che decodifica attraverso vaapi , usando repo vlc in 12.04 anche se 1.2 / 1.3 / 2.0 sono versioni preferite, un ppa per 2.0 dovrebbe essere disponibile se lo si desidera

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.

Nemmeno quando lo si chiama tramite optirun di bumblebee, non è possibile trovare la libreria, sebbene sia presente: optirun vdpauinfo display:: 0.0 screen: 0 Impossibile aprire il backend VDPAU libvdpau_nvidia.so: impossibile aprire il file oggetto condiviso: nessun file o directory errore creazione del dispositivo VDPAU: 1 avilella @ magneto: ~ $ individuare 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
719.016

2
Se, come appare ora, hai un hardware video ibrido / optimus, dovrai cercare come consentire la decodifica della gpu attraverso il chip nvidia. Io stesso non ho mai posseduto un tale hardware, una domanda specifica a quel problema potrebbe attirare l'attenzione di coloro che affrontano o sperano di "risolvere" questo problema
Doug,

questa domanda ha alcune informazioni su ibrido, probabilmente altri askubuntu.com/questions/100786/…
doug

2

Puoi farlo controllando, ad esempio, l'utilizzo della CPU nel processo di riproduzione top. Se l'offload di vdpau è attivo, l'utilizzo della cpu dovrebbe essere basso. D'altra parte, la decodifica sulla cpu comporterà un carico elevato della cpu.


0

VLC, per impostazione predefinita utilizza l'accelerazione hardware della piattaforma, se disponibile. Puoi verificare andando su Strumenti-> Preferenze-> Video-> Uscita video accelerata (Overlay) e vedere se è spuntata.

Quindi dovresti controllare se i driver per la scheda grafica Nvidia sono installati correttamente, cosa che puoi fare usando Sistema-> Amministrazione-> Driver aggiuntivi .


Per vlc, Strumenti-> Preferenze-> Video-> Uscita video accelerata (Overlay) è spuntato, ma si comporta come quando lo eseguo con mplayer, quindi immagino che non funzioni neanche.
719016,

0

Per verificare se vorrei riprodurre un film in HD, scarica un trailer dal sito Web del trailer di Apple / iTunes. su VLC è arrivato a Strumenti-> Preferenze-> Video-> Uscita video accelerata (overlay) e disabilitalo. Apri il monitor di sistema e vai alla scheda "Processi" e trova VLC nell'elenco.

Avvia il trailer o il film che hai e guarda quanto in alto il processo VLC utilizza la CPU. Ora ferma il film su VLC e vai su Strumenti-> Preferenze-> Video-> Uscita video accelerata (Overlay), quindi "Abilita" l'accelerazione hardware e salva le tue impostazioni. Potrebbe essere necessario chiudere e riavviare VLC per rendere effettive le modifiche. Lo riavvierei per sicurezza.

Una volta riavviato VLC con l'overlay hardware abilitato. Riproduci lo stesso film / trailer di prima e verifica se le risorse della CPU sono inferiori sul pannello Monitor di sistema.

Se sono significativamente più bassi significa che sta funzionando.

nel mio caso VLC è passato dall'uso del 60-70% di CPU a solo il 20-30%. Ho notato che MPlayer ne usava ancora meno. è passato dal 60-70% a meno del 5% con l'accelerazione hardware.

I risultati varieranno, ma se l'accelerazione hardware funziona correttamente dovresti vedere un declino piuttosto significativo sull'utilizzo della CPU in quel processo specifico sotto il Monitor di sistema.

Da quanto ho capito, l'accelerazione dell'hardware video non è compatibile con tutti i formati video e dipende dalla GPU per quanto riguarda i formati che può decodificare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.