第 9 章。多媒体

9.1. 概要

多媒体章节概述了 FreeBSD 上的多媒体支持。多媒体应用程序和技术已成为现代计算不可或缺的一部分,而 FreeBSD 为各种多媒体硬件和软件提供了强大且可靠的支持。本章涵盖了音频、视频和图像处理等各种多媒体组件。它还讨论了各种媒体格式和编解码器,以及用于多媒体创建和播放的工具和应用程序。此外,本章还涵盖了多媒体系统配置、故障排除和优化。无论您是多媒体爱好者还是专业内容创作者,FreeBSD 都能提供一个强大的多媒体工作平台。本章旨在帮助您充分利用 FreeBSD 的多媒体功能,提供有用的信息和实用的示例以帮助您入门。

9.2. 设置声卡

默认情况下,FreeBSD 会自动检测系统使用的声卡。FreeBSD 支持各种声卡。可以在 sound(4) 中查看支持的声卡列表。

只有在 FreeBSD 未正确检测到声卡的情况下,才需要加载声卡模块。

如果不知道系统拥有哪个声卡或使用哪个模块,可以通过执行以下命令加载 snd_driver 元驱动程序

# kldload snd_driver

或者,要在启动时将驱动程序加载为模块,请将以下行放在 /boot/loader.conf

snd_driver_load="YES"

9.2.1. 测试声音

要确认声卡已检测到,可以执行以下命令

% dmesg | grep pcm

输出应该类似于以下内容

pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> at nid 26,22 and 24 on hdaa0
pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> at nid 29 on hdaa0

还可以使用以下命令检查声卡的状态

# cat /dev/sndstat

输出应该类似于以下内容

Installed devices:
pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> (play/rec) default
pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> (rec)

如果未列出任何 pcm 设备,请仔细检查是否加载了正确的设备驱动程序。如果一切顺利,声卡现在应该可以在 FreeBSD 中工作了。

beep(1) 可用于发出一些噪音,确认声卡正在工作

% beep

9.2.2. 混合器

FreeBSD 具有不同的实用程序来设置和显示基于 FreeBSD 声音系统的声卡混合器值

表 1. 支持的混合器软件包
名称许可证软件包工具包

mixer(8)

BSD-2

包含在基本系统中

CLI

dsbmixer

BSD-2

audio/dsbmixer

Qt

KDE Plasma 音频小部件

GPL 2.0

audio/plasma5-plasma-pa

Qt

mixertui

BSD-2

audio/mixertui

TUI

9.2.3. 显卡声音

显卡通常自带集成声卡设备,可能不清楚哪个设备用作默认设备。要确认,请运行 dmesg 并查找 pcm 条目以识别系统是如何枚举输出的。执行以下命令

% dmesg | grep pcm

输出类似于以下内容

pcm0: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
pcm1: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
pcm2: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
pcm3: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
hdac1: HDA Codec #2: Realtek ALC889
pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1

显卡 (NVIDIA®) 在声卡 (Realtek®) 之前被枚举,声卡显示为 pcm4。可以通过执行以下命令将系统配置为使用声卡作为默认设备

# sysctl hw.snd.default_unit=4

要使此更改永久生效,请将下一行添加到 /etc/sysctl.conf

hw.snd.default_unit=4

9.2.4. 自动切换到耳机

某些系统在音频输出之间切换时可能会遇到困难,但幸运的是,FreeBSD 允许在 device.hints 中配置自动切换。

通过执行以下命令识别系统是如何枚举音频输出的

% dmesg | grep pcm

输出类似于以下内容

pcm0: <Realtek ALC892 Analog> at nid 23 and 26 on hdaa0
pcm1: <Realtek ALC892 Right Analog Headphones> at nid 22 on hdaa0

将以下行添加到 /boot/device.hints

hint.hdac.0.cad0.nid22.config="as=1 seq=15 device=Headphones"
hint.hdac.0.cad0.nid26.config="as=2 seq=0 device=speakers"

