跳转到内容

VLC 媒体播放器

来自 Arch Linux 中文维基

引自项目主页:

VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。

安装

安装 vlc包 拆分包,然后从以下插件软件包中选择安装:

提示:可以通过在包数据库中查询 vlc-plugin 获取可用插件列表并独选择单个插件安装。

替代前端

语言

VLC 没有在其“偏好设置”中提供更改语言的选项,但可通过通过修改LANGUAGE 环境变量改变其界面语言。例如,可以把其桌面项 vlc.desktop 中这一部分:

Exec=/usr/bin/vlc %U

修改为:

Exec=env LANGUAGE=zh_CN /usr/bin/vlc %U

来将界面语言设置为中文(中国)。

皮肤

VLC 的“皮肤”功能由 vlc-gui-skins2包 提供(需使用 svlc 运行),可更换外观和风格。可以从 VLC 皮肤网站下载皮肤。

打开 VLC,点击菜单栏中“工具 > 偏好设置”。“简明”显示下,皮肤设置位于“界面”选项卡。

选择“使用自定义皮肤”,然后选择已下载的皮肤资源文件。

重启 VLC 以使更改生效。

Web 界面

使用参数 --extraintf=http 运行 VLC 可同时开启桌面界面和 Web 界面。参数 --http-host 用于指定绑定地址,默认是 localhost。必须使用 --http-password 设置密码,否则 VLC 不允许登录。

$ vlc --extraintf=http --http-host 0.0.0.0 --http-port 8080 --http-password 密码

在图形界面中,可以通过点击菜单栏中“视图 > 添加界面 > Web”启动 Web 界面。通过“工具 > 偏好设置(显示设置为‘全部’)> 界面 > 主界面 > Lua > Lua HTTP > 密码”设置密码。登录时用户名留空。

VLC 默认使用端口 8080:http://localhost:8080

提示与技巧

使用 VLC 观看直播

可以使用 Streamlink 通过 VLC 观看直播。

从本地 DLNA 服务器播放流媒体内容

安装 vlc-plugin-upnp包 后,通过进入“视图 > 播放列表 > 本地网络 > 通用即插即播(UPnP)”可以播放 UPnP DLNA 内容。如果 VLC 无法检测到本地网络中的 DLNA 服务器,请确保防火墙未阻止 UPnP 使用的 UDP 1900 端口,只有开放这一端口才能播放本地 DLNA(使用 UPnP)内容。

使用快捷键或命令行控制

安装 openbsd-netcat包。

从 CrunchBang 论坛的存档界面获取脚本。

按照脚本中的说明为 VLC 设置一个 socket。

可以从命令行运行该脚本,或者通过桌面环境将其注册为键盘快捷键。

另外,你也可以使用 MPRIS 与 VLC 交互。

