[voip] pjsip 的研究学习

最近要用到sip协议,因此寻找了两个开源项目作对比,分别是linphone和pjsip,经过对比,最终选择pjsip这套开源协议栈进行开发。

主要原因有如下(仅个人参考):

1、linphone的代码结构不如pjsip分明,pjsip在windows下更方便调试;

2、linphone更新后不使用osip作为协议栈,改用自行编写的belle_sip,pjsip协议栈还在维护,且一直稳定;

3、pjsip作为协议栈开发的示例很多,belle_sip来开发还是linphone头一回。

linphone和pjsip都是很优秀的开源项目,我都支持,都值得学习,只是选择pjsip更适合我的项目。

pjsip的代码结构:

基础库:        pjsip

基础辅助库:pjutil

(最底层接口)

基础协议栈:pjsiip、pjsip-simple

基础媒体库:pjmedia、pjmedia-codec(pjmedia_audiodev/pjmedia_videodev)、pjnath(nat穿透)

(中间层接口,依赖pjsip和pjutil)

整体封装接口:pjsip-ua

应用层接口:pjsua-lib/pjsua2_lib

(依赖中间层接口)

应用:pjsua

示例:sample_pjsua
.c 带注册,可拨打和接听

sampleua.c 不带注册,可拨打和接听

siprtp.c         发送和接收rtp包

httpdemo.c  一个简易的http client

其中,一层接口都带了test,对学习它的api很有帮助

有兴趣可以一起研究:Q群(437295987)

时间: 2024-11-14 23:05:07

[voip] pjsip 的研究学习的相关文章

UnityEditor研究学习之自定义Editor

UnityEditor研究学习之自定义Editor 今天我们来研究下Unity3d中自定义Editor,这个会让物体的脚本在Inspector视窗中,产生不同的视觉效果. 什么意思,举个例子,比如游戏中我有个角色Player,他有攻击力,护甲,装备等属性. 所以我定义一个脚本:MyPlayer.cs: using UnityEngine; using System.Collections; public class MyPlayer : MonoBehaviour { public int ar

利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)

原文:利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还可以修改已有的程序集,并且它支持多个运行时框架上例如:.net2.0/3.5/4.0,以及silverlight程序 官方地址:http://www.mono-project.com/Cecil 首先,我先假想有一个这样的商业组件,该组件满足了以下条件: 1. 该程序集的代码被混淆过了 2. 该程序

Spring Transaction + MyBatis SqlSession事务管理机制研究学习

线上的系统中,使用的是Spring+Mybatis+Mysql搭建的框架,由于客户需要,最近一直在对性能提升部分进行考虑,主要是涉及Mysql的一些重要参数的配置学习,以及Spring事务管理机制的学习,因为通过观察服务器日志,发现在这两部分的时候耗时比较严重,特别是进行mysql事务提交的时候,项目源码中使用了Spring的声明式事务,即通过@Transactional注解来控制事务的开启与提交,这两天看了一些关于Spring Transaction事务的一些文章,也debug了源码,总算有点

Android gc垃圾回收研究学习

尊重个人劳动成果,转载请注明出处:http://blog.csdn.net/hnulwt/article/details/44903331 文中很多内容说到了JVM,我想通过研究学习JVM来达到认识DVM的目的.为了严谨,查询了一下 JVM和DVM的不同点 1.Dalvik 和标准 Java 虚拟机(JVM)的首要差别 Dalvik 基于寄存器,而 JVM 基于栈.基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短. 2.Dalvik 和 Java 字节码的区别 Dalvik

Android Launcher 研究学习

Launcher是系统启动后第一个启动的程序,是其它应用程序的入口,也就是我们的手机程序的桌面程序; 一.Launcher的定义及构成: <1>通过查看官方提供的Launcher源码可以知道其实Launcher也是一个Activity,不过它的intent-fliter有点特殊: <activity android:name="Launcher" android:launchMode="singleTask" android:clearTaskOn

Zeroc Ice grid 研究学习

一.概念 slice: ice提供了自己的接口定义语言.用来定义rpc的接口和对象. ice.object: rpc调用的接口必须继承自ice.Object servant:ice.Object的实例化对象叫做servant,rpc调用的就是servant对象,因此servant需要线程安全 endpoints:客户端rpc调用servant的地址 icebox:servant的容器 icenode:icebox的容器 registry:注册中心,负责管理icenode的注册,负责和发布. 二.

最近研究学习的开源项目

# 1 Weedfs weed-fs,全名Seaweed-fs,是一种用golang实现的简单且高可用的分布式文件系统.该系统的目标有二: - 存储billions of files- serve the files fast weed-fs起初是为了搞一个基于Fackbook的Haystack论文的实现,Haystack旨在优化Fackbook内部图片存储和获取.后在这个基 础上,weed-fs作者又增加了若干feature,形成了目前的weed-fs.Weed-FS 是一个简单和高可伸缩的分

C++研究学习之异常

一.什么是异常处理 一句话:异常处理就是处理程序中的错误. 二.为什么需要异常处理,以及异常处理的基本思想 C++之父Bjarne Stroustrup在<The C++ Programming Language>中讲到:一个库的作者可以检测出发生了运行时错误,但一般不知道怎样去处理它们(因为和用户具体的应用有关):另一方面,库的用户知道怎样处理这些错误,但却无法检查它们何时发生(如果能检测,就可以再用户的代码里处理了,不用留给库去发现). Bjarne Stroustrup说:提供异常的基本

javascript设计模式研究学习-设计模式类别

编写易于维护的代码,其中一个最重要的方面是能够找到代码重复出现的主体并优化它们.这也是设计模式的有价值的地方. 设计模式类别: 一.创建型设计模式 创建型设计模式划分专注于处理对象创建机制,以适合给定情况的方式来创建对象.创建对象的基本方法可能导致项目复杂性增加,而这些模式旨在通过控制创建过程来解决这种问题. 大致可以分为: Constructor(构造器) Factory (工厂) Abstract (抽象) Prototype (原型) Singleton (单例) Builder (生成器