请记住,这些值仅适用于上面提到的示例。它们可能会根据系统而有所不同。

9.2.5. 声音故障排除

一些常见错误消息及其解决方案

表 2. 常见错误消息
错误解决方案

xxx: can’t open /dev/dsp!

键入 fstat | grep dsp 检查是否有其他应用程序正在占用该设备。值得注意的是,esound 和 KDE 的声音支持可能会造成麻烦。

使用 audio/pulseaudio 的程序可能需要重新启动 audio/pulseaudio 守护程序才能使 hw.snd.default_unit 中的更改生效。或者,可以动态更改 audio/pulseaudio 设置。 pacmd(1) 打开与 audio/pulseaudio 守护程序的命令行连接

# pacmd
Welcome to PulseAudio 14.2! Use "help" for usage information.
>>>

以下命令将默认接收器更改为卡号 4,如前面的示例所示

set-default-sink 4

不要使用 exit 命令退出命令行界面。这会终止 audio/pulseaudio 守护程序。请改用 Ctrl+D

9.3. 音频播放器

本节介绍 FreeBSD Ports Collection 中可用于音频播放的一些软件。

表 3. 音频播放器软件包
名称许可证软件包工具包

Elisa

LGPL 3.0

audio/elisa

Qt

GNOME 音乐

GPL 2.0

audio/gnome-music

GTK+

Audacious

BSD-2

multimedia/audacious

Qt

MOC(控制台音乐)

GPL 2.0

audio/moc

TUI

9.3.1. Elisa

Elisa 是 KDE 社区开发的音乐播放器,它力求简单易用。

要安装 Elisa,请执行

# pkg install elisa

9.3.2. GNOME 音乐

GNOME 音乐是新的 GNOME 音乐播放应用程序。它旨在将优雅而身临其境的浏览体验与简单直观的控制相结合。

要安装 GNOME 音乐,请执行

# pkg install gnome-music

9.3.3. Audacious

Audacious 是一个开源音频播放器。它是 XMMS 的后裔,它按照您的意愿播放音乐,而不会占用计算机的资源来执行其他任务。

要安装 Audacious,请执行

# pkg install audacious-qt6 audacious-plugins-qt6

Audacious 本身支持 OSS,但需要在音频选项卡上的设置中进行配置。

9.3.4. MOC(控制台音乐)

MOC(控制台音乐)是一个控制台音频播放器,旨在功能强大且易于使用。

MOC 的播放流畅,不受系统或 I/O 负载的影响,因为它在单独的线程中处理输出缓冲区。它不会在文件之间产生间隙,因为在播放当前文件时会预先缓存下一个要播放的文件。

要安装 MOC(控制台音乐),请执行

# pkg install moc

9.4. 视频播放器

本节介绍 FreeBSD Ports Collection 中可用于视频播放的一些软件。

表 4. 视频播放器软件包
名称许可证软件包工具包

MPlayer

GPL 2.0

multimedia/mplayer

CLI

SMPlayer

GPL 2.0

multimedia/smplayer

Qt

VLC 媒体播放器

GPL 2.0

multimedia/vlc

Qt

Kodi(XBMC)

GPL 2.0

multimedia/kodi

X11

9.4.1. MPlayer

MPlayer 是一款多媒体播放器和编码器套件,可在多个平台上运行,并在命令行上工作。它可以播放大量不同的文件格式和编解码器,包括流行的 DivX、XviD、H.264 流以及 DVD 和 SVCD,以及许多流行的音频编解码器。

要安装 MPlayer,请执行

# pkg install mplayer

有关 MPlayer 工作方式的示例,请参阅 mplayer(1)

9.4.2. SMPlayer

SMPlayer 旨在成为 MPlayer 的完整前端,从基本的播放视频、DVD 和 VCD 等功能到更高级的功能,例如支持 MPlayer 过滤器等。

