Webrtc从理论到实践七: 官方demo源码走读(peerconnection_server)

本文深入分析WebRTC的peerconnection_server,详细解读其目录结构、类图和工作流程,涵盖监听socket、事件循环、信令处理等方面,帮助理解WebRTC后台实现。
摘要由CSDN通过智能技术生成

系列文章目录

Webrtc从理论到实践一:初识
Webrtc从理论到实践二: 架构
Webrtc从理论到实践三: 角色
Webrtc从理论到实践四: 通信
Webrtc从理论到实践五: 编译webrtc源码
Webrtc从理论到实践六: Webrtc官方demo运行


前言

本文源码基于webrtc m89版本,先从peerconnection_server开始分析


一、peerconnection_server 目录结构


在这里插入图片描述
     从图上我们可以看出peerconnection_server的源文件仅有七个:其中main文件主要用于主流程的控制以及网络事件的分发,data_socket文件用于socket的创建与数据的读取和发
送,peer_channel文件用于信令的处理以及socket的管理,utils文件里存放了两个常用的字符串处理函数。

二、类图

在这里插入图片描述
    简单介绍一下上面几个类的作用:首先,SocketBase类是对win32 socket api的封装,包含了创建和关闭两个接口。然后,ListeningSocket和DataSocket类都继承了SocketBase类,从他们的命名我们就可以得知,DataSocket的主要职责是用于从socket接收/发送数据,对应的接口是OnDataAvailable()和send()方法。ListeningSocket是用于接收连接和创建DataSocket实例的,Listen()接口用于监听端口,当接收到一个新的连接时就会通过Accept()创建一个新的DataSocket实例。ChannelMember用于处理从DataSocket 接收到的信令,并且与DataSocket是一 一对应的,每个ChannelMember都会保存一个从0开始递增的id_用于标识。PeerChannel类是ChannelMember的管理类,内部创建了一个_members数组用于保存建立连接的ChannelMember,并且可以通过Lookup()接口查找ChannelMember对象,还可以通过AddMember()将ChannelMember对象保存起来。

三、工作流程

首先说一下整个server的模型是事件驱动模型,采用select()接口实现,以下代码片段已做删减

1. 监听socket端口

    监听socket端口主要分为两步:第一个解析命令行参数,从命令行参数中获取指定端口。第二个创建socket 并且监听端口。

// InitFieldTrialsFromString stores the char*, so the char array  //must outlive the application.
const std::string force_field_trials = absl::GetFlag(FLAGS_force_fieldtrials);
webrtc::field_trial::InitFieldTrialsFromString(force_field_trials.c_str());

int port = absl::GetFlag(FLAGS_port);
 
// Abort if the user specifies a port that is outside the allowed
// range [1, 65535].
if ((port < 1) || (port > 65535)) {
   
    printf("Error: %i is not a valid port.\n", port);
    return -1;
}

ListeningSocket listener;
if (!listener.Create()) {
   
   printf("Failed to create server socket\n");
   return -1;
} else if (!listener.Listen(port)) {
   
   printf("Failed to listen on server socket\n"
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值