Linphone虽然是用C写的,但是还是有一些面向对象的概念在里面。
在sal.h里定义了SalOp的类型,前置声明来推迟实现。SalOpBase可以看做SalOp的基类。一个具体的SalOp的实现依赖于使用的协议。
在sal_eXosip2.h里就是针对sip的eXosip协议栈来实现SalOp。sal_eXosip2.c里实现的是一个会话的逻辑。当然这些应该是不同的协议有共性的东西,至于放在这里的考虑以及有没有更好的方法,以后再讨论。
Linphone的SDP交互机制很简单,只是检查stream type(audio, video, other)和proto(Unknown, rtp/avp, rtp/savp)组成的相应的key。当它提供一个offer的时候,它在接下来收到的answer里找到对于这个key的最佳匹配,只是比较mime-type和clock rake;同样当它需要对收到的offer给出answer的时候,它也不会理睬这个offer里的其他attribute。Linphone只附加检查了当格式为H264时候的fmtp。
Linphone的SDP生命周期也是和一个call中的invite行为绑定的,也就是说每次re-invite的时候,都会删除目前的SDP而重新生成。
阅读(2020) | 评论(0) | 转发(0) |