第九章 多媒体9.1. 简介9.2. 设置声卡9.2.1. 测试声音9.2.2. 混音器9.2.3. 显卡声音9.2.4. 自动切换到耳机9.2.5. 声音故障排除9.3. 音频播放器9.3.1. Elisa9.3.2. GNOME Music9.3.3. Audacious9.3.4. MOC(music on console)9.4. 视频播放器9.4.1. MPlayer9.4.2. SMPlayer9.4.3. VLC 媒体播放器9.4.4. Kodi(XMBC)9.5. 会议(conferencing)和会议(meetings)9.5.1. 设置网络摄像头9.5.2. 会议软件状态9.6. 图像扫描仪9.6.1. 检查扫描仪9.6.2. SANE配置
多媒体章节概述了FreeBSD上的多媒体支持。多媒体应用程序和技术已成为现代计算不可或缺的一部分,FreeBSD为各种多媒体硬件和软件提供了强大而可靠的支持。本章涵盖了各种多媒体组件,如音频、视频和图像处理。它还讨论了各种媒体格式和编解码器,以及用于多媒体创建和播放的工具和应用程序。此外,本章还介绍了多媒体系统配置、故障排除和优化。FreeBSD为多媒体工作提供了一个强大的平台,适合多媒体爱好者和专业内容创作者。本章旨在帮助充分利用FreeBSD的多媒体功能,提供有用的信息和实际示例来帮助入门。
默认情况下,FreeBSD会自动检测系统使用的声卡。FreeBSD支持各种各样的声卡。支持的声卡列表可以在 sound(4) 中查阅。
xxxxxxxxxx只有当FreeBSD没有正确检测到声卡模块时,才需要加载它。如果不知道系统有哪个声卡或要使用哪个模块,可以通过执行以下命令加载 snd_driver 元驱动程序:
xxxxxxxxxx# kldload snd_driver或者,要在启动时将驱动程序作为模块加载,请在 /boot/loder.conf 中放置以下行:
xxxxxxxxxxsnd_driver_load="YES"要确认检测到声卡,可以执行以下命令:
xxxxxxxxxx% dmesg | grep pcmpcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> at nid 26,22 and 24 on hdaa0pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> at nid 29 on hdaa0还可以使用以下命令检查声卡的状态:
xxxxxxxxxx# cat /dev/sndstatInstalled devices:pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> (play/rec) defaultpcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> (rec)如果没有列出 pcm 设备,请仔细检查是否加载了正确的设备驱动程序。如果一切顺利,声卡现在应该可以在FreeBSD中运行。
beep(1) 可用于产生一些噪音,确认声卡正在工作:
xxxxxxxxxx$ beepFreeBSD有不同的实用程序来设置和显示基于FreeBSD声音系统构建的声卡混音器值:
表17. 支持的混音器包
| 名称 | 许可证 | 包 | 工具包 |
|---|---|---|---|
mixer(8) | BSD-2 | 包含在基础系统重 | CLI |
| dsbmixer | BSD-2 | audio/dsbmixer | Qt |
| KDE Plasma 音频部件 | GPL 2.0 | audio/plasma6-plasmapa | Qt |
| mixertui | BSD-2 | audio/mixertui | TUI |
图形卡通常带有自己的集成声音设备,可能不清楚哪种设备被用作默认设备。要确认,请运行 dmesg 并查找 pcm 条目,以确定系统是如何枚举输出的。执行以下命令:
xxxxxxxxxx% dmesg | grep pcmpcm0: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0pcm1: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0pcm2: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0pcm3: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0hdac1: HDA Codec #2: Realtek ALC889pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1显卡(NVIDIA®)在声卡(Realtek®)之前被枚举,声卡显示为 pcm4 。通过执行以下命令,系统可以配置为使用声卡作为默认设备:
xxxxxxxxxx# sysctl hw.snd.default_unit=4要使此更改永久化,请在 /etc/sysctl.conf 中添加下一行:
xxxxxxxxxxhw.snd.default_unit=4有些系统可能难以在音频输出之间切换,但幸运的是,FreeBSD允许在 device.hints 中配置自动切换。
通过执行以下命令确定系统如何枚举音频输出:
xxxxxxxxxx% dmesg | grep pcmpcm0: <Realtek ALC892 Analog> at nid 23 and 26 on hdaa0pcm1: <Realtek ALC892 Right Analog Headphones> at nid 22 on hdaa0在 /boot/device.hints 中添加以下行:
xxxxxxxxxxhint.hdac.0.cad0.nid22.config="as=1 seq=15 device=Headphones"hint.hdac.0.cad0.nid26.config="as=2 seq=0 device=speakers"xxxxxxxxxx请记住,这些值是针对上述示例的。它们可能因系统而异。一些常见的错误消息及其解决方案:
表18. 常见错误消息
| 错误 | 方案 |
|---|---|
| xxx: Can't open /dev/dsp! | 键入 fstat|grep dsp 以检查是否有其他应用程序保持设备打开。值得注意的麻烦制造者们都很好,KDE也很好地支持他们。 |
使用 audio/pulseaudio 的程序可能需要重新启动 audio/praseaudio 守护进程,才能使 hw.snd.default_unit 中的更改生效。或者,可以动态更改(changed on the fly) audio/praseaudio 设置。 pacmd(1) 打开与 audio/pulseaudio 守护进程的命令行连接:
xxxxxxxxxx# pacmdWelcome to PulseAudio 14.2! Use "help" for usage information.>>>以下命令将默认接收器更改为卡号4,如上例所示:
xxxxxxxxxxset-default-sink 4xxxxxxxxxx不要使用 `exit` 命令退出命令行界面。这将杀死 audio/pulseaudio 守护进程。请改用Ctrl+D。本节介绍FreeBSD Ports Collection中可用于音频播放的一些软件。
表19. 音频播放器包
| 名称 | 许可证 | 包 | 工具包 |
|---|---|---|---|
| Elisa | LGPL 3.0 | audio/elisa | Qt |
| GNOME Music | GPL 2.0 | audio/anome-music | GTK+ |
| Audacious | BSD-2 | multimedia/audacious | Qt |
| MOC(music on console) | GPL 2.0 | audio/moc | TUI |
Elisa是KDE社区开发的一款音乐播放器,力求简单易用。
要安装Elisa,请执行:
xxxxxxxxxx# pkg install elisaGNOME Music是新的GNOME音乐播放应用程序。它旨在将优雅而身临其境的浏览体验与简单直接的控件相结合。
要安装GNOME音乐,请执行:
xxxxxxxxxx# pkg install gnome-musicAudacious是一款开源音频播放器。作为XMMS的后代,它提供音乐播放,同时保持系统资源的有效利用。
要安装Audacious,请执行:
xxxxxxxxxx# pkg install audacious-qt6 audacious-plugins-qt6xxxxxxxxxxAudacious本机支持OSS,但必须在 “Audio” 选项卡上的设置中进行配置。MOC(控制台音乐)是一款功能强大、易于使用的控制台音频播放器。
无论系统或I/O负载如何,MOC都能平稳运行,因为它在单独的线程中处理输出缓冲区。它不会导致文件之间的间隙,因为播放当前文件时会预缓存下一个要播放的文件。
要安装MOC(控制台上的音乐),请执行:
xxxxxxxxxx# pkg install moc本节介绍FreeBSD Ports Collection中可用于视频播放的一些软件。
表20. 视频播放器包
| 名称 | 许可证 | 包 | 工具包 |
|---|---|---|---|
| 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 |
MPlayer是一个多媒体播放器和编码器套件,可在许多平台上运行,并在命令行上工作。它可以播放大量不同的文件格式和编解码器,包括流行的DivX、XviD、H.264流以及DVD和SVCD以及许多流行的音频编解码器。
要安装MPlayer,请执行:
xxxxxxxxxx# pkg install mplayer有关MPlayer如何工作的示例,请参阅 mplayer(1) 。
SMPlayer旨在成为MPlayer的完整前端,从播放视频、DVD和VCD等基本功能到支持MPlayer过滤器等更高级的功能。
要安装SMPlayer,请执行:
xxxxxxxxxx# pkg install smplayerVLC媒体播放器是一款高度便携的多媒体播放器,适用于各种音频和视频格式(MPEG-1、MPEG-2、MPEG-4、DivX、mp3、ogg等)以及DVD、VCD和各种流媒体协议。它还可以用作服务器,在高带宽网络上以IPv4或IPv6的单播或多播方式进行流式传输。VLC还具有动态转码媒体以进行流式或保存到磁盘的能力。
要安装VLC,请执行:
xxxxxxxxxx# pkg install vlcKodi(原名XBMC)是一个免费开源的跨平台媒体播放器和娱乐中心。它允许用户播放和查看来自本地和网络存储媒体以及互联网的大多数视频、音乐、播客和其他数字媒体文件。
要安装Kodi,请执行:
xxxxxxxxxx# pkg install kodiFreeBSD桌面环境可用于加入视频会议。本节将解释如何配置网络摄像头以及FreeBSD支持哪些视频会议(videoconferencing)应用程序。
要允许FreeBSD访问网络摄像头并执行其配置,需要安装某些实用程序:
要安装所需的实用程序,请执行:
xxxxxxxxxx# pkg install webcamd pwcview在 /etc/rc.conf 中启用 webcamd(8) 服务,以便在系统启动时启动它:
xxxxxxxxxx# sysrc webcamd_enable=YES用户必须属于 webcamd 组。要将用户添加到 webcamd 组,请执行以下命令:
xxxxxxxxxx# pw groupmod webcamd -m username由于 multimedia/webcamd 需要 cuse(3) 模块,因此必须通过执行以下命令加载该模块:
xxxxxxxxxx# kldload cuse要在系统启动时加载 cuse(3) ,请执行以下命令:
xxxxxxxxxx# sysrc kld_list+=cuse安装实用程序后,可用网络摄像头列表可以通过 webcamd(8) 显示:
xxxxxxxxxx# webcamd -lwebcamd [-d ugen0.2] -N SunplusIT-Inc-HP-TrueVision-HD-Camera -S unknown -M 0 ①webcamd [-d ugen1.3] -N Realtek-802-11n-WLAN-Adapter -S 00e04c000001 -M 0① 可用网络摄像头
执行以下命令配置可用的网络摄像头:
xxxxxxxxxx# sysrc webcamd_0_flags="-d ugen0.2" ①xxxxxxxxxx请注意,如果这是一个即插即用的USB网络摄像头,更改其连接的USB端口将更改 `webcamd -l` 的输出,并且可能需要更新 rc.conf 中的条目。对于使用USB集成网络摄像头的笔记本电脑,这应该不是问题。必须通过执行以下命令启动 webcamd(8) 服务:
xxxxxxxxxx# service webcamd startStarting webcamd.webcamd 1616 - - Attached to ugen0.2[0]multimedia/pwcview 可用于检查网络摄像头的正常工作。以下命令可用于执行 multimedia/pwcview :
xxxxxxxxxx% pwcview -f 30 -s vga然后 multimedia/pwcview 将显示网络摄像头:

