在我们前面的课程中呢,我已经向你介绍了很多sdp相关的内容,那今天呢,我们来看看如何生成sdp。
那我们的目标呢,当然就是生成这样一个文本,那这个文本呢,就是sdp文本那里边包括了各种各样的媒体信息,音频,视频。视频以及它的传输协议udp rtp payload type,那同时呢,又通过a属性对这些payload type进行了解释。
比如说幺幺幺,它实际指定的是编解码器使用opus采样率是48000双通道对吧?那对于这样一个复杂的文本,我们该如何生成呢?实际上就要用到我们上节课所介绍的内容,就是通过web rtc中stp的类关系图。
来将这个文本生成出来,那如果我们有了这个类关系图,生成文本是非常容易的事儿,那我们只要按照它的组织顺序,一步一步的便利,就可以将这个文本输出出来。
那现在的关键点是什么呢?就是我们如何构造出这样一个类观意图,这是我们这节课所要达成的一个目标。
那形成这样一个类关系图啊,关键的点就是通过peer connection的as track来添加音视频轨。我们想一想也可以知道每一个音频轨或每一个视频轨,实际就是一个媒体源,后边的所有的描述其实都是针对于音频或针对于视频。来进行的进一步说明,那我们要想形成这样一个内关系图,首先要知道我们有哪些音频,有哪些视频。要将这些音频和视频添加到你的peer connection中,那这样呢,才能通过peer connection创建出sdp文本。对吧,这是第一点,那么对于每个track的类型是可以通过cant来获取到的,
那刚才我已经介绍到了。那对于每一个stp来说,它都是由一个peer connection来生成的。对于同一个peer connection来说呢?它会通过你之前添加的生成所对应的stp,那这个呢,就是我们构造stp类关系图的一个基础。
好,那下面我们要了解的就是AD track中具体做了什么事儿,如果我们对AD track这个代码进行跟踪的话,你可以看到它的一个调用站。就是从下到上这样一个调用关系,首先我们在应用层呢,是调用AD track,那在AD track内部,
它会按类型调用不同的API。如果我们指定要创建出的sdp是unified plan类型的,那它就会调用AD track unified plan。如果你使用的是plan b类型的,那它就会调用AD track plan b,当然我们默认情况下,现在都是使用unify plan。
那在add track unify plan这个函数中呢,又会创建sender创建receiver。那当把sender和receiver创建好之后呢?它会调用create and add这个API来创建transceiver。同时呢,将之前创建的sender和receiver作为参数传给transceiver这样形成之后呢,后边我们就可以通过transceiver 来生成这个类关系图了。那这里我们需要知道的是,
在创建sender的时候呢,它会创建audio rtp sender video rtp sender。创建receiver的时候呢,会创建audio rtp receiver和video rtp receiver,那对于每一种类型的track,它只能创建这种类型的sender和receiver。
那比如说我们添加的是音频轨,那通过之后呢,在内部它会创建audio rtp sender和audio rtp receiver。那我们创建视频轨的时候呢?它会创建video rtp sender和video rtp receiver,所以audio sender和video sender是不会同时存在的。那同理audio receiver和video receiver也不会同时存在,那这一点呢?我们一定要清楚,
那对于这个API来说呢?它创建的是。trans ver对象对吧?并且呢,将trans ver对象插入到transverse victor中,将它保存起来OK,这就是AD track,它起到的作用。那其实呢,它就是根据track来创建trans ver,那么有了trans ver之后,我们就可以根据trans ver来构造我们的类关系图了。那下面呢,我们就来看一下rtp传s ever,它里边包括了什么内容,
那实际上啊,你可以把rtp传s ever看作是stp中的一个m行。对吧,每一个m行就是一个trans ver,它包括了发送和接收,那下面呢,我们来看一下rtp trans ver包括了哪些内容?那这张图中列出的所有字段就是rtp trans ever中包含的字段,
那第一个呢是unified plan,也就说指明我们后边生成的sdp。是unif plan还是plan b对吧?好,
第二个是媒体类型media type,那通过这个字段呢,我们可以知道每个transverse只能是一种类型。
对吧,要么是音频,要么是视频,要么是应用数据,那不可能既是音频又是视频,
好在rtt中呢,包括了三点四。也就说,同时有多个发送员,比如说音频有多个音频员,视频有多个视频员,同样道理也可以。
同时,有多个接收员。此外呢,它还有传输的方向。是接收还是发送那一般情况下呢?我们既要接收也要发送,是双向的,
当然你可以指定只接收或者是只发送。好再下边儿呢,是MID也就是我们stp中的零一对吧?这就是MID好下面这个字段呢,表明它在stp文档中媒体排列的顺序。
那如果这里是一呢,它就排在第一个,如果是二呢,它就排在第二个,那再下来是China,也就是与传输进行挂钩。
那我们现在这个虽然表明了它是一个媒体,但最终呢,我们还要通过网络层进行媒体的传输。那具体我们在传输时使用哪个端口用的是哪种传输协议?那这些呢?都是通过China来获取到的。
所以它会有一个China的指针,也就是说与底层的传输层建立了连接是吧?那再下来呢,
是China manager它。它是China的管理器,所有的China都要放到China manager中进行管理,再下来呢,
是header extension。那这个呢?就是rtp的扩展头了,实际也是与stp文本信息中的header相对应的,对吧?那通过这个呢,我们就可以知道每一个媒体。使用了哪些扩展那这个类呢?是非常关键的是一个核心,那后边儿所有sdp相关的内容都是围绕着它来进行展开的。
那接下来呢,我们再来看看rtp sender那在transverse中呢,包括了rtp sender和rtp receiver。对于sender来说呢,它实际是一个桥梁,它是连接网络层与编码器之间的一个桥梁。那sander包括了auto sander和videos ander,
他们呢,都继承自rtp sander bases and er base中呢,包含了非常丰富的这个字段。那其中呢,比较关键的字段包括了media channel,那media channel呢是以编码器进行连接的。
那后边儿呢?我们会介绍到还有呢d tls transport,那它呢?是与传输相关的,对吧?所以对于rtt 3者来说呢,是传输与编码器之间的一个桥梁。
当数据从编码器出来之后。最终呢,就是通过它转换到transport,那再通过transport将数据传送出去,那这是rtp sander它的作用。
OK,那除此之外呢?它还可以对传输内容进行加密,所以它有frame incorrect这个字段。那通过这个字段呢,就可以对内容进行加密了,当然除此之外,它还包括ssrc stream ID等等这些内容。
那这些呢,都是我们stp中所要描述的一些信息,所以通过rtpsender就可以获取到编辑码器传输相关的内容了。那这样呢,
把这些内容就可以转换成我们的类关系图之后呢,再输出成好,这是三点儿,那最后呢,我们再从整体上来看一下。
那我们都知道,对于接口儿层,还有sdp,它都属于外边儿tc的筛选层,那通过前面儿的介绍呢,我们就可以对这个sesion啊,做一下总结。那我们来看一下y87c的筛选层,各个类之间是怎样一个关系?那首先我们要知道我们刚才介绍的所有的内容呢?
都是通过peer connection来创建的,也就是说在peer connection中会包含transverse victor。那在这里边儿呢,包含了很多的transverse是吧?每一个transverse就对应stp中的一个m行。好,那对于transfer来说呢,它包括了一堆的字段,那这些字段呢?我们刚才已经向你做过介绍了,其中比较关键的是senders和receiver。那对于sender 4来说呢,它包括了audio rtp sender和video rtp sender,那这两个sender呢,都继承自rtp sender base。
在这个center base中,又包含了d tls transport,这是对于sender那receiver呢?包括了audio rtp receiver和video rtp receiver这两个类呢?是独立的。那在每个类中呢,也包括了media ch和d tls transport这两个字段,也就是说,对于每个来说,它也是与解码器和网络传输相关联的。
那除此之外呢,我们上层使用的autotrack video track也与它们相关,那在rtp sender base中呢,包括了track的指针。而在audio rtp receiver,video rtp receiver中呢,也包括了tag字段,
所以通过这个类图啊,我们可以知道,我们只要拿到了rtp trans ever。它向上可以与应用层连接,拿到每一个track, 向下呢?可以与网络层连接,因为它持有d tls transport。那中间儿呢,可以与编解码器连接,我们就可以知道rtp trans ever它的重要性了。它实际是连接了三端上层的应用端,底层的传输,中间的编辑码器,
那有了这个类之后,我们就可以生成我们上节课所介绍的sdp类关系图。再通过stp类关系图,我们就可以生成stp信息文档了是吧?
OK,那以上呢,就是我们这节课的内容。那在这节课中呢,主要向你介绍了,我们在生成stp类关系图之前,要先通过将你的音频视频。添加到peer connection中去,有了这些check之后呢?在peer connection中就可以生成对应的rtp conceiver。那传server呢,
是连接上层应用底层网络传输和中间的编解码器的一个核心类,那有了这个类之后,我们再生成stp的类关系图。就非常轻松了OK,那以上呢,就是我们这节课所介绍内容有任何的问题呢,