4-13.WebRTC-Native开发过程

那今天呢?我们来分析下peer connection clan端中web rtc native的开发过程。那在我们前面的课程中呢?虽然我向你介绍了peer connection clan端界面的开发,信令的开发,今天我们介绍的内容呢,才是我们最为最为重要的内容。下面呢,我们就来看一下,对于peer connection clan端来说,它是如何调用y八二七cap I进行音视频通讯的。那在开始之前呢?我们先介绍两个重要对象,

那第一个对象呢就是peer connection factory,通过它的名字,我们就可以知道它就是peer connection对象的工厂类。通过这个工厂,我们就可以创造出很多的peer connection对象,除了它可以创建peer connection对象之外呢。实际它还可以创建stream对象,track对象关于这些对象呢,我们后边儿都会向你做详细介绍,这是。那第二个重要对象呢,就是peer connection。实际上,你可以把它想象成一个超级socket,对吧?

我们数据的发送与接收都是通过peer connection来完成的。那除此之外呢,对于媒体的协商也是由peer connection来完成的,它可以协商整个通讯过程中使用哪些编辑码器,这些编辑码器的参数?是什么好,那了解了这两个重要的对象之后,下面我们来看一下web rtc native开发的过程,那这张图呢?就是web rtc native开发的一个大体的过程。那当我们初始化web rtc库的时候呢,它会启动一些线程,比如说worker线程signal,线程network线程等等等。对吧,

那这些线程呢?每一个线程都有它具体的作用,关于线程相关的内容,我会在后面的课程中向你做详细介绍。现在我们只要知道,在我们初始化web rtc引擎的时候,就要启动这些线程,当然这些线程呢?既可以是我们自己在外边儿启动的,也可以交由web rtc自己来启动,那这块儿我们一会儿在分析源码的时候呢?你就会看到。好当线程启动完成之后,它会调用create peer connection factory这个方法去创建一个对象,就是peer connection factory对象。

那有了peer connection factory对象之后呢,我们就可以创建其他对象了,比如说音频轨,视频轨对吧?是通过create audio track。或者是create video track来创建出来的。那所谓的音频轨或视频轨,指的是两条轨道不相交的意思,对吧?每一条轨都代表了一路流。那我的音频轨就代表的这一路流呢?全是音频数据,视频轨呢?代表这一路流都是视频数据,那对于同一种类型的数据流。

每一条轨呢,也是不相交的,比如说我们在通讯的过程中有多条视频轨,那每一路视频轨都有它自己的视频源,那在视频的传输过程中呢,它都会在自己单独的那一。一路视频轨上进行传输,相互之间呢,也不会产生交集,对吧?这就是轨的概念好,那除了创建音频轨,视频轨之外呢?对于peer connection factory。还可以创建media stream,

也就是流,对吧?那流呢?在这里我做了一个解释。在外边儿tc中的每一路流都可以包括多条轨,比如说包括了一路视频轨,一路音频轨。这在我们通讯过程中也是非常重要的一个概念,那有了流的管理,就可以将几个不同的轨打包成一路流。这样就方便了,我们的管理,比如说某一端想接收另一端的视频和音频,那这时候你就可以把这个视频跟音频。打包成一路流传给他,

如果存在多个视频,多个音频的时候,那用户还可以选择我要哪路视频,哪路音频。可以把它们作为一路流,这就是流的概念。当然,对于web rtc来说呢,现在已经越来越弱化这个流的概念了。因为在实际的使用过程中,发现多了一层管理,反而倒造成了很多麻烦,不如直接就把更底层的轨交给用户儿。使得整个逻辑变得更简单。在web rtc内部呢,

可以自己在内部进行一个流的管理,这也是web rtc现在的做法。好,这就是创建媒体流。除了轨和流之外呢,对于peer connection factory来说,它创建的最重要的对象当然是peer connection对象了,对吧?那对于peer connection对象来说呢,它可以通过at stream来添加流,或者是通过at track添加视频轨或音频轨的。那在peer connection对象运行的过程中呢,也会发生一些事件,这些事件可能是上层需要的。那如何通知给上层呢?

还有一个peer connection observe对象,通过这个对象呢,就可以将一些底层的事件。抛给上层应用,让上层应用呢?根据不同的事件去做一些相应的逻辑。那这个过程呢?就是web rtc native开发的大体的过程,了解了这个过程之后,我们再去分析源码就会很容易理解为什么peer connection clan端,它的代码是。这样编写的,那我们在分析原码之前啊,还要了解一点儿其他的知识,就是我们调用web rtc native API的时机是什么?

那在前面的课程中呢,实际我已经向你介绍了,对于peer connection clan端来说,它包括了三个页面,那第一个页面呢,就是登录页面,它要连接到新的服务器。那第二页面呢,就是用户列表页面peer connection新令服务器会将加入到服务端的每一个用户通知给其他用户。这样对于每个用户来说,他都会有一个列表。当你想与其中的某个人通讯的时候,我们就可以通过双击事件去与对端进行连接了,对吧?所以对于peer connection clan端来说呢,

