如果有问题,请加QQ群 891339868 进行交流
昨天我已经把pjsip工程相关的库移植好,今天开始使用库里面自带的测试程序进行测试,在这之前需要搭建一个测试环境,我使用的是minsipserver服务器的window版本,在win10上搭建一个服务器。先简单的说一下搭建流程吧:
1、安装后进入主界面,如下图所示:
2、进入系统配置,配置服务器相关信息,如下图所示:
只需要配置一下IP地址,端口号都是默认的,不需要改变,这样服务器相关的基本信息已经配置完毕。
3、进入分机,配置sip客户端代理相关信息,如线图所示:
在这里可以随意添加、编辑、删除sip客户端用户代理的相关信息,我这里添加了四个,其中两个在线,并且正在通话。
4、点击增加,增加sip用户代理相关信息,如下图所示:
分别设置分机号、密码、IP地址和端口号,这样就可以了。
下面进入正题,使用NUC972的板子和Fanvil的IP电话机进行通话,目前方位的ip电话机已经注册上了,服务器显示在线,现在只需要配置一下NUC972就可以了。首先进入到编译后的pjsip工程的源码中,库中自带的例子都在pjsip-apps中,如下图所示:
bin文件夹里面是源码编译后输出的可执行文件(所以源码一定要编译),build文件夹里面是配置文件、Makefile文件以及编译过程中产生的中间文件等,src文件夹里面是各种例程的源码。首先需要将bin文件夹及其里面的所有文件都复制到NUC972的板子系统上,这样就可以在NUC972上直接运行了,我使用的例子是PJSUA这个例程,首先来介绍一下这个例程的作用:PJSUA是一个开源的命令行SIP用户代理(软电话),用PJSIP协议,PJNATH,和PJMEDIA实现。它虽然只有很简单的命令行界面,但是功能齐全。说白了就是个VOIP电话软件。
首先看一下我复制的这个文件夹里面的内容,如下图所示:
那些大写的文件是运行时产生的文件,不要管它们,alice.cfg是我添加的配置文件,也可以不添加,直接在命令行输入。pjsua-arm-none-linux-gnueabi就是交叉编译后生产的PJSUA可执行文件,pjsystest-arm-none-linux-gnueabi是交叉编译后生产的检测系统硬件的可执行文件,samples文件夹里面包含了其他例程交叉编译后的可执行文件。
我主要用的是音频,所以我使用这个程序先检测一下我的NUC972板子上的声卡是否被正确加载,如下图所示:
可以看出来,我的声卡已经被PJSUA探测到。下面就可以执行PJSUA程序了,在运行之前,先来看一下相关参数,可以使用./pjsua-arm-none-linux-gnueabi --h 查看,选项比较多,我就不一一列举了,选几个我在使用中遇到问题的说明一下:
--config-file=file 这个选型是在启动程序时,从配置的文件里面读取相关指令;
--add-codec=name 添加一个编解码(注意,不是硬件,是编解码算法,诸如speex、G711之类的,默认是全部添加的)
--dis-codec=name 关闭一个编解码
--quality=N 设置传输的媒体质量(0-10,默认是8)。在NUC972平台上,这个需要配置一下,默认值8不行,需要改成比较低的值,如果不改的话,会出现声音卡的问题,是很卡很卡的那种,这可能是和处理器的性能有关系吧,具体的原因我不明白,如果有人知道,请第一时间给我留言,教我一下,谢谢;
--no-vad 关闭语音活动检测功能,默认是打开的
--ec-opt=OPT 选择一种回声消除算法。在NUC972平台上,这个需要配置一下,默认是0,但是使用默认值0和1都不行,声音会很卡,需要选择2或者3。他们分别对应1:speex;2:suppressor;3:WebRtc。具体的原因我不太清楚,我猜大概是默认的算法和speex算法的复杂度或者是优化度没有后两种好,导致NUC972运行起来比较费劲,造成系统运行卡。如果哪位知道原因,可以给我留言。
--auto-answer=code 这个是设置自动接听的,这样可以在无人值守的情况下呼通电话
--use-conpact-form 紧凑模式,我理解应该是省资源模式,在嵌入式平台上最好选这个。
其他的选项使用默认值应该没啥问题。
再来看一下我添加的配置文件alice.cfg:
--id 是NUC972在服务器上的id号,其他ip电话就是通过这个id号找到NUC972的,@后面的IP地址和端口号是服务器的地址和sip端口号
--registrar NUC972注册的sip服务器地址和端口号
--realm 域,默认是*,啥都可以
--username 用户名称
--password 用户密码
注意:这些都需要和服务器配置的用户代理都要相对应,要不然注册不上。
配置好服务器上的用户代理后,就可以运行PJSUA了:
我使用的紧凑模式,回音消除算法使用的是webrtc,媒体质量是0,屏蔽语音活动侦测,可以减少运算量,自动接听模式。出现下面的图就说明正常运行了:
配置到这里,就可以使用指令进行拨号和接听来电了!