直播室热线录音系统设计与实现

2018-12-27 10:54殷轶鸣
声屏世界 2018年9期

殷轶鸣

摘要:文章详细论述了热线录音系统的架构设计及业务流程。该系统改进了之前的工作流程,解决了长期以来各个直播室分开录音,且需要在录音时人工干预的情况。之后介绍了热线录音服务器和录音软件的情况,最后对录音系统的使用情况和未来发展进行了展望。

关键词:直播室热线 录音系统 Linux系统

近年来上海台及一些外地台上线使用了基于Telos Hx6新一代电话耦合器的热线系统。新耦合器在支持传统硬件接听拨打热线电话的同时还开放了电话控制器协议,我们基于此协议设计并实现了运用客户端软件来进行接听拨打热线电话,这个客户端软件大大扩展了传统热线系统功能。

随着新一代热线电话系统投入使用,用户对热线系统录音也有了新的要求。之前的热线录音往往布置在各个直播室并且彼此相互独立,这对系统的维护和管理不利。录音时导播需要打开录音软件手动控制录音过程,操作也不方便。为此我们提出一种新的直播室热线录音系统,将原先各个直播实的录音系统归并到一个系统部署在一台设备上。系统分为录音服务器和录音程序两部分,录音服务器最多支持32路电话录音,配有2T硬盘存储录音文件。录音服务器安装Linux操作系統,录音程序基于Linux系统使用C语言编写。录音文件生成后存放在指定的文件夹下,使用Linux系统的Samba服务供用户访问。

系统的架构设计

以往热线电话录音是在直播室进行电话线分线,一路接电话耦合器,另一路接装有录音程序的工作站。当导播需要录音时,打开录音软件进行录音,录音文件保存在这台工作站上。我们希望电话录音这一过程能够自动进行不需要人工干预,所有直播室的录音在一台服务器上进行,录音文件保存在服务器上,用户通过访问服务器访问录音文件。经过设计热线录音系统的整体拓扑如图1所示。

直播室热线电话由电信运营商提供并接入物业电话机房,我们设计将物业电话线架上的电话线一分二,一路接入直播室,另一路接入数控机房,通过转换器将电话线接入录音服务器。录音服务器部署在数控机房内网,与用户分离,确保了服务器的安全性和运维人员维护的便利性。录音服务器通过内网交换机经防火墙与办公网连接,使得直播室热线电话客户端可以与录音服务器相互访问。

我们希望录音能由程序自动执行。录音程序侦测到听众来电后不立即录音,等待导播拿起电话后才进行录音。导播通话结束后录音程序终止录音过程,保存录音文件。系统流程图如图2所示:

录音卡会实时读取每条热线电话的状态,热线有以下五种状态:0为空闲,1为振铃,2为接起,3为拨打电话,4为挂断。在每个直播室有一台热线客户端装有该直播室的热线数据库,记录该直播室每条热线电话的当前状态和接听记录。录音程序会实时将录音卡读到的热线状态写入数据库。当读到导播接起听电话的状态后,录音程序调用录音卡开始录音并生成文件。当导播挂断电话,录音程序终止录音,将录音文件保存在指定的文件目录下。

录音服务器

录音服务器为一台1U设备,分为左右两部分。左半边安装服务器主板和硬盘存储,安装有Linux操作系统,录音程序就部署在该系统上,我们将程序设置为开机自启动。操作系统我们选用CentOS 6.2,CentOS是Linux发行版本之一,它由来自于Red Hat Enterprise Linux提供的可自由使用源代码所编译而成,是一个企业级Linux发行版本。服务器配有一块2T容量的硬盘存储录音文件,电话录音文件通常采样率不高,所以存储空间基本能满足用户需求。

右半边插有两块各16路的电话录音卡,系统最多支持32路电话录音,录音卡后接有模拟电话线转接的转换器。系统使用前需要安装录音卡驱动并进行相关配置。录音卡厂家提供的驱动目下ShConfig.ini文件是录音卡驱动的配置文件,可直接通过系统自带的Vi编辑器配置或者在CentOS图形界面下通过ShCticonfig程序来配置。通常需要配置TotalBoards和TotalAppCh两个参数,前者表示录音板卡数量,后者表示录音通道数。此外驱动目录下还提供了Test_gtk程序,在图形界面下运行这个程序,可以测试外卡接线路的状态。

服务器还需要安装mysql客户端,因为录音程序需要连接导播室热线客户端电脑的mysql数据库。对于用户访问录音文件,我们使用了CentOS上自带的Samba共享服务。Samba是在Linux系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB协议是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

录音程序和配置

录音程序用C语言编写,主要通过调用录音卡的接口程序来实现录音功能。由于录音程序需要控制所有直播室的热线录音以及将录音文件保存在不同的文件夹下,所以必须让程序知道每个直播室线路的分布状况以及不同录音文件存储路径。为此在录音程序目录设置有一个config.ini的配置文件,此文件写有所有直播室热线电话的情况和热线数据库的信息。这里以两个频率为例,配置文件结构和注释如下:

[init]

recisdo=1 //录音标志 1为录音,0为关闭。

maxtimes=3 //设置振铃三秒,等待导播接起电话

rectype=0

mysqlcount=2 //配置连接数据库数量,也就是频率的数量。

[mysql] //数据库配置

ip0= //数据库地址,应该填写频率0热线主机的ip0地址

username0= //数据库用户名,

password0= //数据库密码,

dbname0= //数据库名称,

ip1= //数据库地址,应该填写频率1热线主机的ip1地址

username1= //数据库用户名,

password1= //数据库密码,

dbname1= //数据库名称,

[channel] //配置频率信息

mysql0=0 //第0号对应mysql配置中ip0的数据库

linenum0=0 //录音卡第0条线对应ip0数据库所在频率的电话耦合器的第0条线

recdir0= //频率0录音文件存储位置

recdays0= //到期删除设置

mysql1=0 //第1号对应mysql数据库配置中ip0的数据库

linenum1=1 //录音卡第1条线对应ip0数据库所在频率的电话耦合器的第1条线

recdir1=

recdays1=60

录音程序启动后先初始化录音板卡,再读取config.ini文件,通过两个函数分别从config.ini文件读取字符串类型和整型类型数据。然后检测各个直播室的热线Mysql数据库服务器是否能连接成功,如果连接不通,则不去连接mysql数据库以防数据库连接超时。录音程序通过函数一直获取录音卡返回的各线路状态,当侦测到有线路振铃后,经过maxtimes等待,录音程序通过调用函数在指定的路径下生成录音文件開始录音,同时根据config.ini文件中的信息,拼出对应的文件名。文件名通常为线路号加上时间戳,以便于用户查找。录音程序循环(通常为2秒)会更新直播室的热线Mysql数据库中线路状态。当导播挂断电话后,录音程序会将热线状态重置为空闲,等待该线路下一次来电。

录音程序还设计了定期清除指定文件下文件的功能,以防止录音文件过多导致磁盘空间不足。通过设置config.ini文件中recdays参数,程序会自动删除指定路径下recdays天前的文件。

总结与展望

采用上述系统后,我们将所有直播室的录音工作整合到一台服务器上,不仅不需要人工干预程序就可以自动执行,还有利于维护和管理。

在目前热线录音系统运行的基础上,我们对系统的未来进行了展望。目前热线电话的数据库是分布独立的,录音程序需要将热线电话的状态分别写入各个频率的热线数据库。之后可以将各个频率的数据库合并成一个数据库,这样对维护和管理是有益的。

(作者单位:上海广播电视台)