个人视频录像机基础
我们所有喜欢的电视节目都以数字方式录制和编辑。但是,我们使用一些模拟技术接收它们,例如有线电视、无线广播或卫星。这简直太离谱了。幸运的是,另一种选择可以提供更好的图像质量、杜比数字音效和EPG电子节目指南。女士们先生们,请欢迎DVB,数字视频广播。
DVB 使用 MPEG-2 压缩流,理论最大比特率为 15Mbit/s。由于 DVB 从不单独用于视频,因此会添加额外的音轨和其他信息,以创造更丰富的用户体验。所有这些数据都存储在小包中。当然,如果某些数据包未到达或已损坏,它们会在图像中留下伪影,并可能在音频流中留下伪影。另一方面,一旦正确的数据包再次到达,程序将继续运行,就像什么也没发生一样,因此无需担心同步不良。信号也具有容错性,因为天线通常尺寸足够大,可以应对雨、雪或小动物。
DVB 有三种不同的型号:DVB-S 用于卫星接收,DVB-C 用于有线电视接收,DVB-T 用于地面接收。这三种型号基本上是相同的;区别在于调谐器。DVB-T 相当新,尚未广泛使用;其他两种,尤其是卫星型号,在世界各地都很常见和流行。
主要制造商提供的现代机顶盒具有一些不错的功能,例如硬盘录制和 MP3 播放。然而,它们缺乏更高级的选项,包括将录音存档到 SVCD 或某些 MPEG-4 格式。随着价格实惠的 DVD 刻录机和媒体的出现,将您喜爱的电视节目备份到 DVD 已触手可及。在欧洲,数字个人视频录像机 (PVR) 的价格高达 500 欧元左右,而且大多数都不带硬盘。另一方面,功能齐全的 DVB-S 卡在在线零售商处可以找到低至 165 欧元的价格。
但是,没有好的软件,廉价的硬件有什么用呢?程序 VDR(视频光盘录像机)使您能够使用您最喜欢的 Linux 版本和 DVB 卡自行构建功能强大的机顶盒。我构建的机器包含基本功能,例如观看电视、录制和时移,以及高级功能,包括 MP3/Ogg 播放、播放 MPlayer 支持的所有视频格式以及将录制材料备份到 MPEG-4、视频 CD 或 DVD。商业机顶盒很难与此功能列表相提并论。
要构建我们的盒子,我们需要一些硬件。请记住,录音需要大量空间。120GB 的硬盘通常可以容纳大约 60 小时的视频,这应该足够大的空间了。如果您更频繁地备份电影以将其从驱动器中取出,则可以使用更少的空间,但我建议至少使用 20GB 的驱动器,它可以容纳大约三到四部电影。
我们还需要一个处理器。如果您想编码视频,则需要更快的处理器;如果不是,则旧的 200MHz 机器应该可以胜任。我找不到比 Celeron 1,700MHz 更慢的处理器了,即使对于编码过程来说,这已经足够强大了。使用 MPlayer 播放也需要快速处理器,至少需要 1GHz,尽管据传它可以在较低的频率下工作。我已经在较慢的机器上测试过 MPlayer,图像质量确实会受到很大影响。原因是 MPlayer 在 DVB 板上使用 MPEG-2 解码器的方式。非 MPEG-1/2 材料会即时转换为 MPEG,这会消耗相当多的处理器周期。
这使我们想到了最重要的硬件;DVB 卡。您需要一张功能齐全的卡,带有硬件 MPEG 解码器。这些卡更贵,但它们有多个用于声音和电视的连接。像 WinTV Nova 这样的卡最适合作为辅助卡,一次录制多个节目。如果可以,请选择卫星选项。这是迄今为止最灵活的解决方案,因为您不依赖于某些有线电视提供商。除此之外,您还可以连接多个卫星天线以观看更多频道。本文中我还讨论了 DVB-S 型号,但部署不同的解决方案实际上并不是一个不同的过程。我选择了 Hauppauge Nexus-s。它可能是最昂贵的卡,但它不会像旧型号那样出现过热问题,而且它具有良好的调谐器,并配有红外遥控器和接收器。
对于基本软件负载,我使用了 Red Hat Linux 9,但任何发行版都可以。安装带有 GCC 和 libjpeg 开发包的小型安装就足够了。不需要 X,因为功能齐全的 DVB 卡具有视频输出功能。不要忘记安装所有内核开发包;我们需要这些来编译 DVB 驱动程序。
基本发行版启动并运行后,我们需要该卡的驱动程序。您可以从 linvdr.org/download/vdr/Developer 获取 CVS 版本。在撰写本文时,linux-dvb.2003-09-05.tar.bz2 是最新版本。当前驱动程序有时会在断开卫星电缆或接收降至零时挂起。然后您必须卸载并重新插入驱动程序,但这并不总是有效,最终您需要重新启动才能使其再次运行。如果您只是在录制某些内容或正在看电影,这些挂起可能尤其令人讨厌,但它们通常不会发生。
现在转到 /usr/src,解压缩驱动程序快照,然后mv将其重命名为 DVB。重命名目录很重要,因为某些补丁和插件依赖于目录名称。转到 DVB 目录并键入make编译驱动程序和一些有用的应用程序,这些应用程序可帮助您扫描卫星以检索频道列表。make install不需要,因为我们稍后使用的 runvdr 脚本会处理模块加载。编译驱动程序后运行 makedev.napi 脚本很重要,因为此脚本会在 /dev 中创建所需的条目。
如果您居住在欧洲以外地区或不使用 Astra 卫星,则必须使用不同的频道列表。扫描频道是一个自动化过程。一个名为 scan 的工具随 DVB 驱动程序一起提供,您可以在 /apps/scan 目录中找到它。使用以下命令调用它-o vdr选项,以便输出文件采用 VDR 的频道格式。要捕获新创建的频道文件,您需要使用以下命令重定向程序的标准输出
./scan -o vdr > channels.conf
获取 vdr-1.2.5.tar.bz2,将其解压缩到 /usr/src 并更改到该目录。安装 VDR 可能有点棘手。因为您可以使用一些补丁来增强功能,如果您不小心,很快就会陷入补丁地狱。如果您想使用多个补丁,最好的主意是获取一个一体化补丁。我只使用了 Elchi 补丁,它为相当乏味的默认 VDR 界面带来了漂亮的改版。如果您有适合您 VDR 版本的正确补丁,则不应遇到任何问题。
插件添加的附加功能范围从简单的游戏到电子邮件警报再到功能齐全的 DVD 播放。在这里,仅安装两个插件,远程插件和 MP3/MPlayer 播放插件。仅当使用 Hauppauge 的原始遥控器时才需要远程插件。另一方面,MP3/MPlayer 插件是必备插件。
更改到 /usr/src/vdr-1.2.5/PLUGINS/src 并解压缩这两个软件包。VDR 的 Makefile 在您从目录名称中删除版本信息之前不会构建插件,因此将它们重命名为 remote 和 MP3。MP3 插件有一些额外的要求,即 libsndfile、libmad 和 libid3tag。由于 Red Hat 发行版不带 MP3 支持,您必须手动安装它们。从 www.freshrpms.org 获取它们,并且不要忘记安装开发包。一切设置完成后,键入make REMOTE=plugin NEWSTRUCT=1 all plugins. REMOTE=plugin 参数添加了使用远程插件的另一种输入方法。您可以使用 Lirc 选择您碰巧找到的任何遥控器;VCR 遥控器效果相当好。只需添加REMOTE=lirc在这种情况下。默认情况下启用键盘支持,并且不应禁用,因为它对于调试非常有用。NEWSTRUCT=1需要告诉插件在 /usr/src/DVB 中搜索新驱动程序。
编译完所有内容后,我们现在需要稍微编辑一下启动脚本。作为基础,使用远程插件提供的脚本。您可以在 misc 目录中找到它,名为 runvdr.remote。此脚本加载一个键映射,以便解码来自遥控器的信号。这仅与 Hauppauge 的红外接收器一起使用。如果您没有红外接收器,请使用 VDR 根目录中的 runvdr 脚本作为起点。将 runvdr.remote 脚本移动到 VDR 的根目录并启动您喜欢的编辑器。在第 24 行,您应该找到启动 vdr 的参数。我的参数如下所示
VDRCMD="$VDRPRG -w 60 -P scanner \ -P\"mplayer -M /video/plugins/mplayer.sh\" \ -P mp3 \ -P\"remote -i /dev/input/event1\" $*"
如果您不确定需要添加什么,只需运行vdr -help,您应该看到所有可用模块及其选项的列表,以及 VDR 的所有选项。别担心,很容易找出要添加的内容。最后,我们需要一个基本目录;默认目录(如 Make.config 中定义的)是 /video。此目录保存所有录音和配置文件。将 sources.conf 和您的 channels.conf 复制到 /video。
我们剩下要做的唯一事情是为 MPlayer/MP3 插件编写配置文件。首先创建一个名为 /video/plugins 的目录。现在我们需要两个文件,一个名为 mp3sources.conf,另一个名为 mplayersources.conf。编写它们很简单。对于初学者,添加类似这样的内容/video/music;本地文件;0对于 mp3sources.conf 和/video/compressed;本地文件;0对于 mplayersources.conf 并保存它们。要使 MPlayer 与 DVB 卡一起工作,您必须重新编译。从 www.mplayerhq.hu 获取副本,并添加--with-extraincdir=/usr/src/DVB/include到您的配置选项。让配置脚本运行、重新编译和安装,您就可以开始了。
正如您从 runvdr 脚本中看到的那样,MPlayer 插件使用一个特殊的 shell 脚本来启动 MPlayer,即 mplayer.sh。您可以从 batleth.sapienti-sat.org/projects/VDR 获取它。该软件包仅包含两个文件,mplayer.sh 本身和 mplayer.sh.conf,其中包含一些配置选项。如果您的机器太慢而无法使用 MPlayer 播放文件,您应该尝试调整此文件中的设置。
返回到 /usr/src/vdr-1.2.5 并运行runvdr.remote。如果您使用 Red Hat,请设置环境变量 LD_ASSUME_KERNEL=2.4.1,因为 VDR 尚不适用于 Red Hat 在最新版本中引入的本机 posix 层。然后加载 DVB 卡的模块,并启动 VDR。连接您的电视,您应该会看到一个黑屏,提示您定义遥控器上的按键。完成向导后,您就可以观看电视、录制节目和删除广告了。您可以收听 MP3 并观看视频。VDR 的根目录中有一个手册,其中解释了如何使用时移功能录制和编辑电视节目。
如果您对文章即将结束感到失望,请不要担心;您仍然可以做一些可选的事情。自动备份功能有一些限制。虽然 (S)VCD 备份可以完美运行,但 DivX 编码不会裁剪图片以删除黑边(如果存在)。这对比特率、大小和整体图像质量产生了相当负面的影响。如果您真的想要高质量、小尺寸的 MPEG-4,您应该手动备份它。改进的图像质量非常值得付出努力。
VDR 将其录音分成 2GB 的文件,这对于转码视频来说有点不方便。如果您选择手动转换,这将使您更好地控制质量/大小方面,那么 mencoder 或 transcode 是不错的选择。使用快速的 mencoder,我发现它非常适合备份到 MPEG-4,或者使用带有许多工具的 transcode。如果您喜欢“我不想操心”的方法,请获取 VDRCONVERT。README 文件提供了一种非常简单的安装方法,至少您可以在下载和编译时观看一些电视节目。使用 VDRCONVERT,您必须更改一些脚本和配置文件,以使 DVD/(S)VCD 分辨率适应 NTSC,以防您居住的地方不使用 PAL。
遗憾的是,Linux PVR 并不能使电视节目本身变得更好,但我想你不可能拥有一切,对吗?
资源
LIRC: www.lirc.org
MPlayer: www.mplayer.hu
mplayer.sh: batleth.sapienti-sat.org/projects/VDR
VDR 的插件、脚本和补丁: www.vdrportal.de/board/portal_downloads.php?site=6
Christian A. Herzog 是一位程序员,专注于使用开源技术的 Web 开发。他仍在孜孜不倦地追求将基于 Linux 的设备带到他遇到的每个家庭和公司。写信给他:noeffred@gmx.net。