pjsip小结

最近一个月学了下pjsip的知识,小结下:

pisip是一个sip的库,相比于osip和exosip封装层次比较高,实现起来也比较简单,并且集成了多媒体的功能,不仅仅是一个sip库。学习sip可以下载一些成熟的商用软件个人推荐x_lite(客户端),sip_server 2008(服务器),然后用wireshark抓消息学习sip流程。

pjsip是一个sip库,pjsua是以pjsip为基础的更高层抽象,当然相比较于pjsip实现起来也更简单。pjsua2是以pjsua为基础的更更高层抽象,是面向对象的。pjsip包括了pjmedia,pjlib。pjmedia是对多媒体的一些封装,pjmedia包括了audio和video两个方面。

建议直接使用pjsua,比较简单,api基本够用,实在不行再用一些pjsip的函数就行。学习pjsua可以看pjsua-app/src/pjsua下的几个源文件,这几个源文件是pjsua程序的源文件,展示了pjsua api的使用。下面介绍下pjsip在多媒体方面的几个比较重要结构体/函数。

pjmedia_port是一个媒体的封装,包含了这个媒体的操作函数和详细参数(采样率,采样深度等),这个媒体可以是pcm,g722或者一个声卡。创建好pjmedia就把这个port加入会议桥并获取一个会议桥id,pjsua的所有操作都是针对这个会议桥ID的不直接和pjmedia_port打交道。pjmedia的创建有的直接有pjsua专用的函数创建可以直接加入会议桥并获取ID,有的是自己需要用pjmedia层的函数创建pjmedia_port,并使用pjsua_conf_add_port加入会议桥获取会议桥ID。介绍几个常用的涉及多媒体操作的例子:

传输音频:pjsua_player_create创建一个播放wav文件的pjmedia_port,直接加入会议桥不直接返回media_port但会返回一个播放id,使用pjsua_player_get_conf_port获取会议桥的ID,然后调用pjsua_conf_connect(wav文件的会议桥id,对方的电话id),就把音频传送过去了

录音:非常简单,几个函数搞定。pjsua_recorder_create,获取录音id并自动加入会议桥,pjsua_recorder_get_conf_port根据录音id获取会议桥id,pjsua_conf_connect(0, 录音的会议桥id);就可以录音了,注意pjsua_conf_connect中的0代表麦克风。

上面这个录音文件时.wav的pcm还可以把编码格式设置成g711:pjmedia_wav_writer_port_create(pool, 文件名, 采样率, 通道数, 位深, 位深, 设置成1代表编码为g722, 0, &pjmedia_port)获取了编码格式为g711的pjmedia_port,但是此时并没有自动加入会议桥,使用pjsua_conf_add_port函数加入会议桥并获得该文件的会议桥ID,调用pjsua_conf_connect(0,会议桥ID)就可以把麦克风的声音以g711的编码方式记录到文件里了

 

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值