我怎么知道nvidia vdpau是否适用于mplayer / vlc / totem?


8

我有一台配有独立Nvidia显卡的笔记本电脑。

我怎么知道我的视频播放器是mplayer还是vlc或图腾是否使用nvidia VDPAU?例如,使用下面的脚本运行mplayer2,我得到以下消息:

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

但是我的系统中确实有这样的文件:

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

找出文件编解码器的脚本:

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

编辑:显然,它找不到库,即使通过大黄蜂的v3 optirun调用它也没有,尽管库在那儿:

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:我再次尝试使用Ubuntu 12.04,但仍然无法正常工作。


例如,对于mplayer,我得到一个:[vdpau]调用vdp_device_create_x11时出错:1
719016 2011年


我再次尝试使用Ubuntu 12.04,但仍然无法正常工作。
719016 2012年

Answers:


11

为了解决您的问题以及有关通过mplayer或vlc启用gpu解码的知识。

播放器

查看是否通过vdpau获得gpu解码的最简单方法是执行已完成的操作-从终端运行mplayer。您所显示的Atm表示您没有收到。

mplayer的条件是:

mplayer 要么 mplayer 2

nvidia-current 或直接来自nvidia的nvidia驱动程序,nvidia-current软件包即可。

libvdpau

确保您满足上述条件,然后运行之前执行的命令,尽管请确保视频为h.264

例如 终端输出,删除不相关的行

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

如果确实通过mplayer支持/获取vdpau,则可以设置vc=一行~/.mplayer/config以自动检查并为支持的编解码器使用适当的ffvdpau *解码器

检查的另一种方法是使用vdpauinfo。该软件包仅在12.04中可用,但可以在11.10中安装。为此,请在此处下载并安装gdebi,但software center如果您想尝试可以安装。

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

使用打开终端并运行 vdpauinfo

例如 基本vdpau支持的笔记本电脑上vdpauinfo的一些输出

$ 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

如果您具有nvidia硬件并且不能或不具有vdpau支持,那么就不必理会使用vaapi&的vlc了。此外,vaapi在nvidia上的性能在很大程度上取决于硬件。我已经在这里启用,但不使用,ffmpeg多线程与vlc中的硬件比较好。

这只是在vlc中获取vaapi和启用的基础。有关详细信息,您需要搜索&或询问如何。

vlc的要求是:

vlc和ffmpeg支持vaapi的共享库,11.10很好。

libva1,同时安装 libva-x11-1 vainfo

vdpau-va-driver

您最大的问题可能是ubuntu的libva *和vdpau-va-driver版本不够新,您需要在那里获取更多建议。 In 12.04 they are adequate

vainfo在码头上跑步应该告诉你你站在哪里

例如 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

要通过vapi和ffmpeg在vlc中启用gpu解码,有两种方法

从终端,无需设置首选项

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

要在vlc的gui中进行设置,先前的帖子在屏幕上如何显示实际方式是不正确的

工具>首选项>输入/编解码器>复选框,阅读“跳过H.264环路解块滤波器”可能值得

在此处输入图片说明

例如 从vlc gpu终端通过vaapi解码,使用12.04中的repo vlc,虽然首选版本是1.2 / 1.3 / 2.0,但如果需要,则应提供2.0的ppa

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.

即使通过大黄蜂的optirun调用它,也没有找到该库,尽管它在那里:optirun vdpauinfo显示::0.0屏幕:0无法打开VDPAU后端libvdpau_nvidia.so:无法打开共享对象文件:没有这样的文件或目录错误创建VDPAU设备:1 avilella @ magneto:〜$找到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
719016

2
如果现在看来,您拥有混合/最佳视频硬件,则需要研究如何通过nvidia芯片进行gpu解码。我自己从来没有拥有过这样的硬件,一个针对该问题的特定问题可能会引起那些正在面对或希望“解决”此问题的人的关注
doug 2012年

这个问题有一些关于混合动力的信息,可能还有其他信息askubuntu.com/questions/100786/…–
doug

2

例如,您可以通过检查播放过程的CPU使用率来实现top。如果vdpau卸载有效,则CPU使用率应较低。另一方面,在cpu上解码会导致cpu负载较高。


0

VLC,默认情况下使用平台的硬件加速(如果可用)。您可以通过播放器的工具->首选项->视频->加速视频输出(覆盖)进行验证,看看是否已勾选。

因此,您应该检查Nvidia显卡的驱动程序是否正确安装,可以使用“ 系统”->“管理”->“其他驱动程序”来安装


对于vlc,勾选了“工具”->“首选项”->“视频”->“加速视频输出(覆盖)”,但其行为与我使用mplayer运行时一样,因此我猜它也不起作用。
719016 2011年

0

要检查我是否要播放高清电影,请从apple / iTunes电影预告片网站下载预告片。在VLC上,转到“工具”->“首选项”->“视频”->“加速视频输出(覆盖)”并将其禁用。打开系统监视器,然后转到“进程”选项卡,然后在列表中找到VLC。

启动您拥有的预告片或电影,并查看VLC进程使用CPU的速度。现在,在VLC上停止电影,然后转到“工具”->“首选项”->“视频”->“加速视频输出(叠加)”,然后“启用”硬件加速并保存设置。为了使更改生效,可能需要关闭然后重新启动VLC。为了安全起见,我将重新启动它。

在启用硬件覆盖的情况下重新启动VLC之后。播放与以前相同的电影/预告片,然后在“系统监视器”面板上查看CPU资源是否不足。

如果它们明显较低,则表明它正在工作。

在我的情况下,VLC从使用60-70%的CPU变为仅使用20-30%的CPU。我注意到MPlayer使用的更少了。借助硬件加速,它从60-70%降至5%以下。

您的结果会有所不同,但是如果硬件加速工作正常,则应该在系统监视器下看到该特定进程的CPU使用率显着下降。

据我了解,视频硬件加速与所有视频格式都不兼容,它取决于您的GPU可以解码的格式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.