发明内容
为了克服已有的多媒体会议中混音系统的服务器端的CPU负荷较大、混音效率较低的不足,本发明提供了一种能够减少服务器端的CPU负荷、提高混音效率的多媒体会议中分布式混音系统。
本发明解决其技术问题所采用的技术方案是:
一种多媒体会议中分布式混音系统,该混音系统包括语音主服务器、语音子服务器以及客户端,所述的客户端连接语音子服务器、所述语音子服务器连接语音主服务器,所述的客户端包括:
语音采集模块,用于在与会者说话时,传送通话过程中交谈的音频数据流;
语音发送模块,用于将采集的音频数据流通过传输协议对语音帧打包发送到语音子服务器;
所述的语音主服务器与语音子服务器呈树状形的网络;
所述的客户端还包括:
信号能量计算模块,用于在采集到音频数据流之后,计算信号能量E,音频数据流的当前帧的能量E可由以下公式(1)计算获得:
式中,{s[n]}n=0,...,N-1表示音频数据流的输入信号;
语音帧的短时平均能量Energy由相邻两帧的信号能量E1和E2计算得出:
Energy=(E1+E2)/2 (2);
在语音发送模块中,将平均能量存储到打包发送的语音帧的扩展位;
混音模块,用于接收语音子服务器回传的终选的音频数据,送入抖动缓冲区队列,经过解码器解码后送入语音帧缓冲区队列,定时激活混音算法处理程序,混音处理程序从每列语音帧缓冲区中提取最早到达的语音帧,做语音信号混音处理,混音公式表示为(6):
其中,{input[j][i]}i=0,...,N-1表示第J列语音流所包括的语音帧,经解码后得到的语音输入信号;混音处理后的输出结果被放到mixing[i],M表示语音流的总数;
处理完毕送到播放缓冲区队列等待回放;
所述的语音子服务器包括:
语音接收模块,用于接收来自作为发言者的客户端的音频数据流,并解析语音帧的扩展位,获得各音频数据流当前帧的短时平均能量Energy;
初选模块,用于比较各音频数据流的平均能量大小,根据设定的语音流的总数,数选中平均能量最大的音频数据流作为初选结果;
所述的语音主服务器包括:
语音接收模块,用于接收来自各个语音子服务器初选完成的音频数据流,解析语音帧的扩展位,获得各音频数据流当前帧的短时平均能量Energy;
语音活动度量计算模块,用于计算音频数据流的语音活动度量ψ,其算式为(3):
ψ=α1A1+α2A2 (3)
其中A1为当前语音活动,A2为上一次活动;
A1由矩形窗W1计算获得,如下形式(4):
其中,W1即最近语音序列的时间段,tp表示当前的时间段,即当前的矩形窗长度;
A2由矩形窗口W2计算得出,表示成(5):
其中,W2即上上个语音序列的时间段;
终选模块,用于比较各音频数据流的语音活动度量ψ大小,根据设定的语音流的总数,数选中语音活动度量ψ最大的音频数据流作为终选结果;
音频转发模块,用于将终选得到的音频数据转发到客户端。
作为优选的一种方案:所述的客户端包括与语音子服务器连接的客户端A、直接与语音主服务器连接的客户端H;在所述的语音子服务器中,接收来自作为发言者的客户端A的音频数据流;在所述的语音主服务器中,接收各个语音子服务器初选完成的音频流以及客户端H的音频数据流。
作为优选的再一种方案:所述的语音主服务器还包括:语音连续控制模块,用于当前已有三个人正在发言,如第四个人它的活动度量大于前三者的任何一位,控制正在说话的人继续发言;如已经发言的三人中任何一位停止说话,并会选中这第四人,允许该第四人发言。
作为优选的另一种方案:所述的语音主服务器还包括:子服务器转发控制命令模块,用于在主服务器选中的音频流是来自某个子服务器,向该子服务器发送反馈信号,通知它所转发的某个音频流已被选中。
进一步,在所述的语音采集模块中,采用语音检测技术,传送通话过程中的实际交谈的数据;当与会者不说话处于静音时,禁止发送语音包到服务器。
更进一步,在所述的音频转发模块中,将终选得到的音频数据转发到除被选中者之外的其他所有客户端。
本发明的技术构思为:主服务器(Root Server)实现终选算法,而子服务器(Sub Server)采用初步选择算法。
在这个架构中,主服务器(Root Server)和子服务器(Sub Server)组成了一个树状形的网络,实现对各个客户端进行分布式混音处理。客户端既可以直接联到主服务器(Root Server),也可以连到子服务器(Sub Server)。连接到子服务器(Sub Server)的客户端如A1,先发送音频流到子服务器(SubServer1)进行初选,如果被子服务器初选选中,则再转发到主服务器(RootServer)做进一步的选择算法。对于直接连到主服务器的客户端如H1,直接发送音频流到主服务器(Root Server)。主服务接收来自各子服务器(SubServer1,Sub Server2,...Sub Server N)初选后的音频流以及直接相连的音频流(H1,H2...Hn),根据选择算法选出3~5路音频流,再通过子服务器转发回客户端(如A1~An,B1~Bn和C1~Cn),或者直接发回跟它直接相连的客户端(H1,H2.....Hn)。
当一个音频实时传送协义(Real-Time Transport Protocol,RTP)包到达客户端混音模块时,它首先被送入抖动缓冲区队列,经过解码器解码后送入语音帧缓冲区队列(先进先出队列)。一个多媒体定时器将定时激活混音算法处理程序,混音处理程序从每列语音帧缓冲区中提取最早到达的语音帧,做语音信号混音处理,处理完毕送到播放缓冲区队列等待回放。
本发明的有益效果主要表现在:1、能够减少了服务器端的CPU负荷;2、提高了混音效率;3、并能够减少编解码语音数据流带来的时延,提高带宽资源利用率,并且增强服务器的转发能力;4、提高带宽利用率,节省通信资源和麦克风资源(应用产品中都会限制麦克风总数),并且将会使麦克风的切换更加流畅。
具体实施方式
下面结合附图对本发明作进一步描述。
参照图1~图4,一种多媒体会议中分布式混音系统,该混音系统包括语音主服务器、语音子服务器以及客户端.所述的客户端连接语音子服务器、所述语音子服务器连接语音主服务器。
所述的客户端包括:语音采集模块,用于在与会者说话时,传送通话过程中交谈的音频数据流;语音发送模块,用于将采集的音频数据流通过传输协议对语音帧打包发送到语音子服务器;
所述的语音主服务器与语音子服务器呈树状形的网络;所述的客户端还包括:信号能量计算模块,用于在采集到音频数据流之后,计算信号能量E,音频数据流的当前帧的能量E可由以下公式(1)计算获得:
式中,{s[n]}n=0,...,N-1表示音频数据流的输入信号;
语音帧的短时平均能量Energy由相邻两帧的信号能量E1和E2计算得出:
Energy=(E1+E2)/2 (2);
在语音发送模块中,将平均能量存储到打包发送的语音帧的扩展位;混音模块,用于接收语音子服务器回传的终选的音频数据,送入抖动缓冲区队列,经过解码器解码后送入语音帧缓冲区队列,定时激活混音算法处理程序,混音处理程序从每列语音帧缓冲区中提取最早到达的语音帧,做语音信号混音处理,混音公式可以表示为(6):
其中,{input[j][i]}i=0,...,N-1表示第J列语音流所包括的语音帧,经解码后得到的语音输入信号;混音处理后的输出结果被放到mixing[i],M表示语音流的总数;处理完毕送到播放缓冲区队列等待回放;
所述的语音子服务器包括:语音接收模块,用于接收来自作为发言者的客户端的音频数据流,并解析语音帧的扩展位,获得各音频数据流当前帧的短时平均能量Energy;初选模块,用于比较各音频数据流的平均能量大小,根据设定的语音流的总数,数选中平均能量最大的音频数据流作为初选结果;
所述的语音主服务器包括:语音接收模块,用于接收来自各个语音子服务器初选完成的音频数据流,解析语音帧的扩展位,获得各音频数据流当前帧的短时平均能量Energy;语音活动度量计算模块,用于计算音频数据流的语音活动度量ψ,其算式为(3):
ψ=α1A1+α2A2 (3)
其中A1为当前语音活动,A2为上一次活动;
A1由矩形窗W1计算获得,可写成如下形式(4):
其中,W1即最近语音序列的时间段,tp表示当前的时间段,即当前的矩形窗长度;
A2由矩形窗口W2计算得出,表示成(5):
其中,W2即上上个语音序列的时间段;
终选模块,用于比较各音频数据流的语音活动度量ψ大小,根据设定的语音流的总数,数选中语音活动度量ψ最大的音频数据流作为终选结果;音频转发模块,用于将终选得到的音频数据转发到客户端。
所述的客户端包括与语音子服务器连接的客户端A、直接与语音主服务器连接的客户端H;在所述的语音子服务器中,接收来自作为发言者的客户端A的音频数据流;在所述的语音主服务器中,接收各个语音子服务器初选完成的音频流以及客户端H的音频数据流。
图1示出了一个基本的分布式混音架构。在这个架构中,主服务器(RootServer)和子服务器(Sub Server)组成了一个树状形的网络,实现对各个客户端进行分布式混音处理。客户端既可以直接联到主服务器(Root Server),也可以连到子服务器(Sub Server)。连接到子服务器(Sub Server)的客户端如A1,先发送音频流到子服务器(Sub Server1)进行初选,如果被子服务器初选选中,则再转发到主服务器(Root Server)做进一步的选择算法。对于直接连到主服务器的客户端如H1,直接发送音频流到主服务器(RootServer)。主服务接收来自各子服务器(Sub Server1,Sub Server2,...Sub ServerN)初选后的音频流以及直接相连的音频流(H1,H2...Hn),根据选择算法选出3~5路音频流,再通过子服务器转发回客户端(如A1~An,B1~Bn和C1~Cn),或者直接发回跟它直接相连的客户端(H1,H2.....Hn)。
另外,为了保证该方案有效的工作,每一个客户端在采集语音时采用语音检测技术。当与会者不说话处于静音时,不再发送语音包到服务器,只传送通话过程中的实际交谈的数据,从而提高带宽利用率,节省通信资源和麦克风资源(应用产品中都会限制麦克风总数),并且将会使麦克风的切换更加流畅。
每个客户端采集到语音输入信号之后将计算信号能量E,当前帧的能量E可由以下公式计算获得:
式中,{s[n]}n=0,...,N-1表示语音输入信号.每个客户端通过实时传输协议对语音帧打包,每一个RTP包括两个语音帧。语音帧的短时平均能量Energy由相邻两帧的信号能量E1和E2计算得出:
Energy=(E1+E2)/2 (2)
平均能量由两个字节组成,并被存储到RTP头的扩展位里,如图2如示。
子服务器(Sub Server)接收来自各客户端(发言者)的音频数据流,通过解析RTP包获得各音频数据流当前帧的短时平均能量Energy。比较各音频数据流的平均能量大小,选中三个平均能量最大的音频数据流作为初选结果。初选完成后的音频数据流连同该数据流对应的客户端识别号被转发到主服务器(Root Server)。
为确保说话者语音流畅,使正在进行的语音会话不被其他与会者的噪声(环境噪声,麦克风搬动时的磨擦声等)打断,我们定义了一个语音活动度量ψ。它由当前语音活动A1和上一次活动A2决定。
ψ=α1A1+α2A2 (3)
其中A1可以由矩形窗W1(最近语音序列的时间段)计算获得,可写成如下形式:
这里tp表示当前的时间段(矩形窗长度)如图3所示。而矩形窗W1设置成3秒。
A2由上上个语音序列的时间段(矩形窗口W2)计算得出,表示成:
W2设成2秒;这里权值α1可以为0.6,α2为0.4.
主服务器(Root Server)接收所有与它直接相连的客户端音频流以及从子服务器初选完成后的音频流,解析音频流中的RTP包头,获得每个音频流的当前语音帧的短时平均能量。根据公式(3)计算语音活动度量ψ,选出活动度量ψ最大的三条音频流,这三条音频流相对应的发言者认为被真正选中,选中的三条音频流将通过主服务器或者子服务器转发给所有与会者(注:不发给被选中者本身,以减少带宽资源占用)。
为了使每个与会者能清晰的听到发言人的整句话,需要采取策略确保当前发言者的语音不被打断。举个例子,如果当前已经有三个人正在发言,那么即使有第四个人它的活动度量大于前三者的任何一位,这第四个人也不能被选中,以避免打断已经进行的语音交流,而是让正在说话的人继续发言。直到已经发言的三人中任何一位停止说话,服务器才会选中这第四人,充许他/她发言。
另外,如果主服务器选中的音频流是来自某个子服务器,那么主服务器不需要发回该音频流到该子服务器,仅仅通过一个反馈信号通知该子服务器,通知它所转发的某个音频流已被选中。这种措施可以有效的减少声音时延,提高带宽资源利用率,并且增强服务器的转发能力。
图4展示了客户端的混音工作原理。当一个音频RTP包到达客户端混音模块时,它首先被送入抖动缓冲区队列,经过解码器解码后送入语音帧缓冲区队列(先进先出队列)。一个多媒体定时器将定时激活混音算法处理程序,混音处理程序从每列语音帧缓冲区中提取最早到达的语音帧,做语音信号混音处理,处理完毕送到播放缓冲区队列等待回放。
混音公式可以表示为:
其中,{input[j][i]}i=0,...,N-1表示第J列语音流所包括的语音帧,经解码后得到的语音输入信号。混音处理后的输出结果被放到mixing[i]。M表示语音流的总数,这里设成3。