1.原理
RTP允许扩展首部,这里表示采用了RFC6464定义的针对audio的扩展首部,用来调节音量,比如在大型会议中,有多个音频流,就可以用这个来调整音频混流的策略 这里没有vad=1,表示不启用这个音量控制a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level。
2.方案
2.方案在集中式实时传输协议(RTP)[RFC3550]音频会议中,音频混频器或转发器接收来自许多或所有会议参与者的音频流。然后,它有选择地将其中一些转发给会议的其他与会者。在大型会议中,这样的服务器可能正在接收大量流,其中只有少数流打算转发给其他会议参与者。
在这种情况下,为了选择要转发的音频流,集中式服务器需要解码、测量音频电平,并且可能对来自大量流的音频数据执行语音活动检测。这种处理的需要限制了这种服务器可以支持的会议的大小或数量。
作为替代方案,本文档定义了一个RTP报头扩展[RFC5285],通过该扩展,音频包的发送者可以指示包的有效负载的音频级别,从而减少服务器的处理负载。
Lennox等人。标准轨道[第2页]
RFC 6464客户端到混音器音频电平指示2011年12月
本文档中的头扩展不同于[RFC6465]中定义的头扩展,但与之互补,后者定义了一种机制,通过该机制,音频混音器可以向客户指示组成混合音频的贡献源的级别。
3.字节
音频电平头扩展承载与之相关联的分组的RTP[RFC3550]有效载荷中的音频电平。此信息包含在“RTP头扩展的通用机制”[RFC5285]定义的RTP头扩展元素中。音频级头扩展元素的有效负载可以使用[RFC5285]中定义的单字节或双字节头进行编码。
音频级别用-dBov表示,0到127之间的值表示0到-127dbov。dBov是相对于系统过载点的电平,以分贝为单位,即有效载荷格式可编码的最高强度信号。
数字静音的音频电平(例如,对于静音音频源)必须表示为127(-127 dBov),而不管编码音频格式的动态范围如何。
4.mediasoup 音量检查类AudioLevelObserver
AudioLevelObserver 存在router中。他定时检查多个Product的音量是否高于设定的阈值。需要提供统计间隔internal(250-5000ms),音量阈值threshold(-127-0ms)参数和最大统计个数maxEntries。
AudioLevelObserver 接收producer帧的时候,会统计当前producer音频帧的个数和音量值的统计。然后定时计算均值,超过均值的组成json,回调给tsmaster。
5.默认初始化
6.master处理音量回调
master 再有音量列表的客户端中挑选第一个有音量的producer,然后通过activeSpeaker通知每个参与者,告诉这个参与者处于**状态。
7.客户端处理
客户端显示这个参与者属于**状态。
8.参考
https://download.csdn.net/download/Dreamandpassion/12686790