要安装 SMPlayer,请执行

# pkg install smplayer

9.4.3. VLC 媒体播放器

VLC 媒体播放器是一款高度便携的多媒体播放器,支持各种音频和视频格式(MPEG-1、MPEG-2、MPEG-4、DivX、mp3、ogg 等)以及 DVD、VCD 和各种流协议。它还可以用作服务器,在高带宽网络上以 IPv4 或 IPv6 方式进行单播或多播流式传输。VLC 还具有实时转码媒体以进行流式传输或保存到磁盘的功能。

要安装 VLC,请执行

# pkg install vlc

9.4.4. Kodi(XBMC)

Kodi(以前称为 XBMC)是一款免费的开源跨平台媒体播放器和娱乐中心。它允许用户播放和查看来自本地和网络存储媒体以及互联网的大多数视频、音乐、播客和其他数字媒体文件。

要安装 Kodi,请执行

# pkg install kodi

9.5. 会议和会议

FreeBSD 桌面环境可用于加入视频会议。本节将说明如何配置网络摄像头以及 FreeBSD 上支持哪些视频会议应用程序。

9.5.1. 设置网络摄像头

要允许 FreeBSD 访问网络摄像头并执行其配置,必须安装某些实用程序

  • multimedia/webcamd 是一个守护程序,它支持使用数百种不同的基于 USB 的网络摄像头和 DVB USB 设备。

  • multimedia/pwcview 是一个应用程序,可用于查看网络摄像头的视频流。

要安装所需的实用程序,请执行

# pkg install webcamd pwcview

/etc/rc.conf 中启用 webcamd(8) 服务,以便在系统启动时启动它

# sysrc webcamd_enable=YES

用户必须属于 webcamd 组。要将用户添加到 webcamd 组,请执行以下命令

# pw groupmod webcamd -m username

由于 multimedia/webcamd 需要 cuse(3) 模块,因此必须通过执行以下命令加载此模块

# kldload cuse

要在系统启动时加载 cuse(3),请执行以下命令

# sysrc kld_list+=cuse

安装完实用程序后,可以使用 webcamd(8) 显示可用的网络摄像头列表

# webcamd -l

输出应该类似于以下内容

webcamd [-d ugen0.2] -N SunplusIT-Inc-HP-TrueVision-HD-Camera -S unknown -M 0 (1)
webcamd [-d ugen1.3] -N Realtek-802-11n-WLAN-Adapter -S 00e04c000001 -M 0
1可用的网络摄像头

通过执行以下命令配置可用的网络摄像头

# sysrc webcamd_0_flags="-d ugen0.2" (1)

请注意,如果这是一个即插即用 USB 网络摄像头,则更改其连接的 USB 端口会更改 webcamd -l 的输出,可能需要更新 rc.conf 中的条目。对于使用 USB 集成网络摄像头的笔记本电脑,这应该不是问题。

必须通过执行以下命令启动 webcamd(8) 服务

# service webcamd start

输出应该类似于以下内容

Starting webcamd.
webcamd 1616 - - Attached to ugen0.2[0]

multimedia/pwcview 可用于检查网络摄像头的正常运行。可以使用以下命令执行 multimedia/pwcview

% pwcview -f 30 -s vga

然后,multimedia/pwcview 将会显示网络摄像头。

pwcview showing Absolute FreeBSD 3rd edition as an example

9.5.2. 会议软件状态

FreeBSD 目前支持以下用于进行视频会议的工具。

表 5. 会议软件
名称Firefox 状态Chromium 状态网站

Microsoft Teams

无法使用

可以使用

https://teams.live.com

Google Meet

无法使用

可以使用

https://meet.google.com/

Zoom

可以使用

可以使用

https://zoom.us

Jitsi

无法使用

可以使用

https://meet.jit.si/

BigBlueButton

无法使用

可以使用