FreeBSD目前支持以下用于进行视频会议的工具。
表21. 会议软件
| 名称 | 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/ |
在FreeBSD中,图像扫描仪的访问由SANE(Scanner access Now Easy)提供,该软件可在FreeBSD Ports Collection中获得。
在尝试任何配置之前,检查扫描仪是否受SANE支持非常重要。
连接扫描仪后,运行以下命令以获取所有连接的USB设备:
xxxxxxxxxx# usbconfig listugen4.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)运行以下命令以获取 idVendor 和 idProduct :
x# usbconfig -d 3.2 dump_device_descugen3.2: <HP Deskjet 1050 J410 series> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)bLength = 0x0012bDescriptorType = 0x0001bcdUSB = 0x0200bDeviceClass = 0x0000 <Probed by interface class>bDeviceSubClass = 0x0000bDeviceProtocol = 0x0000bMaxPacketSize0 = 0x0040idVendor = 0x03f0idProduct = 0x8911bcdDevice = 0x0100iManufacturer = 0x0001 <HP>iProduct = 0x0002 <Deskjet 1050 J410 series>bNumConfigurations = 0x0001xxxxxxxxxx请注意,扫描仪是即插即用设备,更改其连接的USB端口将更改 `usbconfig list` 的输出。一旦获得了 idVendor 和 idProduct ,就有必要在 SANE的支持设备列表 中检查 idProduct 是否支持扫描仪。
SANE通过后端提供对扫描仪的访问。为了能够使用FreeBSD进行扫描,必须通过运行以下命令安装 graphics/sane-backends 包:
xxxxxxxxxx# pkg install sane-backendsxxxxxxxxxx某些USB扫描仪需要加载固件。与上面示例中使用的HP扫描仪一样,它需要安装 print/hplip软件包。安装必要的软件包后,必须配置 devd(8) 以允许FreeBSD访问扫描仪。
将 saned.conf 文件添加到 /usr/local/etc/devd/saned.conf ,内容如下:
xxxxxxxxxxnotify 100 { match "system" "USB"; match "subsystem" "INTERFACE"; match "type" "ATTACH"; match "cdev" "ugen[0-9].[0-9]"; match "vendor" "0x03f0"; ① match "product" "0x8911"; ② action "chown -L cups:saned /dev/\$cdev && chmod -L 660 /dev/\$cdev";};usbconfig -d 3.2 dump_device_desc 命令获得的 idVendor 。usbconfig -d 3.2 dump_device_desc 命令获得的 idProduct 。之后,必须通过运行以下命令重新启动 devd(8) :
xxxxxxxxxx# service devd restartSANE后端包括 scanimage(1) ,可用于列出设备并执行图像采集。
使用 -L 参数执行 scanimage(1) 以列出扫描仪设备:
xxxxxxxxxx# scanimage -Ldevice `hpaio:/usb/Deskjet_1050_J410_series?serial=XXXXXXXXXXXXXX' is a Hewlett-Packard Deskjet_1050_J410_series all-in-one如果 scanimage(1) 无法识别扫描仪,则会出现以下消息:
xxxxxxxxxxNo 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).没有发现扫描仪。如果您期待的是不同的东西,请检查扫描仪是否已插入、打开并被理智的查找扫描工具检测到(如果合适)。请阅读此软件附带的文档(README、常见问题解答、手册页)。一旦 scanimage(1) 看到扫描仪,配置就完成了,扫描仪现在可以使用了。
要激活服务并在启动时运行,请执行以下命令:
xxxxxxxxxx# sysrc saned_enable=YES虽然 scanimage(1) 可用于从命令行执行图像采集,但通常最好使用图形界面来执行图像扫描。
表22. 图形扫描仪程序
| 名称 | 许可证 | 包 |
|---|---|---|
| skanlite | GPL 2.0 | graphics/skanlite |
| GNOME Simple Scan | GPL 2.0 | graphics/simple-scan |
| XSANE | GPL 2.0 | graphics/xsane |