它使用web rtc native API的最好的时机就是当双击用户列表中的某个用户的时候。调用API除了通过鼠标之外呢,当然还可以通过回车键进行这个选择,这是两种不同的方式。一个是鼠标,第二个是回车,那最终呢?它会调用到connect to peer这个方法中,通过这个方法就一步一步调用到了y8 tc native API。那了解了这个过程之后呢?下面咱们就看一下这个源码儿,那下面我们切换到Windows系统下好,那咱们还是老规矩。设置一些断点,然后根据程序执行的步骤,

咱们跟一下这个代码到底它是怎么实现的?那第一个断点我们设在哪儿呢?就是设在门window点CC文件中的on default action。这个函数中,那在这个函数中,我们找到UI=list peer这个逻辑。是吧,在这块儿我们设一个断点。好设置,好断点之后呢?我们来运行这个程序。首先,它弹出第一个页面就是用户登录界面是吧?那我们点击button之后,就连接到了新的服务器。

首先,它弹出第一个页面就是用户登录界面是吧?那我们点击button之后,就连接到了新的服务器。这个时候呢,我们就可以看到所有连接到限定服务器的用户是吧?在这里啊,只有一个用户,当我们双击它的时候,那它就会跳到门window点儿CC的342行。对吧好,我们从这里开始,咱们来单步执行一下。那首先呢,是获取当前选中的用户,

之后呢,我们来获取到PR ID,现在的PR ID是五。获取到PR ID之后呢?调用call back里边儿的connect to peer这个方法,你跳到这个函数中。咱们来看一下connect to peer中做了哪些事情,那前面儿呢,都是做一些检查对吧?之后呢,它会获取。peer connection对象,看看有没有这个对象,此时呢,这个对象还没有创建OK,

那接下来呢?就会。对peer connection进行一个初始化。嗯,进入到这个函数中,实际初始化peer connection就是对web rtc引擎的一个初始化是吧?首先是创建peer connection factory。那我们通过这个函数儿的参数儿,我们就可以知道它大体做了哪些事情,对于这个函数儿,前三个参数儿呢?分别是网络线程,工作线程以及信令线程。通常情况下,我们都把这三个参数设成null,

就是告诉外边rtc,我在外边儿不创建这三个线程。在print peer connection factory,API内部创建对应的线程。同样道理,音频设备管理器是吧?如果我们传入的参数也是null的话,它会在内部去创建一个a dm。那再接下来是创建音视频编辑码器工厂对象,对于音频来说呢,它使用的是create building audio encoder factory。解码器呢,是create buildin audio decoder factory,音频也是类似的video encoder factory和video decoder factory。通过这四个方法啊,

就会将编解码器的工厂对象创建出来。后边儿在媒体协商的时候呢,就可以利用这些工厂对象来创建具体的编辑码器。那再接下来的参数是audio mixture。如果设成null呢?同样是在它的内部,会创建audio mixture对象,否则的话呢,如果你想创建自己的mixture,你可以在外层去创建一个。那最后一个是audio processing,也就是音频处理器,像我们通常所说的3a算法就是指的audio process降噪,不应消除自动增益。对吧,

如果我们设成null呢,就是使用web rtc默认的audio processor,如果你有更好的自己独家的算法的话。你就可以在外层呢,自己创建一个audio processor对象,这样给它传进去,它就会使用你自己的算法了。那我们了解了这些参数之后呢?我们继续往下执行。这样呢,我们就将peer connection factory对象创建好了,好创建,好peer connection factory对象之后呢,我们再来看看它是如何创建peer connection对象的。我们继续跳进去,

当然它最开始也是做一些检查,对吧?那后边儿呢?会设定一些参数参数类型儿呢?就是rtc configuration。这里边儿呢,指定了我们在媒体协商时使用的sdp类型儿,是unify plan。当然,如果我们不设置这个值的话,老的版本它使用的是plan b。那最新版本呢?它默认就是使用的unify plan好,再接下来呢,它指定的数据在传输时是否使用d tls srt p协议,

那在这里呢?它设置的是处。当然,如果我们自己调试的话,实际我们可以将这个选项给它关掉,这样它就不使用d tls srt p协议了。对吧,这样更有利于我们后边儿做数据分析,当然现在来说呢,我们先不管,就是还是让它设成处。再接下来呢,是ice server相关的内容。ice server是起什么作用呢?就是我们端对端进行通讯的时候,

如果是内网,它就直接进行直连了,对吧?如果不是内网,它会进行NAT穿越。那我们要进行net穿越,首先要知道我们的外网IP是多少。所以在这里呢,我们需要设置一个ice server,主要的功能呢,就是让客户端知道自己的外网IP是多少,对吧?所以这里要设置一下IC server,那它设置的值是多少呢?我们来看一下。

