使用开源软件运行网络电台
五位伟大的思想家聚在一起,认为通过互联网进行广播会很酷——就这么简单。五位伟大的思想家很快变成了七位,一个互联网电台 http://www.opensourceradio.com/ 就诞生了。开源社区通过提供所有软件组件使这个互联网电台成为可能。在互联网上广播需要两个主要的硬件组件:广播服务器和编码器客户端。不一定需要分离服务器和客户端,它们可以在同一台机器上运行,但我们选择在两个不同的位置使用两个不同的系统来生成我们的输出。
我们在广播节目中播放 MP3 编码的素材。LAME 和 Liveice 将音频输出转换为 MP3 编码规范,以便任何拥有 xmms 或 Winamp 的人都可以解码我们的信号。目前广播 MP3 编码的素材不需要任何许可,但预计在 2001 年,持有专利的机构将收取版税。您可以在 www.mp3licensing.com 获取有关这些问题的更多信息。如果持有专利的公司收取版税,我们计划转向不同的编码、解码方案。Ogg Vorbis 是一种免专利费和免版税的压缩音频格式器,我们预计在不久的将来将把我们的广播服务器迁移到该格式。Ogg Vorbis 可在 www.xiph.org 获取。此外,MP3 许可不涵盖向公众广播受版权保护的素材的问题,因此如果您计划运营互联网电台,请务必获得广播任何您不拥有版权的内容的许可。
我们使用标准硬件,因为我们很快发现,晦涩难懂的组件会给设置过程带来不必要的延迟。本文的其余部分详细介绍了我们互联网电台中每个组件的设置。我们还描述了我们在过程中遇到的任何问题。请理解,创建互联网电台的方法有数百万种,我们所做的选择并非由于与任何供应商的联盟——我们只是以以下方式使其工作。
图 1 给出了我们网络的概述,该网络从将我们的声音传输到 MP3 播放器开始。我们对着麦克风说话,麦克风将我们的声音转换为模拟信号,混音器将音频流压缩到运行 Liveice 的编码器客户端的线路输入中。Liveice 拾取音频流并使用 LAME 将我们的声音从模拟信号转换为数字信号。然后,Liveice 将我们的数字化音频流发送到互联网上我们定义的运行 Icecast 的广播服务器。Icecast 接收传入的音频流,并将其广播到互联网上的目标地址和端口 www.opensourceradio.com:8000。一旦它在互联网上,任何解码客户端,例如 MP3 播放器,都可以拾取音频流并将我们的数字音频流解码为音频输出。
我们希望立即成功,因此我们购买了一个域名、静态 IP 和一个具有开放端口的服务器。静态 IP 和域名不是必需的,但通过使一切静态化,我们无需在 ISP 每次更改我们的 IP 时都通知我们的听众群。我们还通过 T1 将我们的服务器连接到互联网。这为我们提供了提供高质量广播的带宽。我们的广播服务器 Linux3 和我们的静态 IP 由 www.doitwebcorp.com 提供。该服务器是一台运行 Red Hat Linux 6.2 的标准联网 PC。
我们首先从 www.icecast.org 下载了 Icecast 服务器软件。我们选择使用 1.3.7 版本,因为当时它被认为是可用的最稳定版本。我们使用了默认安装,将二进制文件放在 /usr/local/icecast 中。Icecast 服务器的配置非常简单,您只需要更改一个文件。icecast.conf 文件内容非常丰富。我们更改的部分允许编码器客户端将流式音频发送到将为互联网提供服务的广播服务器。我们的服务器设置为 IP 地址 63.101.145.11,注册域名为 www.opensourceradio.com。如果您将默认的 icecast.conf 文件与我们的示例 icecast.conf 文件进行比较,您将看到我们更改的字段。这只是 icecast.conf 文件的一部分,因为它是一个非常大的文件。
Icecast 非常容易运行。进入您希望广播服务器在其下运行的帐户,然后输入 /usr/local/icecast/bin/icecast。这将您带到 Icecast 服务器上的控制台模式。如果您在控制台中键入“?”,您将看到 Icecast 的所有可用选项。我们想指出的是,从控制台您可以查看何时有人连接到该站点。如果您使用 -b 选项启动 Icecast,它会将控制台推送到后台。图 2 是 Icecast 启动的屏幕截图。
Icecast 控制台是一个强大的工具,允许您控制服务器的所有方面。例如,如果您希望摆脱特定的听众,您可以使用 kick 命令来踢出他们。另一个有用的命令是 dump,它允许您将音频流转储到文件中。完整的命令列表可在 Icecast Web 界面中找到。
Icecast 包括一个基于 Web 的管理界面,可以通过输入 URL http://hostname.domain:port/admin 访问,其中 hostname 是您的 Icecast 服务器,port 是您在 icecast.conf 文件中定义的端口号(请参阅列表 1)。默认情况下,基于 Web 的 Icecast 管理实用程序对任何系统都是完全开放的,因此请务必设置密码。管理页面上的帮助部分详细介绍了如何使用 Web 界面。描述包括从设置用户授权到甚至禁用 Web 界面等主题。Web 界面最有用的功能之一是源和监听器流的动态列表。您可以配置管理页面以满足您的需求。有关更多信息,请参阅管理界面。
互联网上的任何站点都应该关注安全。我们建议您阅读 Icecast 服务器附带的所有安全文档。我们还建议您不要以 root 用户身份运行 Icecast 服务器。您应该以 nobody 或非特权用户身份运行服务器。
我们的设置使用远程编码器客户端,该客户端与我们的 Icecast 服务器不在同一系统上。我们使用 Liveice 客户端软件来生成要流式传输到 Icecast 服务器的输出。我们使用一台标准工作站,名为 zelda,运行 Mandrake Linux 7.2,配备 16 位 SoundBlaster (ES1371) 声卡。我们选择 SoundBlaster 是因为它是一个广为人知且易于支持的硬件,适合我们的用途。
我们通过下载在 http://www.icecast.org/ 的第三方应用程序部分找到的 tar 文件来启动 Liveice 软件安装。我们在 icecast.org 上没有找到 RPM。解压 tar 文件会将文件放在我们当前的工作目录中。Liveice 还要求我们运行 make 来编译二进制文件。README 文件解释了 Liveice 的完整安装过程。我们将文件放在 /usr/local 中,以使事情变得简单,并通过当前路径访问。我们更改了 liveice.cfg 文件以指向广播服务器。您可以将我们的 icecast.conf(上面)和我们的 liveice.cfg(下面)与默认值进行比较,以查看您必须进行更改的位置。Liveice 客户端上的 README 文件更好地解释了每个参数。最重要的参数包括 SERVER、PORT、PASSWORD 和 USE_LAME3。
SERVER 是我们用于设置 Icecast 服务器的服务器名称。PORT 是 Icecast 服务器上的端口号。PASSWORD 字段必须与 Icecast 密码匹配,以允许 Liveice 和 Icecast 之间的套接字连接。字段 USE_LAME3 告诉 Liveice 使用哪个编码器从模拟信号转换为数字信号。我们使用的配置适用于我们的目的,但还有许多其他配置可以实现相同的输出。
################################################ # liveice configuration file ################################################ SERVER www.opensourceradio.com PORT 8002 NAME ReBroadcast of OSR, 10/5/2000 GENRE Live Linux Talk URL www.opensourceradio.com PUBLIC 1 ICY_LOGIN SAMPLE_RATE 24000 STEREO SOUNDCARD FULL_DUPLEX USE_LAME3 lame BITRATE 32000 VBR_QUALITY 1 NO_MIXER PLAYLIST playlist DECODER_COMMAND mpg123 MIX_CONTROL_MANUAL CONTROL_FILE mix_command TRACK_LOGFILE track.log #SAVE_FILE /osr/osr_10_5.mp3
LAME 是我们从 http://www.sulaco.org/ 下载的应用程序,我们将其解压到 /usr/bin/ 目录中。如果您将其放在不在 $PATH 中的目录中,则必须将编码器的完整路径放在 liveice.cfg 文件中。编码器对于将您的声音转换为数字 MP3 格式是必要的,以便 Icecast 服务器接收并通过互联网广播。我们选择使用 LAME,但您可以使用您希望使用的任何编码引擎。
要启动 Liveice,请进入 /usr/local/liveice/bin 并运行 liveice。您必须能够连接到广播服务器才能使 Liveice 正确启动。图 3 是 Liveice 启动时的屏幕截图。
我们购买了一个音频混音器,允许多个麦克风将音频发送到声卡的线路输入端口。xqmixer 识别声卡作为音频输入,以通过 LAME 发送音频流进行编码,并通过 Liveice 客户端发送输出。在 Liveice 客户端接收到输入后,客户端将输出通过互联网流式传输到我们的 Icecast 服务器。Icecast 从 Liveice 接收音频流,并以 MP3 格式将其转发回互联网,以供我们的听众选择使用的任何 MP3 解码器客户端进行解释。Xmms 和 Winamp 似乎是最流行的 MP3 流解码程序。
混音器提供了更广泛的输入选项。我们可以将 CD-ROM、麦克风或 MP3 播放器直接运行到混音器并输出到互联网。开源广播节目运行全范围的输入,以在广播时提供真正的广播感觉。我们使用一个带有六个输入端口的音频混音器。每个主持人都有自己的麦克风,麦克风插入混音器,然后混音器连接到声卡的线路输入端口。任何产生音频输出的设备都可以插入声卡的线路输入端口。
Liveice 需要特定的音频输入质量。声卡在接收输入时,仍然由操作系统内的工具控制。在我们的例子中,我们使用 xqmixer 来控制声卡硬件。在 xqmixer 上,录音音量控制 Liveice 接收为输入的流式传输速率。如果录音音量设置得太低,您将听不到任何输出。如果设置得太高,Liveice 会削波音频。削波是一个音频工程术语,描述了当音频信号对于硬件来说太强而无法处理时会发生什么——它“削掉”了信号的一部分,使其听起来很糟糕。我们通过调整录音音量来调整我们的音质。这很简单:启动您的电台并听听自己的声音。如果您听不到任何声音,请增大录音音量。如果播放出现削波,请减小录音音量,直到您将其调好为止。
http://www.opensourceradio.com/ 节目每周四晚上 8:00 到晚上 10:00(美国东部时间)播出。我们讨论开源问题,并充分利用我们的混音和 MP3 转换功能。任何人都可以做我们所做的事情。除了混音器、计算机硬件和 T1 连接外,一切都是免费的。您可以轻松地从互联网下载所有软件来创建互联网电台。我们还要说,尽管我们的声音如此,但在我们的广播过程中没有小动物受伤。
