1概述。 近年来随着移动互联网的迅速发展,国内外广播电台正在发生着深刻的变革〔8〕。传统广播电台面临着巨大的挑战,如何吸引广大的听众,尤其是吸引广大的移动智能终端的听众,成为了广播电台的最大的问号。随着广播电台节目主持人与听众之间的互动越来越频繁,传统的电台导播模式已无法满足电台节目业务的需求,数字导播系统应用而生。数字导播系统是新媒体变革大趋势中的产物,它有效地解决了传统导播设备无法满足接听大量听众来电的问题,满足了电台和听众对节目形式的多种需求。 随着数字导播的在各家电台的部署和应用,听众参与电台节目变得方便快捷,热线来电的数据统计为节目组提供有用的信息,因此对热线录音系统的研究变得越来越重要。 传统的热线来电录音功能,是由录音服务器直接进行录音的,录音文件资源也集中存储在录音服务器的硬件存储设备中,这时录音服务器就需要很高的性能满足实时的录音和存储大量的录音文件。为了能够减少录音服务器的负荷,同时为了能够保存大量的录音文件资源,通过对录音功能的研究和分析,设计出了分布式的热线录音系统。 该课题根据热线录音的特点,设计了基于硬件语音卡设备的热线录音系统,文件资源分布式地存储在各个频道工作站上。本文将从分布式热线录音系统的相关技术、整体设计和录音系统的实现来进行讲解。 2相关技术介绍。 2。1硬件录音技术的研究和分析。 本课题在频率工作站端的热线语音板卡设备是杭州三汇公司生产的三汇语音卡,使用的是SHT系列SHT2BUSB型号的语音卡,这种型号采用USB接口,符合1。1协议的模拟电话线语音盒,通过配置不同的功能模块,即可实现虚拟电话机、座席、外线接入等功能。该型号的语音卡支持DTMF和FSK模式。采用电信标准的回声抵消算法,支持IP电话应用和语音识别应用的BargeIn。它支持4通道全双工录音放音,不同的通道可以同时进行不同格式的录放音,支持G711Alaw、law、linearPCM、IMAADPCM、MP3、VOX和WINDOWS标准WAV格式,可以方便地使用Cooledit等多种声音工具编辑和播放语音文件。 2。2分布式文件系统(DFS)。 分布式文件系统〔1,2〕(DFS)把一些分散的(分布在局域网内各个计算机上)共享文件夹,集合到一个文件夹内(虚拟文件夹)。利用分布式文件夹,对于用户来说,要访问这些共享文件夹的时候,只要打开这个虚拟共享文件夹,就可以看到所有链接到虚拟共享文件夹内的共享文件夹。用户感觉不到这是一个虚拟的共享文件夹,感觉不到这些文件夹时分散于各个计算机上的。分布式文件系统的好处是:集中访问简化操作,提高文件存取效率。 2。3消息队列和RabbitMQ。 为实现业务服务器系统对频率工作站录音功能的实时控制与管理需要在业务服务器系统与频率工作站之间建立可靠的通信手段以保障控制命令与状态信息的实时交互。在分布式热线录音系统中,使用消息中间件服务器建立了一条基于标准消息队列协议的业务服务器系统与频率工作站交互的通道。 使用AMQP标准协议作为自定义业务协议的承载手段,AMQP是一个提供统一消息服务的应用层标准协议,选用RabbitMQ〔3〕消息队列中间件开源项目作为消息中间件服务器。RabbitMQ消息队列中间件开源项目AMQP的标准实现,RabbitMQ定义了以下重要概念。 (1)Exchange,消息交换机,它指定消息按什么规则,路由到哪个队列。 (2)Queue,消息队列载体,每个消息都会被投入到一个或多个队列。 (3)Binding,绑定,作用是把exchange和queue按照路由规则绑定起来。 (4)RoutingKey,路由关键字,exchange根据路由关键字进行消息投递。 3分布式热线录音系统的整体设计。 3。1分布式热线录音系统的整体设计目标。 数字导播系统是以图形界面实现人机交互,集导播计算机、主持人计算机、导播话机等为一体的数字音频系统。分布式热线录音系统是数字导播系统的业务子系统,实现频率工作站的录音及相关管理功能以及对频率工作站上的录音文件资源进行的管理。分布式热线录音系统由录音服务器、消息中间件服务器、WEB服务器和若干个频率工作站组成,分布式热线录音系统的拓扑图如图1所示。通过对用户需求的调研及详细分析得到了用户的详细需求,并根据用户需求设计了分布式热线录音系统的整体架构。 3。2整体结构设计。 录音服务器的主要功能是提供对频率工作站录音策略的管理功能、提供与频率工作站的交互接口即录音服务接口协议以完成对频率工作站的录音操作的实时控制、提供对频率工作站的录音资源的快速检索能力。 消息中间件服务器建立了一条基于标准消息队列协议的业务服务器系统与频率工作站交互的通道,使用AMQP协议承载录音服务接口协议。 Web服务器主要为业务服务器系统提供Web能力,为用户提供管理分布式热线录音系统的用户界面交互接口。 分布式文件系统(DFS)为分布式录音系统提供了统一的分布式文件管理能力,利用DFS地址映射能力将不同地址的频率工作站映射到统一的域名下面,通过自定义的Uri构造规则实现对频率工作站录音文件的访问及获取,DFS只为分布式录音系统提供了文件管理能力,需要配合其他通信及交互手段实现对频率工作站实时录音的控制功能。 频率工作站是分布式热线录音系统中实现录音操作的独立功能单元。频率工作站依据录音策略对导播热线语音通话进行录音操作。频率工作站录音系统主要包含四个功能模块,各个模块相互配合并利用相关技术实现频率工作站导播热线语音通话的录音功能。 频率工作站的四个业务功能模块分别是: (1)录音服务协议栈模块。 (2)录音策略管理模块。 (3)SIP〔4,5〕终端功能模块。 (4)语音设备控制模块。 分布式热线录音系统的整体结构如图2所示: 4分布式热线录音系统的实现。 4。1频率工作站的实时录音功能的设计。 频率工作站是分布式热线录音系统的录音功能的。实体,本课题讲述的分布式热线录音系统包含有若干个的频率工作站。每一个频率工作站都单独完成热线录音功能和对录音文件资源的存储。频率工作站是由导播计算机和若干部热线座机组成的,这些热线座机通过语音板卡设备与导播计算机进行连接。频率工作站进行热线通话录音的过程是:当听众向某个频率工作站打进热线来电的时候,首先外来热线要与频率工作站的热线接通,接通之后,频率工作站通过各个功能模块相互配合共同完成热线录音功能。录音资源以文件的形式存储在频率工作站的硬件存储设备当中。如图3为频率工作站的拓扑图。 4。2录音服务器业务功能的设计与实现。 录音服务器管理和控制频率工作站按照一定的录音策略进行录音和管理频率工作站上的录音文件。频率工作站能够按照一定的录音策略进行热线录音。设计录音策略表。设计全录音,分时录音等多种录音策略。录音策略信息表的设计如图4所示。 分布式热线录音系统频率工作站的录音文件存储在频率工作站上。通过录音服务器上的录音文件索引信息表来统一管理录音文件,录音服务器和频率工作站上的数据库通过数据库访问的方式进行数据传输,通过访问频率工作站数据库中录音文件索引表,对录音文件进行查询,删除,修改,下载等操作。录音文件索引表的设计如图5所示。 4。3业务服务器系统与频率工作站通信机制的设计与实现。 本课题使用AMQP标准协议作为自定义业务协议的承载手段,AMQP是一个提供统一消息服务的应用层标准协议,选用Rabbitmq消息队列中间件开源项目作为消息中间件服务器。 在消息队列服务的基础上根据分布式热线录音系统的整体设计及通信需要设计了自定义业务协议,热线录音接口协议。热线录音接口协议RSI(RecordServiceInterface)对业务服务器系统与频率工作站间的通信过程和类型进行了分类与描述,业务服务器与频率工作站通过RSI协议可以完成状态变化的通知,业务功能执行等功能。 RSI将业务服务器与频率工作站间的交互分为事件、命令、请求及响应几种类型。 事件:表示功能实体产生某些需要由接收者了解的信息。 命令:表示功能实体要求立即实现某种操作。 请求及响应:表示功能实体发出请求消息,并且期待产生相应的反应。 RSI相关协议如表1。 4。4语音板卡设备录音功能的设计与实现。 频率工作站是实现语音板卡设备录音功能的载体。(SIPAgent)是若干封装了SIPHelloSDK。dllAPI的SIP代理,用于和其他SIP终端之间的语音交互〔7〕。板卡控制模块(CardManager)是封装了SHPA3。dllAPI的基于三汇语音板卡的驱动控制程序,主要负责控制话机的行为及状态,接收话机的行为及状态,以及对话机进行内存录音,放音的操作。SIPAgent进程与板卡控制进程通过基于UDP的进程间通信协议(IPC协议)进行进行相关业务信息,电话控制信息,状态信息与初始化信息的交互,同时SIPAgent进程还会与其他控制进程进一步交互。详细的IPC协议如表2所示。 建立SIPAgent进程和语音板卡设备之间的连接主要分为两个步骤:(1)初始化阶段。CardManager先启动,检测自身和SIPAgent的UDP消息端口是否可用,若SIPAgent的UDP消息端口被占用,则重新申请一个可用的UDP端口,开启守护进程。成功后,板卡驱动进程先启动,向SIPAgent发送IPC协议23(UDPList)〔9,10〕,若某些SIPAgent进程未启动,就不会收到响应。此时SIP代理进程启动并发送(Request),CardManager收到请求并发送(Response),完成对应信息的初始化。(2)语音数据传输阶段。SIP代理进程在初始化时会从数据库或XML配置文件中读取SIP代理进程板卡通道对应关系,因此SIP代理进程已知自己对应的通道。将SIPServer服务器接入的语音数据接入到SIPAgent。SIPAgent将语音数据通过语音UDP端口发送给CardManager。SIPAgent的Socket绑定相应的UDP端口,CardManager中通道对应的语音UDP端口始终处于监听(Listen)状态,当监听到发送来的语音数据后,接受语音数据并将其存放到相应通道对应的环状缓冲区中,同时获取到SIP代理进程对应的IP和UDP语音端口,以便向其发送语音消息。 语音数据具体的传输方式是:在内存中建立3个录音缓冲区和3个放音缓冲区,用来对通道话机进行录音放音操作。环状缓冲区在开始接受一定数据后,触发响应的通知(BufferNotice),这时就开启乒乓内存的录音和放音。首先从换装缓冲区中取出一段语音数据存入放音缓冲区1和放音缓冲区2中,当缓冲区完成录音放音操作而终止时,会调用任务开始时设置的回调函数。回调函数会分配给下一个缓冲区3新的录音和放音任务。三个缓冲区是互不干扰的,会出现123123交替工作的状态,提高了多线程的读写效率。三个录音缓冲区也是相同的工作原理,只不过录音缓冲区的语音数据会直接发送到SIPAgent的语音UDP端口,然后通过网路将语音数据发送到SIPServer上。在录音数据的传输过程中,通过录音模块分别获取内存中录音和放音缓冲区内的音频数据,按照乒乓录音的过程进行录音,并且录制成wav格式的音频文件存储到频率工作站指定的Record文件夹下。 5结束语。 本文通过对热线录音系统的调研,并且对Rabbitmq和SIP终端程序与语音板卡连接的研究,设计了分布式的热线录音系统的整体框架。首先对分布式热线录音系统整体框架进行了分析和设计,接着对几个重要的技术模块进行了详细的分析和设计,逐步完成了对整个热线录音系统的设计。 参考文献 1李龙来,吴杰,吕智慧,杨明。基于Web服务的分布式文件系统管理与优化方案。计算机工程与设计,2012,33(1):5862。 2方君,陈华平,宋浒,刘晓茜。分布式文件系统KDFS的设计与实现。华中科技大学学报(自然科学版),2010,38(增刊I)。 3袁佳,郭燕慧。基于Rabbitmq的海量日志的分布式处理。软件,2013,34(7):1923。 4刘舒然。基于SIP协议的即时通信系统的设计与实现〔硕士学位论文〕。北京:北京交通大学。2012。 5王卓毅。基于SIP协议的网络电话设计与实现〔硕士学位论文〕。西安:西安电子科技大学。2012。 6高晓婷。基于AMQP的信息发布与订阅〔硕士学位论文〕。杭州:浙江工业大学。2013。