设置的值就是stan l google点com幺九三零二是吧?这是google提供的一个服务。那对于web rtc来说,它可以设置多个IC server。所以可以将每一个ice server呢,给它复制到configure service这个数组中,那在这里呢,实际只设置了一个。继续执行。好当参数设置好之后呢,就可以调用peer connection factory对象的create peer connection这个方法来创建。peer connection对象了好,那我们看一下create peer connection方法的参数,那第一个参数呢,就是刚才我们设置的配置信息。

第二个参数呢,是端口分配器。那可以通过它呢,进行端口儿的设置,那再接下来呢,是证书生成器。那最后一个呢,是peer connection observe,也就是说是peer connection的一个观察者。那现在我们就知道create peer connection,它这几个参数的含义了,对吧?第一个呢,就是我们刚才配置的这些信息。那第二个呢,

是端口生成器,我们设成n之后呢,它就会采用自己内部的端口生成器。好,第三个参数呢?是证书生成器,同样道理,我们生成钠,它在内部呢,就会自己产生证书。最后一个呢是peer connection对象的一个观察者,那这里传入this指明的是我们当前。这个对象就是它的观察者,所以对于conductor来说呢,它一定是继承了peer connection,

observe这个类。好,那下面呢?我们就可以看一下儿conductor点儿h中它是否继承了这个类,对吧?那这里我们就可以看到。对于conductor类来说呢,确实继承了peer connection observe。并且呢,在下边实现了它的回调函数,我们来看一下啊。在62行对吧?这个就是peer connection observe的一个实现。好里边儿包括了哪些方法呢?包括了signal change at track。

remove track data channel等等等一堆对吧?所以对于peer connection,有任何事件的时候呢,它就会通过这些回调函数。来通知上层应用,告诉上层我底层发生了什么事儿?那你上层呢?可以做一些逻辑进行处理,对吧?那我们下面继续执行好,当执行完create peer connection之后呢?那peer connection对象就创建好了。我们继续。当peer connection对象创建好之后呢?它做的一个非常重要的工作,

就是add tracks。我们进入到这个函数中,看看它实现了哪些功能好。我们继续单步执行啊。那在439行呢,它首先会构造audio track,这个对象是吧?它构造的方法呢,就是通过peer connection factory。创建一个audio track,就把这个对象呢当做参数,传给audio track构造函数。那最终呢,构造出audio track。关于audio track创建的具体过程,

我们会留作后边儿再介绍。底层相关代码的时候呢,再向你做详细介绍,那这里呢,我们只要知道通过这种方法呢,可以创建出audio track。并且通过peer connection的add track方法,将audio track添加到peer connection中就OK了。同理,对于视频来说呢?它也要先创建一个video track。那创建video track的具体过程,我们也是留作后边儿再做详细介绍。那现在我们只要知道它会创建audio track,创建video track,

并且把这些track呢,通过add track方法。添加到peer connection中就OK了。那对于peer connection对象来说,它添加track的作用是什么呢?实际就是为了在后面进行媒体协商的时候呢?告诉对方。我要传哪些数据给你,对于这些数据,我要用什么样的编解码器,它们的参数是什么?那你是否支持是吧?如果对方应答说支持或者说。它提供了一个更好的编辑码器。当双方达成协议之后呢,

这时候就可以将数据源源不断的发送给对端。对端进行解码儿观看,而同样的对端可以把它的数据通过网络源源不断的传给。本端那你就可以看到对端的视频和听到对端的音频了。那这个就是add track它的作用,那当pair connection将音频track和视频track添加进去之后呢?这时候。我们的主界面又要发生变化了,对吧?它需要切换到stream UI这个界面中,那在这个界面中呢?我们就可以看到对方的视频,听到对方的声音了。那在stream里边儿呢,会进行视频的渲染,

关于视频渲染这部分内容呢,我们在下节课中再向你做详细介绍。好执行完上面儿的操作之后,对于peer connection clan端来说,它就完成了外边儿tc native API的调用。那后边儿呢,紧接着我们就要进行媒体协商了。好,这就是peer connection clan端调用web rtc native API的一个大体的过程。OK,那通过上面的介绍呢?相信你已经了解了这个整个的过程,实际在整个过程中呢,最重要有两个对象,一个是peer connection factory。

它用于创建peer connection对象以及track对象stream对象是吧?第二个非常关键的对象呢,就是peer connection。对于peer connection来说呢,它首先需要把我要传送给对端的。这个音频轨视频轨添加到自己的对象中,之后呢,它要进行媒体协商,媒体协商完成之后就可以进行音视频的互通了。那这就是peer connection的作用,那以上呢,就是我们这节课所要向你介绍的内容,那我们要知道有两个重要对象,我们要知道整个儿的。创建过程是怎样的?

好,那我们今天的课呢?就到这里,谢谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值