WebRTC音频 04 - 关键类

WebRTC音频01 - 设备管理
WebRTC音频 02 - Windows平台设备管理
WebRTC音频 03 - 实时通信框架
WebRTC音频 04 - 关键类(本文)
WebRTC音频 05 - 音频采集编码

一、前言:

在WebRTC音频代码阅读过程中,我们发现有很多关键的类比较抽象,搞不清楚会导致代码阅读一脸懵逼。比如PeerConnection、Call、AudioState、Channel、Stream,本文就尽力介绍下。

二、关键类关系图:

在这里插入图片描述

  • 一个PeerConnection拥有一个Call,来管理和对端的会话;可以看出Call里面主要负责创建一些收发的Stream;
  • 但是PeerConnectionFactory是全局唯一的;
  • 同时CompositeMediaEngine属于PeerConnectonFactory,因此,MediaEngine也是唯一的;
  • 因此WebRtcVoiceEngine也是唯一的,里面的AudioState也是全局唯一,来处理众多PeerConnection中的Call过来的收发流;

三、PeerConnection:

1、职责:

可以理解成一个Socket Plus,比如我们有一个Mesh架构,里面有三个终端C1\C2\C3,他们互相之间都可以P2P通信。当同时加入一个会议中,那么,C1需要创建两个PeerConnection,一个负责和C2通信,另外一个负责和C3通信;

由于PeerConnection位于核心层最上面,需要和session层的API进行交互,因此,它首先得实现 PeerConnectionInterface API ;

PeerConnection单独负责的有

  • 管理会话状态机(信令状态)。

  • 创建和初始化较低级别的对象,如 PortAllocator 和 BaseChannels;

  • 拥有和管理 RtpSender/RtpReceiver 和跟踪对象的生命周期;

  • 跟踪当前和待处理的本地/远程会话描述;

共同负责的有

  • 解析和解释 SDP;

  • 根据当前状态生成Offer和Answer;

  • ICE 状态机;

  • 成统计数据;

2、创建时机:

开始呼叫的时候会要做最主要的三件事(可以参考Conductor::InitializePeerConnection):

  • CreatePeerConnectionFactory(创建PeerConnection工厂对象);

  • CreatePeerConnection(就创建Peerconntion了);

  • 最后AddTracks(添加Track到PeerConnection中,track后面会介绍,理解成一条音频或者视频流即可);

    上面这些步骤在介绍音频架构的文章中都有出现。可以看看代码:

    bool Conductor::InitializePeerConnection() {
         
         
      // 这函数前四个参数如果你想使用自己定义的线程函数,那么就传入,否则就使用的是webrtc内部的默认函数
      peer_connection_factory_ = webrtc::CreatePeerConnectionFactory(
          nullptr /* network_thread */, nullptr /* worker_thread */,
          nullptr /* signaling_thread */, nullptr /* default_adm */,
          webrtc::CreateBuiltinAudioEncoderFactory(),
          webrtc::CreateBuiltinAudioDecoderFactory(),
          webrtc::CreateBuiltinVideoEncoderFactory(),
          webrtc::CreateBuiltinVideoDecoderFactory(), nullptr /* audio_mixer */,
          nullptr /* audio_processing */);
    
      // 创建PeerConnection对象
      if (!CreatePeerConnection(/*dtls=*/true)) {
         
         
        main_wnd_->MessageBox("Error", "CreatePeerConnection failed", true);
        DeletePeerConnection();
      }
      // 添加track到PeerConnection中
      AddTracks();
    
      return peer_connection_ != nullptr;
    }
    

    上面的CreatePeerConnection就会创建出来PeerConnection;

四、Call:

1、职责:

Call代表着和某一个终端的会话,管理者通话的整体流程和状态;一个Call对象可以包含多个发送/接收流,且这些流对应同一个远端端点,并共享码率估计。具体职责如下:

在WebRtc内部职责:

  • 创建/销毁 AudioReceiveStream、AudioSendStream;
  • 创建/销毁 VideoSendStream、VideoReceiveStream;

开放给上层应用的功能:(通过PeerConnection开放)

  • 发送码率设置(包含最大码率、最小码率、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值