怎么建设自己网站(儿童)步骤,个人博客网站开发历程,广告设计培训学校有哪些,wordpress 离线发布在上节课中呢#xff0c;我向你介绍了web rtc的接口宏#xff0c;那有很多同学会产生疑问啊#xff0c;那觉得web rtc为什么要把接口设计的这么复杂#xff1f;还非要通过宏来实现一个代理类#xff0c;再通过代理类来调用到web rtc内部。
那为什么要这么设计呢#xf…在上节课中呢我向你介绍了web rtc的接口宏那有很多同学会产生疑问啊那觉得web rtc为什么要把接口设计的这么复杂还非要通过宏来实现一个代理类再通过代理类来调用到web rtc内部。
那为什么要这么设计呢实际上它的这样一种设计啊它是有一定理论的那下面呢我们就来详细看一下web rtc为什么要这么做那这张图呢就是web rtc它设计接口的一个架构。
那在中间层呢就是通过接口宏来实现的代理层在代理层之上是应用层比如我们前面向你介绍的peer connection client就是应用层。而在proxy之下呢是y8r7c的核心库那所有的比如信令线程工作线程网络线程以及对于音视频的采集编码传输等等的。这些都是在外边儿tc的核心库中实现的那么通过这个代理层做一层代理之后那就将应用层与核心库之间做了一层隔离。那这样做有什么好处呢那我想呢至少有以下几点好处那第一点呢就是只输出必要的接口儿。
也就是说我们迈达tc可能提供了几百个甚至上千个接口儿但是这些接口儿呢对于应用层来说不必要全都知道。我们只需要暴露必须暴露给外层的接口就可以了比如说只有五个或者十个应用层只要调用这些接口就可以满足它的需求。而对于其他的几百个或者上千个接口都是我们内部需要的接口那这些呢是不应该暴露给用户的。如果我们把这些接口也暴露给用户那实际上是增加了用户的使用成本
他要将上千个接口把他们都捋出来。那要花费大量的学习时间那不如我们就给它暴露一些必要的接口那这样呢用户学起来就非常的容易。所以这是一个非常好的设计方式这样一种设计还是非常灵活的当我们需要把y八二七c的某些接口释放出来的时候。我们只要在这个代理类中增加相关的接口那用户呢就可以直接调了当我们不需要让用户了解这些接口的时候呢还可以把它从代理类中取消掉用户就没法再访问这些接口了。那这样一种设计其实是非常灵活的
这是第二点。那第三点呢就是当我们使用了代理类之后就将应用层与web rtc核心库进行了一层隔离。防止了应用层去污染这个web rtc核心层所有的调用必须通过代理类进行调用。而且在调用的过程中呢要进行线程的切换假如说我们在应用层创建了五个线程那如果我们不使用代理类的话很可能这五个线程就会与y八二tc内部的线程。产生一些冲突或者说应用层的线程会注入到y八二tc的核心库中去那这样呢就会造成发生错误的时候。我们很难判断
具体是由于外边儿室内核儿引起的原因还是说我们应用层由于创建了一些线程这些线程呢进入到了web rtc核心层引起的问题你就不好把这件事说清楚但是通过这个代理层之后那我们很容易就能确定你到底是应用层的问题还是web rtc核心库的问题。所以对于web rtc这种设计来说它是有效的防止了应用层对web rtc核心库的污染。好这是使用代理类的几点好处当然
它同时也带来一些麻烦就是我们在定义我们自己接口的时候你必须按照它的步骤一二三这样去定义。之后呢才可以进行调用所以这是增加了我们一些这个学习成本但是对于你研发web rtc部的核心开发人员来说呢那这就不算什么了。但是对于从外层理解外边儿tc来说确实是增加了一些难度所以这是鱼和熊掌不可兼得的一个东西。那就是为了更好的防护外部rtc就要将接口架构设计的复杂一些但同时带来好处就是我们可以有效的将外部rtc库与应用层进行一个隔离。
而且接口的放出与隐藏都是非常方便的好那接下来呢我们来看看接口类的关系图。
那实际上我们在上节课中在介绍实现自己接口的这个方案的时候呢已经向你做过介绍了它需要三大步那第一步呢我们要实现一个接口类。也就是以你的类的名字后边加一个interface后缀为接口类的名字那有了这个接口类之后呢我们需要在外边rtc内核中去实现。
这个接口也就是说要生成一个类继承自某某某interface这个接口类并且呢将其中的方法都实现了。之后我们需要通过y8 tc的接口宏来定义一个代理类那这个代理类最终转换成一个真实的类名呢就是某某某proxy with internal。这样一个类名由于这个类名啊比较长。所以在接口宏中呢还给它起了一个别名儿就是某某某proxy当我们把这个类展开之后呢
你会发现它有几个方法那第一个方法呢就是create它是一个静态方法就是通过create可以创建出某某某proxy with internal代理类对象。之后呢我们就可以使用这个代理类了那么在这个代理类中呢包括了很多的method的方法当然method它是可重载的有不同的输入参数。在method内部它使用了method后来生成一个后对象那这个后对象呢就是为了调用我们web rtc内部的这个真实的实现类。它是这个作用
那么在这个q对象创建成功之后呢再调用它的marshal方法那最终呢经过一系列的里边儿的运转就可以调到这个时间类了。那这个还是比较有意思的一个过程那在后边的课程中呢我会向你做详细的介绍那现在我们只要知道通过接口宏之后进行宏展开就会生成这样一个代理类。以及代理类中有哪些方法那当然它还有一个重要的成员就是实现类的一个指针。通过这个成员来指向实现类那这样呢
它才能在内部去调用实现类中的方法。这就是接口类的一个类关系图那下面呢我们就来看看具体它这红是如何展开的还是以我们上节课中的peer connection factory这个类为例。
为一个例子我们来看一下刚才定义的peer connection factory这个代理类它展开之后是什么样子
展开的第一步呢就是将peer connection factory proxy with internal给它起一个别名因为这个名字太长了。那我们在写代码的时候呢就非常的费劲所以它会怎么做呢会将前面的这个类名后边加一个proxy的后缀。作为它的别名
这样我们书写起来会方便一些少写很多字母那对于类的定义呢它还是先要写一个proxy with internal这样一个类名。之后呢让它继承自interface也就是我们自己手工编写的这个接口类当它继承了这个接口之后后边它再调用具体的实现类的时候就会非常方便。因为他知道都有哪些方法了这是它继承自interface的一个主要作用那在这个类的内部它会实现很多方法。比较重要的呢是有两个
第一个呢是create这个create是一个静态方法也就是说通过代理类的create方法就可以发现出某某proxy with internal这样一个代理类的对象。那有了这个对象之后就可以调用它里边的method方法当然method方法呢它是一个重载的。可以通过不同的参数进行区分这刚才我们已经介绍过了那在method内部呢会创建method q对象。之后呢调用marshal方法最终调用到实现类的具体方法那这些呢我们都会在后边儿向你做详细介绍整个过程
它是怎么运转起来的除了这两个重要的方法之外那它还有几个重要成员其中signaling thread和worker thread是关于线程的两个成员。那除此之外呢最为关键的是peer connection factory指针也就是说通过c下划线指向了它具体实现类的对象。那所以这个c下划线是非常关键的那么在method方法中只有通过指向实现类的这个指针才能调到实现类中的相应方法。否则的话我们是没法找到具体的实现方法的那这个呢就是peer connection factory代理类的一个展开。那么展开之后我们看这个代码就比较亲切了
当然这与我们手写的代码还是有一定的差别这个名字特别的长。但由于是机器产生的为了防止与人血的发生冲突所以它就使用了这样一个非常长的名字来减少这个冲突。那了解了这个红展开之后后面我们再介绍整个它调用的过程的时候你就不会觉得很晕了。否则的话如果我们不了解这个宏定义不了解宏展开不了解它在整个编译过程中是在预编译时进行宏展开的。你对web rtc接口的调用理解起来就会非常困难那以上呢就是我们这节课所要介绍的内容。那这节课中呢
主要是向你介绍web rtc为什么要这样设计接口这样设计接口的好处是什么以及当我们使用接口宏定义好代理类之后它展开之后的样子是什么样的了解了这些之后呢才能让我们更好的理解外拔接口它的调用过程是怎样的那我们今天的课呢就到这里谢谢。