我是靠谱客的博主 发嗲外套,最近开发中收集的这篇文章主要介绍WebRTC音频处理流程简介,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文概要介绍webRTC的音频处理流程,见下图:


webRTC将音频会话抽象为一个通道(Channel),譬如A与B进行音频通话,则A需要建立一个Channel与B进行音频数据传输。上图中有三个Channel,每个Channel包含编解码和实时传输协议(Real-time Transport Protocol,RTP/实时传输控制协议(Real-time Control Protocol,RTCP发送功能

以一个Channel而言,应用程序中将包含三个活动线程,录音线程,音频接收线程和播放线

1)录音线程:负责麦克风音频的采集,见图中红色路径,采集到音频后,缓存到一定长度,进行音频处理,主要包括AEC,AGC和NS等。然后送到Channel,经过音频Codec模块编码,封装成RTP包,通过Socket发送出去;

2)接收线程:见蓝色路径,负责接收远端发送过来的音频包,解封RTP包,解码音频数据,送入NetEQ模块缓存。

3)播放线程:负责耳机声音播放,见绿色路径。播放线程去OutMixer中获取要播放的音频数据,首先依次获取参与会话的Channel中NetEQ存储的音频帧,可以对其做AGC和NS处理;然后混合多个Channel的音频信号,得到混合音频,传递给AudioProcessing模块进行远端分析。最后播放出来。

如下为本地回环录音和播放代码:

[cpp]   view plain  copy
  1. VoiceEngine* ve = VoiceEngine::Create();  
  2. VoEBase* base = VoEBase::GetInterface(ve);  
  3. base->Init();  
  4. int chId = base->CreateChannel();  
  5. base->SetSendDestination(chId,3000,"127.0.0.1",4000);  
  6. base->SetLocalReceiver(chId,3000,3001,"127.0.0.1");  
  7. base->StartPlayout(chId);  
  8. base->StartReceive(chId);  
  9. base->StartSend(chId);  
  10.   
  11.         //....sleep...wait.....  
  12.   
  13. base->StopSend(chId);  
  14.   
  15. base->StopReveive(chId);  
  16.   
  17. base->StopPlayout(chId);  
  18.   
  19. base->Terminate();  

最后

以上就是发嗲外套为你收集整理的WebRTC音频处理流程简介的全部内容,希望文章能够帮你解决WebRTC音频处理流程简介所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部