CN105743889B - 一种基于webrtc实现多方音频通话的方法以及系统 - Google Patents
一种基于webrtc实现多方音频通话的方法以及系统 Download PDFInfo
- Publication number
- CN105743889B CN105743889B CN201610055005.3A CN201610055005A CN105743889B CN 105743889 B CN105743889 B CN 105743889B CN 201610055005 A CN201610055005 A CN 201610055005A CN 105743889 B CN105743889 B CN 105743889B
- Authority
- CN
- China
- Prior art keywords
- speech frame
- frame
- pointer
- directed toward
- audio
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 33
- 230000037361 pathway Effects 0.000 claims abstract description 14
- 230000000977 initiatory effect Effects 0.000 claims description 4
- 230000006854 communication Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000007792 addition Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000005111 flow chemistry technique Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/1066—Session management
- H04L65/1069—Session establishment or de-establishment
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10L—SPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
- G10L19/00—Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
- G10L19/04—Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
- G10L19/16—Vocoder architecture
- G10L19/18—Vocoders using multiple modes
- G10L19/20—Vocoders using multiple modes using sound class specific coding, hybrid encoders or object based coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/40—Support for services or applications
- H04L65/403—Arrangements for multi-party communication, e.g. for conferences
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Signal Processing (AREA)
- Multimedia (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computational Linguistics (AREA)
- General Business, Economics & Management (AREA)
- Business, Economics & Management (AREA)
- Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- Acoustics & Sound (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明提供一种基于webrtc实现多方音频通话的方法,发起端与n个参与端发起通话,建立n路语音通路;发起端开辟缓冲区,发起端将n个参与端的音频编码数据存入缓冲区,并采集发起端的音频编码数据;其中音频编码数据为16bit的语音帧;将n+1个音频编码数据扩展为32bit的数据,分别存储到n+1个变量中;将n+1个变量逐一累加得到和值;发起端将所述和值减去所要发送的参与端的变量得到一发送值;将所述发送值重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;本发明还提供一种基于webrtc实现多方音频通话的系统,节约了资源,并使得更多人参与通话。
Description
技术领域
本发明涉及一种基于webrtc实现多方音频通话的方法以及系统。
背景技术
WebRTC是一项在浏览器内部进行实时视频和音频通信的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得一项技术。它是一系列技术的组合,能在端到端之间实现实时、低延时的通信,可以用于视频和音频会议以及游戏。虽然通常都使用WebSockets来实现实时通信,但WebRTC却尝试通过直接在端到端之间建立连接来显著地降低延迟。
一对一的视频和音频通话使用WebRTC来实现是最简单的。但多方通话较难实现,如图1所示,一种方法是所有参与者两两相连,但由于WebRTC终端的CPU占用率过高和带宽的限制,这种方法不能供超过5-6人使用。如图2所示,另一种方法是使用一个外设服务器,聚集所有的流,以合并成单一流的方式将其广播到所有其他参与者,但这种方法往往需要在终端之外再搭建一个中间服务器,造成资源的浪费。
发明内容
本发明要解决的技术问题,在于提供一种基于webrtc实现多方音频通话的方法以及系统,节约了资源,并使得更多人参与通话。
本发明之一是这样实现的:一种基于webrtc实现多方音频通话的方法,包括如下步骤:
步骤1、发起端与n个参与端发起通话,建立n路语音通路;
步骤2、发起端开辟缓冲区,发起端将n个参与端的音频编码数据存入缓冲区,并采集发起端的音频编码数据;其中音频编码数据为16bit的语音帧;
步骤3、将n+1个音频编码数据扩展为32bit的数据,分别存储到n+1个变量中;
步骤4、将n+1个变量逐一累加得到和值;
步骤5、发起端将所述和值减去所要发送的参与端的变量得到一发送值;
步骤6、将所述发送值重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
步骤7、发起端重复步骤5和步骤6,直至发起端将所有对应的音频帧发送至对应的参与端。
进一步地,所述步骤1进一步具体为:发起端与n个参与端发起通话,建立n路语音通路,并为发起端和n个参与端设置一权重因子,所述权重因子小于等于1。
进一步地,所述步骤2进一步具体为:发起端开辟n个环形缓冲区,每个所述环形缓冲区设有一读取指针和写入指针,发起端将n个参与端的音频编码数据分别往所述参与端对应的环形缓冲区填充,之后将各环形缓冲区的写入指针指向距离填充完成时间最近的语音帧,并采集发起端的音频编码数据;将各个音频编码数据乘以其对应的权重因子;其中音频编码数据为16bit的语音帧。
进一步地,所述步骤2与步骤3之间还包括一步骤a:
在读取环形缓冲区中的语音帧前校准读取指针的位置,将读取指针前移一位;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,若时间间隔小于限定时间,则直接读取读取指针所指向的语音帧;若时间间隔大于等于限定时间,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,此时读取指针指向的语音帧已被读取过,则直接读取写入指针所指向的语音帧,若该语音帧已被反复读取了m次,则直接略过该环形缓冲区内的语音帧,直至该环形缓冲区内的有新的语音帧填充;
其中m为正整数。
进一步地,所述步骤a中,限定每个语音帧的时间长度为T ms,若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间;
若时间间隔小于15*T ms,则直接读取读取指针所指向的语音帧;但时间间隔大于等于15*T ms,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧。
进一步地,所述步骤6进一步具体为:所述发送值,
若不在[-32768,32767]之间,则直接将发送值赋值为极限值,之后重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
若在[-32768,32767]之间,则直接将发送值转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端。
本发明之二是这样实现的:一种基于webrtc实现多方音频通话的系统,包括如下模块:
发起模块,发起端与n个参与端发起通话,建立n路语音通路;
收集数据模块,发起端开辟缓冲区,发起端将n个参与端的音频编码数据存入缓冲区,并采集发起端的音频编码数据;其中音频编码数据为16bit的语音帧;
扩展模块,将n+1个音频编码数据扩展为32bit的数据,分别存储到n+1个变量中;
混音模块,将n+1个变量逐一累加得到和值;
发送值获取模块,发起端将所述和值减去所要发送的参与端的变量得到一发送值;
发送模块,将所述发送值重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
完成模块,发起端重复发送值获取模块和发送模块,直至发起端将所有对应的音频帧发送至对应的参与端。
进一步地,所述发起模块进一步具体为:发起端与n个参与端发起通话,建立n路语音通路,并为发起端和n个参与端设置一权重因子,所述权重因子小于等于1。
进一步地,所述收集数据模块进一步具体为:发起端开辟n个环形缓冲区,每个所述环形缓冲区设有一读取指针和写入指针,发起端将n个参与端的音频编码数据分别往所述参与端对应的环形缓冲区填充,之后将各环形缓冲区的写入指针指向距离填充完成时间最近的语音帧,并采集发起端的音频编码数据;将各个音频编码数据乘以其对应的权重因子;其中音频编码数据为16bit的语音帧。
进一步地,所述收集数据模块与扩展模块之间还包括一读取模块:
在读取环形缓冲区中的语音帧前校准读取指针的位置,将读取指针前移一位;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,若时间间隔小于限定时间,则直接读取读取指针所指向的语音帧;若时间间隔大于等于限定时间,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,此时读取指针指向的语音帧已被读取过,则直接读取写入指针所指向的语音帧,若该语音帧已被反复读取了m次,则直接略过该环形缓冲区内的语音帧,直至该环形缓冲区内的有新的语音帧填充;
其中m为正整数。
进一步地,所述读取模块中,限定每个语音帧的时间长度为T ms,若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间;
若时间间隔小于15*T ms,则直接读取读取指针所指向的语音帧;但时间间隔大于等于15*T ms,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧。
进一步地,所述发送模块进一步具体为:所述发送值,
若不在[-32768,32767]之间,则直接将发送值赋值为极限值,之后重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
若在[-32768,32767]之间,则直接将发送值转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端。
本发明具有如下优点:本发明一种基于webrtc实现多方音频通话的方法以及系统,实现多达8人的实时语音通话,直接将其中一名参与者作为通话发起人,且把他的WebRTC终端当作中间服务器,负责混音并广播到所有其他参与者,能够使所有其他参与者只需要连接到发起人即可,减少了其他参与者CPU资源的消耗和带宽的浪费。同时,本发明提供的混音算法可以有效减小语音的失真和延时,并减小所述通话发起人WebRTC终端的CPU资源占用率。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1是基于WebRTC的一种所有参与者两两相连的多方通话模型。
图2是基于WebRTC的一种通过第三方外设服务器实现多方通话的模型。
图3是本发明一种具体实施方式的八方通话的模型。
图4是本发明一种具体实施方式的八方通话音频数据在WebRTC处理流程示意图。
图5是本发明一种具体实施方式的减少混音失真方法的流程示意图。
图6是本发明一种具体实施方式的减小混音时延方法的流程示意图。
图7是本发明基于webrtc实现多方音频通话的方法的流程图。
具体实施方式
如图7所示,本发明基于webrtc实现多方音频通话的方法,包括如下步骤:
步骤1、发起端与n个参与端发起通话,建立n路语音通路:发起端与n个参与端发起通话,建立n路语音通路,并为发起端和n个参与端设置一权重因子,所述权重因子小于等于1;
步骤2、发起端开辟缓冲区,发起端将n个参与端的音频编码数据存入缓冲区,并采集发起端的音频编码数据;其中音频编码数据为16bit的语音帧:发起端开辟n个环形缓冲区,每个所述环形缓冲区设有一读取指针和写入指针,发起端将n个参与端的音频编码数据分别往所述参与端对应的环形缓冲区填充,之后将各环形缓冲区的写入指针指向距离填充完成时间最近的语音帧,并采集发起端的音频编码数据;将各个音频编码数据乘以其对应的权重因子;其中音频编码数据为16bit的语音帧;
步骤a:在读取环形缓冲区中的语音帧前校准读取指针的位置,将读取指针前移一位;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,若时间间隔小于限定时间,则直接读取读取指针所指向的语音帧;若时间间隔大于等于限定时间,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,此时读取指针指向的语音帧已被读取过,则直接读取写入指针所指向的语音帧,若该语音帧已被反复读取了m次,则直接略过该环形缓冲区内的语音帧,直至该环形缓冲区内的有新的语音帧填充;
其中m为正整数;所述步骤a中,限定每个语音帧的时间长度为T ms,若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间;
若时间间隔小于15*T ms,则直接读取读取指针所指向的语音帧;但时间间隔大于等于15*T ms,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧;
步骤3、将n+1个音频编码数据扩展为32bit的数据,分别存储到n+1个变量中;
步骤4、将n+1个变量逐一累加得到和值;
步骤5、发起端将所述和值减去所要发送的参与端的变量得到一发送值;
步骤6、将所述发送值重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端:所述发送值,若不在[-32768,32767]之间,则直接将发送值赋值为极限值,之后重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
若在[-32768,32767]之间,则直接将发送值转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
步骤7、发起端重复步骤5和步骤6,直至发起端将所有对应的音频帧发送至对应的参与端。
本发明之二是这样实现的:一种基于webrtc实现多方音频通话的系统,包括如下模块:
发起模块,发起端与n个参与端发起通话,建立n路语音通路:发起端与n个参与端发起通话,建立n路语音通路,并为发起端和n个参与端设置一权重因子,所述权重因子小于等于1;
收集数据模块,发起端开辟缓冲区,发起端将n个参与端的音频编码数据存入缓冲区,并采集发起端的音频编码数据;其中音频编码数据为16bit的语音帧:发起端开辟n个环形缓冲区,每个所述环形缓冲区设有一读取指针和写入指针,发起端将n个参与端的音频编码数据分别往所述参与端对应的环形缓冲区填充,之后将各环形缓冲区的写入指针指向距离填充完成时间最近的语音帧,并采集发起端的音频编码数据;将各个音频编码数据乘以其对应的权重因子;其中音频编码数据为16bit的语音帧;
读取模块:在读取环形缓冲区中的语音帧前校准读取指针的位置,将读取指针前移一位;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,若时间间隔小于限定时间,则直接读取读取指针所指向的语音帧;若时间间隔大于等于限定时间,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,此时读取指针指向的语音帧已被读取过,则直接读取写入指针所指向的语音帧,若该语音帧已被反复读取了m次,则直接略过该环形缓冲区内的语音帧,直至该环形缓冲区内的有新的语音帧填充;
其中m为正整数;所述读取模块中,限定每个语音帧的时间长度为T ms,若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间;
若时间间隔小于15*T ms,则直接读取读取指针所指向的语音帧;但时间间隔大于等于15*T ms,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧;
扩展模块,将n+1个音频编码数据扩展为32bit的数据,分别存储到n+1个变量中;
混音模块,将n+1个变量逐一累加得到和值;
发送值获取模块,发起端将所述和值减去所要发送的参与端的变量得到一发送值;
发送模块,将所述发送值重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端:所述发送值,若不在[-32768,32767]之间,则直接将发送值赋值为极限值,之后重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
若在[-32768,32767]之间,则直接将发送值转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
完成模块,发起端重复发送值获取模块和发送模块,直至发起端将所有对应的音频帧发送至对应的参与端。
本发明一种具体实施方式如下:
为实现八方实时语音通话,本发明所述方法如下:
任意选取一名通话参与者作为通话发起人,发起人给八个通话参与者分别设置一个权重因子(权重因子小于等于1),然后向所有其他参与者发起呼叫,由此建立7路通话。
发起人的音频播放线程解码所有其他参与者的音频编码数据为16bit的语音帧,并分别存储到七个环形缓冲区中,且每个缓冲区分别拥有一个读取指针和一个写入指针,写入数据后更新写入指针。
在发起人的音频采样线程获取到语音帧之后,语音帧被编码发送之前,先校准各缓冲区的读取指针,之后分别取出所有其他参与者的16bit的语音帧,将其乘以各参与者对应的权重因子,并扩展为32bit的数据,然后分别存储到7个变量中。
同样,将发起人的语音帧也扩展为32bit的数据,并与上述的7个变量逐一累加,得到一个32bit和值。
选取一名非发起人的参与者,将上述的和值减去上述七个变量中该参与者对应的变量,得到将要传输给该参与者的32bit的混音数据。将这个32bit混音数据做压限处理,并将它重新转换为16bit的音频帧就可以编码发送给所对应的参与者了。
最后,分别更新七个环形缓冲区的读取指针。
为有效减少混音造成的语音失真,本发明提供了一种方法,该方法如下:
发起人在混音之前先将各语音帧扩展为32bit的语音数据,之后将所有参与者的语音帧逐一累加,得到一个和值,规避16bit每一步累加都可能造成的16bit二进制溢出。
将这个和值减去参与者自身的32bit语音数据,得到将要传输给该参与者的32bit的混音数据。
对上述32bit的混音数据做阈值判定,不在[-32768,32767]范围内,直接将混音数据赋值为极限值,最后将该32bit的混音数据转换为16bit,就得到了需要输出的语音帧。
为有效减小混音造成的语音时延,本发明提供了一种方法,该方法如下:
通话发起人开辟七个可以存储超过100个语音帧的环形缓冲区,分别设置一个读取标志和一个写入标志。
发起人保存每一路通话接收到的语音帧,分别往该路通话参与者所对应的环形缓冲区中填充,之后将各环形缓冲区的写入指针指向距离填充完成时间最近的语音帧。
发起人准备发送语音帧给其他各参与者前,先校准各缓冲区的读取指针,将读取指针前移一位。若读取指针领先于写入指针,说明对应语音通路的语音帧不足发生下溢(underflow),那么将读取指针重新指向写入指针,用旧的语音帧弥补缺失的语音,且同一旧语音帧只能被复用三次,超过三次则直接掠过该环形缓冲区,直至有新的语音帧插入;若读取指针落后于写入指针的距离较远,则说明对应语音通路的语音帧发生溢出(overflow),那么对准备读取的语音帧做阈值判定,小于阈值则忽略该帧直接读取下一帧,由此减小混音的延时。最后,读取指针指向最近读取的语音帧。
六、具体实施方式:为了更清楚地说明本发明的技术方案,下面将以一个实例对附图作简单地介绍。对于本领域普通技术人员来讲,本发明不仅仅局限于WebRTC,它核心的多方语音混音方法适用于任何需要用到多方通话的软件或设备。
这个实例所采用的八方通话模型如图3所示,A作为通话发起人,先给每个通话参与者设置一个权重因子(a、b...h),用以表示参与者在混音中的音量(权重因子不大于1),然后呼叫所有其他参与者(B、C、D、E、F、G和H),总共建立七路语音通路。
一种呼叫方法是采用“群呼”的方式,同时向所有其他参与者发起呼叫,等待对方接听,建立语音通路。另一种是采用“逐一呼”的方式,先向其中一名参与者发起呼叫,对方接听后再呼下一名,如此反复,直至建立所有通路。
所有通路建立之后,A按照图4所示的流程处理自身采集的16bit音频帧和七个通路中接收到16bit音频帧,具体流程如下:
步骤401,A在创建每个语音通路的同时给每个通路开辟一段环形缓冲区,并初始化读取指针R和写入指针W,R/W开始指向同一位置。之后A的WebRTC音频接收播放线程每解码一个语音帧就放入相应的环形缓冲区,随后更新W,比如A收到B传来的n个语音帧,A按先到先存的原则将它们存储到B对应的环形缓冲区中,并将W指向最晚接收到的语音帧。
步骤402,按照图5的处理流程,A的WebRTC音频采集发送线程先获取要读取的16bit语音帧(Xb1、Xc1、Xd1、Xe1、Xf1、Xg1、Xh1),将它们分别乘以对应的权重因子,之后扩展为32bit的数据(Xb2、Xc2、Xd2、Xe2、Xf2、Xg2、Xh2),这样可以确保后面的累加过程不会溢出。
步骤403,需要说明的是发起人A的16bit语音帧也要做上述的处理。
步骤404,逐一累加所有的32bit的语音数据,得到一个和值(Xa2+Xb2+Xc2+Xd2+Xe2+Xf2+Xg2+Xh2)。
步骤405,步骤406,将和值减去Xb2后做阈值判定,大于32767则赋为32767,小于-32768则赋为-32768,然后将得到的值缩位回16bit,最后编码打包发送给B。
再重复六次步骤405和步骤406,分别将处理后的语音帧编码打包发送给C、D、E、F、G和H。
综上所述,本实例提供了一种基于WebRTC实现八方音频通话的方法,这个方法只需要简单地执行8次16bit到32bit数据的来回转换、8个加法和7次减法,即可实现语音的混音操作,减少了WebRTC程序的CPU占用率,且不用额外添加服务器合成混音流。
图6是步骤402的一个应用实例,用来说明本发明提供的一种用于获取各环形缓冲区语音帧的方法。具体包括:
发起人针对每路通话开辟一个可以存储超过100个语音帧的环形缓冲区,并分别添加一个读取指针R和写入指针W,之后交给写入流程和读取流程操作。
需要说明,在该实例中,每个语音帧的时间长度为20ms,设置的声音阈值为27。
在读取环形缓冲区中的语音帧前校准读取指针R的位置,先将R+1。
若R指向的语音帧的获取时间早于W指向的语音帧的获取时间,且时间间隔小于15x20ms,则直接读取R所指向的语音帧。
若R指向的语音帧是已经被读取过,则直接读取W所指向的语音帧,若该语音帧已经被反复读取了三次以上,则直接略过该环形缓冲区内的语音帧,除非它得到了更新。
若R指向的语音帧的获取时间早于W指向的语音帧的获取时间,但时间间隔大于15x20ms,那么就需要判断R指向的语音帧的最大峰值是否大于27,是则继续传输该语音帧,否则直接略过该帧传输下一语音帧。人在通话过程的发声必然是有停顿的,通过调整R略过极少部分声音微弱几乎听不到的语音帧来不断缩进R和W的距离,实现了减小混音时延的目的。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (6)
1.一种基于webrtc实现多方音频通话的方法,其特征在于:包括如下步骤:
步骤1、发起端与n个参与端发起通话,建立n路语音通路,并为发起端和n个参与端设置一权重因子,所述权重因子小于等于1;
步骤2、发起端开辟n个环形缓冲区,每个所述环形缓冲区设有一读取指针和写入指针,发起端将n个参与端的音频编码数据分别往所述参与端对应的环形缓冲区填充,之后将各环形缓冲区的写入指针指向距离填充完成时间最近的语音帧,并采集发起端的音频编码数据;将各个音频编码数据乘以其对应的权重因子;其中音频编码数据为16bit的语音帧;
步骤a、在读取环形缓冲区中的语音帧前校准读取指针的位置,将读取指针前移一位;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,若时间间隔小于限定时间,则直接读取读取指针所指向的语音帧;若时间间隔大于等于限定时间,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,此时读取指针指向的语音帧已被读取过,则直接读取写入指针所指向的语音帧,若该语音帧已被反复读取了m次,则直接略过该环形缓冲区内的语音帧,直至该环形缓冲区内的有新的语音帧填充;其中m为正整数;
步骤3、将n+1个音频编码数据扩展为32bit的数据,分别存储到n+1个变量中;
步骤4、将n+1个变量逐一累加得到和值;
步骤5、发起端将所述和值减去所要发送的参与端的变量得到一发送值;
步骤6、将所述发送值重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
步骤7、发起端重复步骤5和步骤6,直至发起端将所有对应的音频帧发送至对应的参与端。
2.根据权利要求1所述的一种基于webrtc实现多方音频通话的方法,其特征在于:所述步骤a中,限定每个语音帧的时间长度为T ms,若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间;
若时间间隔小于15*T ms,则直接读取读取指针所指向的语音帧;但时间间隔大于等于15*T ms,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧。
3.根据权利要求1所述的一种基于webrtc实现多方音频通话的方法,其特征在于:所述步骤6进一步具体为:所述发送值,
若不在[-32768,32767]之间,则直接将发送值赋值为极限值,之后重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
若在[-32768,32767]之间,则直接将发送值转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端。
4.一种基于webrtc实现多方音频通话的系统,其特征在于:包括如下模块:
发起模块,发起端与n个参与端发起通话,建立n路语音通路,并为发起端和n个参与端设置一权重因子,所述权重因子小于等于1;
收集数据模块,发起端开辟n个环形缓冲区,每个所述环形缓冲区设有一读取指针和写入指针,发起端将n个参与端的音频编码数据分别往所述参与端对应的环形缓冲区填充,之后将各环形缓冲区的写入指针指向距离填充完成时间最近的语音帧,并采集发起端的音频编码数据;将各个音频编码数据乘以其对应的权重因子;其中音频编码数据为16bit的语音帧;
读取模块,在读取环形缓冲区中的语音帧前校准读取指针的位置,将读取指针前移一位;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,若时间间隔小于限定时间,则直接读取读取指针所指向的语音帧;若时间间隔大于等于限定时间,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧;
若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间,此时读取指针指向的语音帧已被读取过,则直接读取写入指针所指向的语音帧,若该语音帧已被反复读取了m次,则直接略过该环形缓冲区内的语音帧,直至该环形缓冲区内的有新的语音帧填充;其中m为正整数;
扩展模块,将n+1个音频编码数据扩展为32bit的数据,分别存储到n+1个变量中;
混音模块,将n+1个变量逐一累加得到和值;
发送值获取模块,发起端将所述和值减去所要发送的参与端的变量得到一发送值;
发送模块,将所述发送值重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
完成模块,发起端重复发送值获取模块和发送模块,直至发起端将所有对应的音频帧发送至对应的参与端。
5.根据权利要求4所述的一种基于webrtc实现多方音频通话的系统,其特征在于:所述读取模块中,限定每个语音帧的时间长度为T ms,若读取指针指向的语音帧的获取时间早于写入指针指向的语音帧的获取时间;
若时间间隔小于15*T ms,则直接读取读取指针所指向的语音帧;但时间间隔大于等于15*T ms,所述读取指针指向的语音帧的最大峰值是否大于声音阈值;是,则继续传输该语音帧;否,则直接略过该帧传输下一语音帧。
6.根据权利要求4所述的一种基于webrtc实现多方音频通话的系统,其特征在于:所述发送模块进一步具体为:所述发送值,
若不在[-32768,32767]之间,则直接将发送值赋值为极限值,之后重新转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端;
若在[-32768,32767]之间,则直接将发送值转换为16bit的音频帧,通过发起端将该音频帧打包发送至对应的参与端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610055005.3A CN105743889B (zh) | 2016-01-27 | 2016-01-27 | 一种基于webrtc实现多方音频通话的方法以及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610055005.3A CN105743889B (zh) | 2016-01-27 | 2016-01-27 | 一种基于webrtc实现多方音频通话的方法以及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105743889A CN105743889A (zh) | 2016-07-06 |
CN105743889B true CN105743889B (zh) | 2019-05-17 |
Family
ID=56247804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610055005.3A Active CN105743889B (zh) | 2016-01-27 | 2016-01-27 | 一种基于webrtc实现多方音频通话的方法以及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105743889B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107578783A (zh) * | 2017-08-14 | 2018-01-12 | 上海定菱网络科技有限公司 | 音视频直播中的音频降噪方法及系统、存储器及电子设备 |
CN107682657B (zh) * | 2017-09-13 | 2020-11-10 | 中山市华南理工大学现代产业技术研究院 | 一种基于WebRTC的多人语音视频通话方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101252452A (zh) * | 2007-03-31 | 2008-08-27 | 红杉树(杭州)信息技术有限公司 | 一种多媒体会议中分布式混音系统 |
CN103596641A (zh) * | 2012-10-18 | 2014-02-19 | 华为终端有限公司 | 一种音频管理方法及装置 |
CN104539816A (zh) * | 2014-12-25 | 2015-04-22 | 广州华多网络科技有限公司 | 一种多方语音通话的智能混音方法及装置 |
CN104780335A (zh) * | 2015-03-26 | 2015-07-15 | 中兴通讯股份有限公司 | 一种WebRTC P2P音视频通话的方法及装置 |
CN104902111A (zh) * | 2014-03-06 | 2015-09-09 | 华为技术有限公司 | 一种基于Web RTC多方通话建立的方法、设备和系统 |
CN104969530A (zh) * | 2013-02-04 | 2015-10-07 | 华为技术有限公司 | 在无预定义呼叫信令协议的情况下在浏览器之间发起呼叫的机制 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9113030B2 (en) * | 2013-07-25 | 2015-08-18 | Verizon Patent And Licensing Inc. | Multimedia-enhanced emergency call systems |
US9578161B2 (en) * | 2013-12-13 | 2017-02-21 | Nxp B.V. | Method for metadata-based collaborative voice processing for voice communication |
-
2016
- 2016-01-27 CN CN201610055005.3A patent/CN105743889B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101252452A (zh) * | 2007-03-31 | 2008-08-27 | 红杉树(杭州)信息技术有限公司 | 一种多媒体会议中分布式混音系统 |
CN103596641A (zh) * | 2012-10-18 | 2014-02-19 | 华为终端有限公司 | 一种音频管理方法及装置 |
CN104969530A (zh) * | 2013-02-04 | 2015-10-07 | 华为技术有限公司 | 在无预定义呼叫信令协议的情况下在浏览器之间发起呼叫的机制 |
CN104902111A (zh) * | 2014-03-06 | 2015-09-09 | 华为技术有限公司 | 一种基于Web RTC多方通话建立的方法、设备和系统 |
CN104539816A (zh) * | 2014-12-25 | 2015-04-22 | 广州华多网络科技有限公司 | 一种多方语音通话的智能混音方法及装置 |
CN104780335A (zh) * | 2015-03-26 | 2015-07-15 | 中兴通讯股份有限公司 | 一种WebRTC P2P音视频通话的方法及装置 |
Non-Patent Citations (1)
Title |
---|
《基于WebRTC语音引擎的会议混音技术研究》;王亚辉;《中国优秀硕士学位论文全文数据库》;20131231;第I136-1154页 |
Also Published As
Publication number | Publication date |
---|---|
CN105743889A (zh) | 2016-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE60215967T2 (de) | Kommunikationsgerät, transkodereinheit und verfahren zur verarbeitung von rahmen die einer vielzahl von drahtlosen protokollen zugeordnet sind | |
US20200244796A1 (en) | Transcribing audio communication sessions | |
CN109246672A (zh) | 数据传输方法、装置、系统及蓝牙耳机 | |
US11482240B2 (en) | Presentation of communications | |
DE69927578T2 (de) | Verfahren und vorrichtung zur durchführung einer mehrparteienkommunikation für ein kommunikationssystem | |
DE69910837T2 (de) | Beseitigung von tonerkennung | |
CN102905128B (zh) | 编解码处理器在无线视频传输过程中码率控制的方法 | |
US20060023062A1 (en) | Method and system for handling video signals of conference | |
DE10120590A1 (de) | Vorrichtung und Verfahren zur Bereitstellung eines Multimediadienstes in einem mobilen Endgerät | |
DE102006061881A1 (de) | Schnurloses Hybrid-Telefonsystem und Verfahren | |
DE69833366T2 (de) | Gerät zum speichern von sprachmitteilungen in einem schnurlosen telephonsystem | |
CN105743889B (zh) | 一种基于webrtc实现多方音频通话的方法以及系统 | |
CN101156374A (zh) | 一种监听视频呼叫的系统和方法 | |
CN106658110A (zh) | 一种投屏方法及系统 | |
CN108055497A (zh) | 一种会议信号播放方法和装置、视频会议终端、移动设备 | |
CN103108186A (zh) | 实现视频高清传播的方法 | |
CN103500580B (zh) | 混音处理方法及系统 | |
CN102915736A (zh) | 混音处理方法和混音处理系统 | |
CN105743911A (zh) | 一种提升视频会议系统混音容量的方法 | |
CN103426431B (zh) | 卫星网络与地面网系的融合通信系统及动态声码转换方法 | |
CN104023007A (zh) | 一种数据流的发送和接收方法及其终端和系统 | |
CN104767895B (zh) | 一种用于分组声学回声消除的方法与设备 | |
WO2018103661A1 (zh) | 一种传输语音数据的方法、设备和装置 | |
CN101588562A (zh) | 基于承载无关呼叫控制协议的多媒体彩铃实现方法及系统 | |
CN101064680B (zh) | 一种实现多媒体呼叫业务的方法、系统及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: Software Park Siming District of Xiamen city in Fujian province 361000 two sunrise Road No. 56 unit 1001 Patentee after: Fujian Xingwang Intelligent Technology Co., Ltd Address before: Software Park Siming District of Xiamen city in Fujian province 361000 two sunrise Road No. 56 unit 1001 Patentee before: FUJIAN STAR-NET WISDOM TECHNOLOGY Co.,Ltd. |