也可以使用 CLI 或 ncurses TUI 启动 VLC(参见 #替代前端)。

保持单实例运行

VLC 的默认设置是每次打开文件就启动一个新的程序实例。如果使用 VLC 来播放音乐收藏之类的内容,这可能会很烦人。可以在文件管理器中多选文件后一起打开,也在菜单中可以关闭此行为:勾选“工具 > 偏好设置(显示设置为‘简明’)> 界面 > 播放列表与实例管理 > 仅允许一个实例”,并勾选“在单实例模式中将项目添加到播放列表队列中”,这样新的文件将被添加到当前播放列表中而不会中断当前播放的文件。

还有一个选项“从文件管理器启动时,只允许一个实例”勾选后,通过文件管理器用 VLC 打开的文件都会在一个实例中播放。“在单实例模式中将项目添加到播放列表队列中”选项对此仍然生效。

注意:当前 VLC 版本存在以下 bug:勾选“从文件管理器启动时,只允许一个实例”而不勾选“仅允许一个实例”时无法(取消)勾选“在单实例模式中将项目添加到播放列表队列中”选项。

硬件视频加速

详见硬件视频加速。

VLC 会自动尝试使用可用的 API,但也可以手动覆盖设置。在菜单栏中进入:工具 > 偏好设置(显示设置为“简明”)> 输入/编解码器,在“硬件加速解码”中选择合适的选项。

systemd 服务

可以通过 systemd 自启动 VLC 的 #Web 界面。首先,创建一个专用用户:

# useradd -c "VLC daemon" -d / -G audio -M -p \! -r -s /usr/bin/nologin -U vlcd

接着创建 systemd 服务文件:

/etc/systemd/system/vlc.service
[Unit]
Description=VideoOnLAN Service
After=network.target

[Service]
Type=forking
User=vlcd
ExecStart=/usr/bin/vlc --daemon --syslog -I http --http-port 8090 --http-password 密码
Restart=on-abort

[Install]
WantedBy=multi-user.target

启动并启用 vlc.service。登录时用户名留空,密码为以上服务文件中所设。

Chromecast 支持

从 3.0 版本(Vetinari 分支)开始,VLC 可以向同一网络中的 Chromecast 设备进行流媒体投放。

安装以下软件包:

然后,编辑文件 /etc/nsswitch.conf,在 hosts 这一行的 resolve 和 dns 之前加入 mdns_minimal [NOTFOUND=return]:

hosts: ... mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns ...
注意:
  • 如果解析 主机名.local 速度较慢,可以尝试将 mdns_minimal 替换为 mdns4_minimal,仅解析 IPv4 地址。
  • 更多信息请参阅 avahi。


单击自动暂停/恢复插件

安装 vlc-pause-click-pluginAUR,该插件实现了许多人习惯的在直接点击 VLC 播放窗口中的视频时暂停或恢复播放的功能。

安装后插件不会自动启用,需要按照 https://github.com/nurupo/vlc-pause-click-plugin#usage 的说明在设置里手动启用。

从 V4L2 音视频采集设备串流

例如,从 USB 摄像头或 USB HDMI 采集设备进行实时串流。

查找 V4L2 设备的视频设备节点:

$ v4l2-ctl --list-devices
HDMI Capture: HDMI Capture (usb-0000:07:00.1-2):
/dev/video2
/dev/video3
/dev/media1

通常为列出的第一个 /dev/video* 节点,此处为 /dev/video2。

然后,查找该采集设备的 PulseAudio 音频源名称:

$ pactl list short sources | grep --invert-match --regexp=.monitor
(…部分设备已省略…)
8750 alsa_input.usb-XF_HDMI_Capture_20000130041415-02.iec958-stereo PipeWire s16le 2ch 48000Hz SUSPENDED

此处的名称即为 alsa_input.usb-XF_HDMI_Capture_20000130041415-02.iec958-stereo。

使用图形用户界面

现在打开 VLC 媒体播放器,在顶部菜单栏中选择“媒体(M) > 打开捕获设备(C)...”。

在“设备选择”部分,“视频设备名称”选择上面查询到的 V4L2 设备的视频设备节点(此处为 /dev/video2)。 将“音频设备名称”留空。1

在左下角勾选“显示更多选项(M)”复选框。此时应会显示“编辑选项”文本框。 在该文本框末尾添加一个空格后添加以下内容(斜体处替换为上面查询到的实际 PulseAudio 音频源名称):

:input-slave=pulse://alsa_input.usb-XF_HDMI_Capture_20000130041415-02.iec958-stereo

然后点击“播放(P)”按钮。

1 这是因为该输入仅接受 ALSA 设备,而 VLC 通常无法访问它们,因为这些设备已被 PipeWire 或 PulseAudio 独占使用。

通过命令行

或者,也可以通过以下命令从命令行运行 VLC 媒体播放器(斜体处分别替换为上面查询到的实际 PulseAudio 音频源名称和 V4L2 设备的视频设备节点):

$ vlc --v4l2-standard= --live-caching=300 --input-slave=pulse://alsa_input.usb-XF_HDMI_Capture_20000130041415-02.iec958-stereo -- v4l2:///dev/video2

问题解决

更新后视频异常或其他问题

VLC 的配置在更新时常常会出现问题,即使是小版本更新。在提交错误报告之前,请先删除或重命名位于 ~/.config/vlc 的配置文件,并确认问题是否仍然存在。

如果使用了 AUR 中的 FFmpeg 变种,请确保它也已更新。Pacman 不会自动升级这些包,而版本不匹配可能会导致 VLC 出现故障。

段错误

启动 VLC 时出现

在启动 VLC 时,可能会遇到段错误。如果已经排除了诸如微码等常见因素,可以尝试重新生成 VLC 的插件缓存并重装 VLC,执行:

# /usr/lib/vlc/vlc-cache-gen /usr/lib/vlc/plugins

然后重新安装 VLC。

播放视频时出现

如果 VLC 能正常播放音频文件,但在播放视频时出现段错误,那么可能是硬件视频加速配置不当,导致 VLC 无法访问图形设备。这种情况尤其容易发生在一台电脑使用多个显卡时。

下拉菜单中图标缺失

在 XFCE 桌面环境下,下拉菜单中图标(如 PCI 卡图标)可能会缺失。

执行以下命令可以重新启用这些图标:

$ gconftool-2 --type boolean --set /desktop/gnome/interface/buttons_have_icons true
$ gconftool-2 --type boolean --set /desktop/gnome/interface/menus_have_icons true

打开 VDPAU 后端失败

参见硬件视频加速#打开 VDPAU 后端失败。

由于系统可能并不支持 VDPAU,需要让 VLC 使用 VA-API 作为替代,请参见 #硬件视频加速。

无法通过 SFTP 播放媒体文件

如果 VLC 无法通过 SFTP 播放任何视频或音频文件,请确保已安装 sshfs包。

如果 VLC 拒绝播放任何文件名包含空格的媒体文件而要求身份验证,请修改 vlc.desktop 文件中的 Exec 行如下:

Exec=/usr/bin/vlc --started-from-file %F

参见 [1]。

iOS 或 tvOS 上的 VLC 无法通过 SFTP 连接到 Arch

由于 App Store 的许可限制,VLC 的 iOS 与 tvOS 应用使用的是不完整的 SSH 实现。为使其兼容,需修改 openssh包 配置。创建配置文件 /etc/ssh/sshd_config.d/vlc.conf,内容如下:

HostKeyAlgorithms +ssh-rsa  
KexAlgorithms +diffie-hellman-group16-sha512

然后重新加载 sshd.service。

无法打开 DVD

若希望通过菜单 “媒体 > 打开光盘” 播放 DVD,需安装 VLC 的可选依赖 vlc-plugin-dvd包 及该插件的可选依赖 libdvdcss包(用于解码使用 CSS 加密的 DVD)。

部分 DVD 还可能需要其它插件,例如 vlc-plugin-dca包。也可以选择安装 vlc-plugins-extra包,该软件包包含上述两个插件及其他额外插件。

如果已安装上述所有软件包仍无法播放 DVD,可尝试删除 ~/.dvdcss 文件夹,让 VLC 会重新下载 CSS 密钥,有时可以解决播放问题。

无法打开蓝光光盘/蓝光菜单无法加载

参见蓝光#VLC。

媒体无法加载

若某些 RTP、RTSP、DVB-T 流媒体或蓝光视频出现无限缓冲状态,或在日志中无报错却静默加载失败(例如法国 Free 互联网服务提供商的 IPTV 服务),请安装 vlc-plugin-aribb24包 插件。

Wayland 支持

vlc-gitAUR 默认编译时启用了 Wayland 支持。设置环境变量 QT_QPA_PLATFORM=wayland 可启用 Wayland,详见 Wayland#Qt。

需要注意的是,尽管 vlc包 的 PKGBUILD 中使用了 --enable-wayland 编译参数(当前使用的是 VLC 3.0 版本),但实际上仍会通过 Xwayland 运行,因为 VLC 3 的 Wayland 支持尚未完善。如果未安装 xorg-xwayland包,VLC 的视频输出可能出现裁切或其他异常。

可使用以下命令让 VLC 3 使用 Wayland 启动:

$ env -u DISPLAY vlc

该命令的原理是:VLC 3 启动时会检查 DISPLAY 环境变量,若未设置则尝试使用 Wayland。不推荐在系统范围内移除 DISPLAY,因为一些旧应用程序仍依赖该变量。

无法连接到 RTSP 流

如果连接 RTSP 流时出现 failed to setup rtsp session 错误,请安装 vlc-plugin-live555包。

请安装可选依赖 vlc-plugin-aribb24包。

使用 AMDGPU 播放 HEVC 视频时系统无响应

在播放 HEVC(H265)编码的视频时,系统可能会完全冻结,无法进行任何操作(包括关机)。

可以通过将“工具 > 偏好设置(显示设置为“全部”)> 视频 > 输出模块 > OpenGL > Open GL/GLES hardware converter”从“自动”更改为其他合适选项(例如“VDPAU OpenGL surface converter”或“VA-API OpenGL surface converter for Wayland”)来解决该问题。

详见 https://gitlab.freedesktop.org/drm/amd/-/issues/2113#note_1602599

更改播放进度后声音短暂消失

将“工具 > 偏好设置(显示设置为‘简明’)> 音频 > 输出模块”设置为目前使用的音频服务器(对于 PipeWire,需要安装 vlc-plugin-pipewireAUR,否则只能使用兼容层)。

VLC 不显示字幕和屏显信息(OSD)

即使解码字幕的插件已经安装,如果没有安装 vlc-plugin-freetype包,字幕和屏显信息仍然不会显示(而且“消息”和控制台中也不会报错)。注意,该插件不包含在 vlc-plugins-base包 中,但包含在 vlc-plugins-extra包 中。

MKV 文件中的字幕导致“VLC could not identify the audio or video codec”

如果从外部文件加载字幕时显示正常,但 MKV 文件中的内嵌字幕无法被识别,那么很可能是缺少 vlc-plugin-matroska包 软件包。该软件包不包含在 vlc-plugins-base包 中,而包含在 vlc-plugins-extra包 中。

KDE Plasma 未对 VLC 应用深色主题

参见 KDE#主题 提示框中的第一项。

参见