https://bigbluebutton.org/

9.6. 图像扫描仪

在 FreeBSD 中,对图像扫描仪的访问由 SANE(扫描仪访问现在很简单) 提供,它在 FreeBSD Ports Collection 中可用。

9.6.1. 检查扫描仪

在尝试任何配置之前,请务必检查扫描仪是否受 SANE 支持。

连接扫描仪后,运行以下命令以获取所有连接的 USB 设备

# usbconfig list

输出应该类似于以下内容

ugen4.2: <LITE-ON Technology USB NetVista Full Width Keyboard.> at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (70mA)
ugen4.3: <Logitech USB Optical Mouse> at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (100mA)
ugen3.2: <HP Deskjet 1050 J410 series> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)

运行以下命令获取 idVendoridProduct

# usbconfig -d 3.2 dump_device_desc

请注意,扫描仪是即插即用设备,更改其连接的 USB 端口将更改 usbconfig list 的输出。

输出应该类似于以下内容

ugen3.2: <HP Deskjet 1050 J410 series> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)

bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0200
bDeviceClass = 0x0000  <Probed by interface class>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0000
bMaxPacketSize0 = 0x0040
idVendor = 0x03f0
idProduct = 0x8911
bcdDevice = 0x0100
iManufacturer = 0x0001  <HP>
iProduct = 0x0002  <Deskjet 1050 J410 series>
bNumConfigurations = 0x0001

获取 idVendoridProduct 后,需要在 SANE 支持设备列表 中检查扫描仪是否受支持,方法是按 idProduct 过滤。

9.6.2. SANE 配置

SANE 通过后端提供对扫描仪的访问。要使用 FreeBSD 进行扫描,必须通过运行以下命令安装 graphics/sane-backends

# pkg install sane-backends

某些 USB 扫描仪需要加载固件。例如,上面的示例中使用的 HP 扫描仪需要安装 print/hplip 包。

安装必要的软件包后,devd(8) 必须配置为允许 FreeBSD 访问扫描仪。

saned.conf 文件添加到 /usr/local/etc/devd/saned.conf 中,内容如下

notify 100 {
        match "system" "USB";
        match "subsystem" "INTERFACE";
        match "type" "ATTACH";
        match "cdev" "ugen[0-9].[0-9]";
        match "vendor" "0x03f0"; (1)
        match "product" "0x8911"; (2)
        action "chown -L cups:saned /dev/\$cdev && chmod -L 660 /dev/\$cdev";
};
1vendor:是之前通过运行 usbconfig -d 3.2 dump_device_desc 命令获得的 idVendor。
2product:是之前通过运行 usbconfig -d 3.2 dump_device_desc 命令获得的 idProduct。

之后,devd(8) 必须通过运行以下命令重新启动

# service devd restart

SANE 后端包括 scanimage(1),它可以用来列出设备并执行图像采集。

使用 -L 参数执行 scanimage(1) 以列出扫描仪设备

# scanimage -L

输出应该类似于以下内容

device `hpaio:/usb/Deskjet_1050_J410_series?serial=XXXXXXXXXXXXXX' is a Hewlett-Packard Deskjet_1050_J410_series all-in-one

如果 scanimage(1) 无法识别扫描仪,则会显示此消息

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).

一旦 scanimage(1) 看到扫描仪,配置就完成了,扫描仪现在就可以使用了。

要激活服务并使其在引导时运行,请执行以下命令

# sysrc saned_enable=YES

虽然 scanimage(1) 可以用来从命令行执行图像采集,但通常更喜欢使用图形界面来执行图像扫描。

表 6. 图形扫描仪程序
名称许可证软件包

skanlite

GPL 2.0

graphics/skanlite

GNOME 简单扫描

GPL 3.0

graphics/simple-scan

XSANE

GPL 2.0

graphics/xsane


最后修改于:2024 年 10 月 13 日,作者 Alexander Ziaee