我如何知道 nvidia vdpau 是否适用于 mplayer/vlc/totem?

我如何知道 nvidia vdpau 是否适用于 mplayer/vlc/totem?

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

我如何知道我的视频播放器(mplayer、vlc 或 totem)是否使用 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

编辑:显然它找不到该库,即使通过 bumblebee 的 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

编辑2:我再次尝试使用 Ubuntu 12.04,但仍然无法使其工作。

答案1

回答您的问题并稍微介绍一下使用 mplayer 或 vlc 启用 gpu 解码的方法。

播放器

要查看您是否通过 vdpau 获得 gpu 解码,最简单的方法是执行您已完成的操作 - 从终端运行 mplayer。目前,您所显示的内容表明您没有获得它。

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

维氏

如果您拥有 nvidia 硬件并且无法或不支持 vdpau,那么就不要使用 vlc,因为它使用 vaapi 并且启用起来比较棘手。此外,nvidia 上 vaapi 的性能在很大程度上取决于硬件。我在这里启用了但没有使用,ffmpeg 多线程更适合我的 vlc 硬件。

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

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

通过 vaapi 和 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.

答案2

例如,您可以通过检查播放过程中的 CPU 使用率来做到这一点top。如果 vdpau 卸载有效,则 CPU 使用率应该很低。另一方面,在 CPU 上解码将导致 CPU 负载过高。

答案3

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

因此,您应该检查 Nvidia 显卡驱动程序是否安装正确,您可以使用系统->管理->附加驱动程序

答案4

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

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

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

如果值明显较低,则表明它正在起作用。

在我的情况下,VLC 的 CPU 使用率从 60-70% 下降到只有 20-30%。我注意到 MPlayer 的 CPU 使用率更低。借助硬件加速,它从 60-70% 下降到 5% 以下。

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

据我所知,视频硬件加速并不兼容所有视频格式,它可以解码哪些格式取决于你的 GPU。

相关内容