mediasoup 音量监控

 

1.原理

  RTP允许扩展首部,这里表示采用了RFC6464定义的针对audio的扩展首部,用来调节音量,比如在大型会议中,有多个音频流,就可以用这个来调整音频混流的策略 这里没有vad=1,表示不启用这个音量控制a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level。

2.方案

    在集中式实时传输协议(RTP)[RFC3550]音频会议中,音频混频器或转发器接收来自许多或所有会议参与者的音频流。然后,它有选择地将其中一些转发给会议的其他与会者。在大型会议中,这样的服务器可能正在接收大量流,其中只有少数流打算转发给其他会议参与者。

    在这种情况下,为了选择要转发的音频流,集中式服务器需要解码、测量音频电平,并且可能对来自大量流的音频数据执行语音活动检测。这种处理的需要限制了这种服务器可以支持的会议的大小或数量。

     作为替代方案,本文档定义了一个RTP报头扩展[RFC5285],通过该扩展,音频包的发送者可以指示包的有效负载的音频级别,从而减少服务器的处理负载。

3.音量变量

  音频电平头扩展承载与之相关联的分组的RTP[RFC3550]有效载荷中的音频电平。此信息包含在“RTP头扩展的通用机制”[RFC5285]定义的RTP头扩展元素中。音频级头扩展元素的有效负载可以使用[RFC5285]中定义的单字节或双字节头进行编码。

  音频级别用-dBov表示,0到127之间的值表示0到-127dbov。dBov是相对于系统过载点的电平,以分贝为单位,即有效载荷格式可编码的最高强度信号。

   数字静音的音频电平(例如,对于静音音频源)必须表示为127(-127 dBov),而不管编码音频格式的动态范围如何。

4.worker音量监听组件AudioLevelObserver

  AudioLevelObserver 存在router中。他按照设定的时间定时检查多个Product的音量是否高于设定的阈值。需要提供统计间隔internal(250-5000ms),音量阈值threshold(-127-0ms)参数和最大统计个数maxEntries。

  AudioLevelObserver 接收producer帧的时候,会统计当前producer音频帧的个数和音量值的统计。然后定时计算均值,超过均值的组成json,回调给tsmaster。

 

5.监听producer来源

   当用户加入房间,创建传输会话,然后创建音频Producer的时候,会把当前producer添加到音量监控组件中。

6.AudioLevelObserver数据处理

   当transport收到音频数据,会送入AudioLevelObserver对象的ReceiveRtpPacket函数中,然后计算出当前Prouder的音量统计值。当定时到来后,把所有的音量超过阈值的prouder对象通知给mediasoup-service。

7.mediasoup-service处理音量回调

   master 在有音量列表的客户端中挑选第一个有音量的producer,然后通过activeSpeaker通知每个参与者,告诉这个参与者处于激活状态。

   

8.客户端处理

  客户端收到信令后,显示某个produder处于显示讲话状态。

9.参考

https://download.csdn.net/download/Dreamandpassion/12686790

10.结论

   mediasoup服务端可以感知每个参与者音量的大小,如果客户静音,或者音量很少,我们直接可忽略他的音量,用于减少带宽传输和服务器转发压力。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值