我正在尝试在已安装并运行 Bumblebee 3.0 的 Ubuntu 11.10 上运行 hybrid-dump 以播放 VDPAU 加速视频。但按照以下 URL 中的说明,我无法让带有 vdpau 的 mplayer 工作:
https://askubuntu.com/a/100812/17702
avilella@magneto:~/hybrid_graphics/hybrid-windump$ git pull
Already up-to-date.
avilella@magneto:~/hybrid_graphics/hybrid-windump$ make clean && make
optirun true
LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 metacity --replace &
LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 mplayer -vo vdpau file.720p.mkv
#(in the other gnome-terminal tab)
LD_LIBRARY_PATH=/usr/lib/nvidia-current ~/hybrid_graphics/hybrid-windump/windump :8 :0
还尝试过:
LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 mplayer -vo vdpau -vc ffh264vdpau file.720p.mkv
我没有从中获得任何视频,只有音频。如果我删除 vdpau 位,我确实可以获得视频和音频,但这样就不需要 windump 了:
LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 mplayer file.720p.mkv
如果我尝试 glxspheres,它运行良好,如下所示:
LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 glxspheres
#(in the other gnome-terminal tab)
LD_LIBRARY_PATH=/usr/lib/nvidia-current ~/hybrid_graphics/hybrid-windump/windump :8 :0
Polygons in scene: 62464
Visual ID of window: 0x27
Context is Direct
OpenGL Renderer: GeForce 310M/PCI/SSE2
现在正在播放视频。按照以下说明,我让它在一定程度上工作了:
编辑/etc/bumblebee/xorg.conf.nvidia
并添加:
Section "Screen"
Identifier "Screen0"
DefaultDepth 24
SubSection "Display"
Depth 24
Virtual 1280 720
EndSubSection
EndSection
重新启动bumblebeed
:
sudo restart bumblebeed
在其中一个终端中,我调用以下mplayer
命令:
LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/lib/nvidia-current/vdpau DISPLAY=:8 optirun mplayer -vo vdpau -ao alsa file.720p.mkv
然后在另一个终端中,我调用以下compiz
命令windump
:
LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 compiz --replace &
~/hybrid-windump/windump :8 :0
问题:我为视频窗口的大小而苦恼。在 1366x768 的屏幕上,我设置了 1280x720 的视频大小,但图像在右侧被截断了大约 200 个像素,留下了相同大小的黑色windump
区域。
有任何想法吗?
答案1
这就是我得到的结果vdpau
:
编辑
/etc/bumblebee/xorg.conf.nvidia
为Section "Screen" Identifier "Screen0" DefaultDepth 24 SubSection "Display" Depth 24 Virtual 1920 1080 EndSubSection EndSection
跑步
LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/lib/nvidia-current/vdpau DISPLAY=:8 optirun mplayer -vo vdpau file.720p.mkv
跑步
LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 compiz --replace &
已下载https://github.com/gebart/hybrid-windump,
xorg.conf
从中删除,然后进行编译(只需make
命令)。跑步
./windump :8 :0
笔记:您不需要编辑/etc/bumblebee/bumblebee.conf
和更改KeepUnusedXServer
,true
因为我们直接使用 Optirun 运行 MPlayer。
答案2
我发现您使用 Bumblebee 启动的 X 服务器的方法存在一个缺陷(:8
)。一旦 Bumblebee 守护进程检测到没有 optirun 客户端,它就会关闭 X 服务器。要使 X 服务器即使optirun
已退出仍保持活动状态:
- 编辑
/etc/bumblebee/bumblebee.conf
并设置KeepUnusedXServer=true
- 使用重新启动守护进程
sudo restart bumblebeed
(注意:这将终止任何现有optirun
应用程序) - 触发 X 服务器的启动:(
optirun true
只是true
一个立即返回的命令,它可以是任何东西) 在辅助 X 服务器上运行应用程序。
LD_LIBRARY_PATH
如果您使用 nvidia 驱动程序,则此部分是必需的:LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 metacity --replace &`
- 使用以下命令运行 windump:
windump :8 :0
注意:我无法使用 gebarts 的 fork 将其与 xorg-edgers/ppa+nouveau 和 nvidia 驱动程序配合使用。使用 nvidia 驱动程序时,我在运行 时遇到了很多撕裂问题glxspheres
。如果转储屏幕的分辨率与主显示分辨率不匹配,您可能需要向 中添加额外的模式行/etc/bumblebee/xorg.conf.nvidia
。对于 1920x1080,要添加的行如下所示:
Section "Screen"
Identifier "Screen0"
DefaultDepth 24
SubSection "Display"
Depth 24
Virtual 1920 1080
EndSubSection
EndSection
答案3
我很高兴人们喜欢我的解决方案,但我想强调的是,这只是使用 Optimus 进行 VDPAU 的概念验证方法。
gebart 编写 hybrid-windump 的方式严重依赖 CPU,因为所有内容都以一种相当低效的方式从“屏幕”复制到“屏幕”。
是的,您正在使用 VDPAU 进行解码,但是您并没有获得任何 CPU 使用率节省。
还有一个选项可以通过 x 窗口 ID 转储单个窗口。
对于键盘,您需要Option "AutoAddDevices" "true"
。
您还可以使用 hybrid-windump 使用您选择的 DE 启动整个 VDPAU 就绪桌面会话。
如果您仍想使用它,这里有一些显示结果的视频(取决于 X 配置):
答案4
它应该是DISPLAY=:0; metacity --replace &
另外,optirun 明确表示您的显示器为 :0.0,为什么您要尝试在显示器 :8 上启动 metacity?您是否在显示器 :8 上运行了某个程序,而我们在您的帖子中看不到该程序?如果有,请也向我们提供该信息,好吗?