Windows | PJSIP使用说明 | 北邮计算机网络实验课作业 | 视频通话

官网

首页

PJSIP - Open Source SIP, Media, and NAT Traversal Library

使用说明文档

pjsip Open source SIP, media, and NAT traversal stacks/libraries for smartphones

下载地址

Download PJSIP - Open Source SIP, Media, and NAT Traversal library

  • Windows用户必须下载.zip格式的源码
  • Unix与Max OS用户必须下载 .bz2 格式的源码

实验环境

VS2015 win32平台
windows10
SDL2-2.0.10
ffmpeg-4.2.1-win32-dev
ffmpeg-4.2.1-win32-shared
Direct X 12
Qt 5.6.3

安装

进入PJSIP的说明文档,很醒目的大字,点进去即可
在这里插入图片描述
选择合适的开发平台,这儿我使用Windows平台
在这里插入图片描述
大致浏览以下对应开发平台说明文档的目录,在Requirements小节,会发现需要VS和DirectX,还有其他Tools、SDK之类的,可以边下载安装,边看这个文档。
在这里插入图片描述

Build Preparation for Windows

下载源码,点击“Get the source code”
在这里插入图片描述
点击连接
在这里插入图片描述
下载Zip格式文件
在这里插入图片描述
解压文件,记一下解压目录
在这里插入图片描述
Build Preparation for Windows第二步create a config_site.h
在这里插入图片描述
在这里插入图片描述
进入指定目录../pjlib/include/pj/,创建config_site.h即可(VS必须手动创建),这个文件可以为空,为空是使用默认值。干脆把config_site_simple.h复制一份重命名为config_site.h

Requirements

Tools and SDKs

在这里插入图片描述

  • 需要VS,我下载安装了VS2015社区版
  • 需要DirectX SDK,我查了以下自己电脑DirectX的版本,检索dxdiag并运行,在系统信息框里可以看到自己的DirectX版本,这里我的版本是12,不知道对PJSIP有没有影响:
    在这里插入图片描述
    在这里插入图片描述

Build and run

在VS2015中 文件-打开-‘项目/解决方案’选择之前解压目录中的pjproject-vs14.sln
在这里插入图片描述
发现项目不兼容,点确定
在这里插入图片描述
点安装
在这里插入图片描述
关闭VS后,又尴尬地等待VS更新,
在这里插入图片描述
重新打开VS以及项目
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019111510343286.png?x-oss-process=image/wate rmark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N0b25lX2ZhbGw=,size_16,color_FFFFFF,t_70)
不知道怎么处理,那就暂时不处理吧23333
在这里插入图片描述
找到pjsua,右键pjsua将其设置为启动项;右键
在这里插入图片描述
编译项目build,或者可以直接点生成解决方案会生成exe文件,可以选择debug或者release
在这里插入图片描述

如果是编译的话会直接跳出命令行框框,如果是生成解决方案的话,就是去bin目录下找相应的文件。
在这里插入图片描述

与服务器通信

实验课老师服务器的网路不支持TCP???加上--no-tcp
打开cmd,进入目录
在这里插入图片描述

d:
cd Program Files\ExperimentForNetwork\pjproject-2.9\pjsip-apps\bin
pjsua-i386-Win32-vc14-Release.exe --no-tcp

按m
在这里插入图片描述
sip:12345@10.105.240.15
在这里插入图片描述

注册

首先根据语音提示进行1注册,要在嘀声后把本组同学的学号依次输入,学号之间用号分开,最后用#结束。例如本组有三个同学,学号分别是12345、67890、23456,则需依次如输入123456789023456#。输入完成后IVR会提示你的组号(组号是IVR自动生成的)然后IVR会提示嘀声后输入本组的密码。请牢记组号和密码,后续的操作和实验报告都会需要。
在PJSIP中发送DTMF的命令是
,上例中的操作如下。

d:
cd Program Files\ExperimentForNetwork\pjproject-2.9\pjsip-apps\bin
pjsua-i386-Win32-vc14-Release.exe --no-tcp
(与服务器通信)
m
sip:12345@10.105.240.15

选择注册,输入1:
*
1
根据提示输入学号:
*
学号#
询问你学号是否输入正确,正确按1,错误按0
*
1
会告诉你组号,根据提示输入密码:
*
1234#

最后IVR会提示注册成功。然后挂机。
我的组号:578
详细步骤记录:

选择注册,输入1:
*
1

在这里插入图片描述

根据提示输入学号:
*
学号#

在这里插入图片描述

询问你学号是否输入正确,正确按1,错误按0
*
1

在这里插入图片描述
组号578

会告诉你组号,根据提示输入密码:
*
1234#
会再次让你输入密码

在这里插入图片描述

登录

重新拨通IVR后根据语音提示选择2登录,IVR会提示在嘀声后输入“组号”,请输入注册是获得的组号,然后IVR会提示嘀声后输入“密码”。完成登录后可以进行1录音及回放、2回放录音、3查询本组同学的学号三项操作。

d:
cd Program Files\ExperimentForNetwork\pjproject-2.9\pjsip-apps\bin
pjsua-i386-Win32-vc14-Release.exe --no-tcp
(与服务器通信)
m
sip:12345@10.105.240.15

选择登录
*
2
输入组号
*
578#
输入密码
*
123456#

登录成功后
1录音及回放 ;2 回放录音 ;3 查询本组同学的学号

详细步骤记录:

登录
*
2

在这里插入图片描述

输入组号
*
578#

在这里插入图片描述

输入密码
*
1234#

在这里插入图片描述

查询学号

d:
cd Program Files\ExperimentForNetwork\pjproject-2.9\pjsip-apps\bin
pjsua-i386-Win32-vc14-Release.exe --no-tcp
(与服务器通信)
m
sip:12345@10.105.240.15

选择登录
*
2
输入组号
*
578#
输入密码
*
1234#

登录成功后
1录音及回放 ;2 回放录音 ;3 查询本组同学的学号
*
3

在这里插入图片描述

录音及回放

d:
cd Program Files\ExperimentForNetwork\pjproject-2.9\pjsip-apps\bin
pjsua-i386-Win32-vc14-Release.exe --no-tcp
(与服务器通信)
m
sip:12345@10.105.240.15

选择登录
*
2
输入组号
*
578#
输入密码
*
1234#

登录成功后
1录音及回放 ;2 回放录音 ;3 查询本组同学的学号
*
1

*
#

在这里插入图片描述
最后需要#结束

回放录音

d:
cd Program Files\ExperimentForNetwork\pjproject-2.9\pjsip-apps\bin
pjsua-i386-Win32-vc14-Release.exe --no-tcp
(与服务器通信)
m
sip:12345@10.105.240.15

选择登录
*
2
输入组号
*
578#
输入密码
*
1234#

登录成功后
1录音及回放 ;2 回放录音 ;3 查询本组同学的学号
*
2

*
#

在这里插入图片描述

Video support

Additional requirements

下载SDL 2.0:官网
在这里插入图片描述
下载最新的FFmpeg Builds,shared与dev版本均要下载:官网
这里我选择编译平台是win32
很多人说下不到。(百度云,换一下点)
https://pan点baidu点com/s/1AseWtxmXWTj2dqX80N5lUg
6reo

在这里插入图片描述

Additional configuration

参考win10 x64 VS2017 PJSIP 视频通话编译流程
将FFmpeg与SDL解压到pjproject-2.9目录下
在这里插入图片描述
其中ffmpeg的include和lib目录应该是在pjproject-2.9/ffmpeg-4.2.1-win32-dev
ffmpeg-4.2.1-win32-shared\bin其中的bin目录下全部dll文件复制到C:\Windows\SysWOW64目录下。
D:\pjproject-2.9\ffmpeg-4.2.1-win32-dev\include\libavcodec目录下的avcodec.h头文件,添加一行

#define FF_INPUT_BUFFER_PADDING_SIZE 32

在这里插入图片描述
其中SDL的include和lib目录应该是在pjproject-2.9\SDL2-2.0.10下。
D:\Program Files\ExperimentForNetwork\pjproject-2.9\SDL2-2.0.10\lib\x86其中的全部dll文件复制到C:\Windows\SysWOW64目录下。

在pjmedia、pjmedia-codec、pjmedia-videodev、pjsua、pjsystest、pjmedia_test、samples这几个工程中中添加ffmpeg、SDL的include和lib路径。
右键点击工程->属性->配置属性->C/C++->常规->附加包含目录中添加include路径;

D:\Program Files\ExperimentForNetwork\pjproject-2.9\ffmpeg-4.2.1-win32-dev\include
D:\Program Files\ExperimentForNetwork\pjproject-2.9\SDL2-2.0.10\include

在这里插入图片描述
右键点击工程->属性->配置属性->链接器->常规->附加库目录中添加lib路径。

D:\Program Files\ExperimentForNetwork\pjproject-2.9\SDL2-2.0.10\lib\x86
D:\Program Files\ExperimentForNetwork\pjproject-2.9\ffmpeg-4.2.1-win32-dev\lib

在这里插入图片描述
在pjsua项目的工程->属性->链接器->命令行->其他选项中添加/SAFESEH:NO,来忽略一个错误警告:error LNK2026 模块对于 SAFESEH 映像是不安全的

6>LINK : fatal error LNK1104: 无法打开文件“avutil.lib”
8>LINK : fatal error LNK1104: 无法打开文件“avcodec.lib”
9>LINK : fatal error LNK1104: 无法打开文件“avcodec.lib”

添加lib依赖项
ffmpeg

avcodec.lib
avdevice.lib
avfilter.lib
avformat.lib
avutil.lib
postproc.lib
swresample.lib
swscale.lib

SDL

SDL2.lib

放弃,还是失败了
在这里插入图片描述
配置config_site.h

#define PJMEDIA_HAS_VIDEO           1
#define PJMEDIA_VIDEO_DEV_HAS_SDL   1
#define PJMEDIA_VIDEO_DEV_HAS_DSHOW 1
#define PJMEDIA_HAS_FFMPEG          1

在这里插入图片描述
同样的操作对debug来一遍生成pjsip的lib文件供视频用
在这里插入图片描述
下载QT
Qt Downloads
在这里插入图片描述
点击安装,注册用户后,选择组件下一步直到安装完成
在这里插入图片描述
安装过程经常发生这种错误,是因为杀毒软件拦截了安装行为。
在这里插入图片描述
将QT目录添加到环境变量中
在这里插入图片描述
在命令行中,进入到pjproject-2.9\pjsip-apps\src\vidgui目录下,运行命令qmake -tp vc。

d:
cd Program Files\ExperimentForNetwork\pjproject-2.9\pjsip-apps\src\vidgui
qmake -tp vc

报错

D:\Program Files\ExperimentForNetwork\pjproject-2.9\pjsip-apps\src\vidgui>qmake -tp vc
WARNING: TARGET is empty
WARNING: TARGET is empty
WARNING: TARGET is empty

在同一目录下vidgui.pro文件中第30行“target =”后面添加一个文件名,编译成功后将会生成一个vcxproj类型的文件。
在vidgui.pro文件中追加一行:QT += core gui widgets,可以解决因为Qt4,Qt5之间的版本兼容问题带来的找不到某些头文件。
再将vidgui.pro文件中的11行的debug改成release,12和14行的vc8改成vc14。这是因为vs2015使用的是vc14,要成功编译就要改依赖库。
在这里插入图片描述
修改后再次运行qmake -tp vc
在这里插入图片描述
成功后生成下列文件。
在这里插入图片描述
将FFmpeg与SDL解压到pjproject-2.9目录下
在这里插入图片描述
其中ffmpeg的include和lib目录应该是在pjproject-2.9/ffmpeg-4.2.1-win32-dev
ffmpeg-4.2.1-win32-shared\bin其中的bin目录下全部dll文件复制到C:\Windows\SysWOW64目录下。
D:\pjproject-2.9\ffmpeg-4.2.1-win32-dev\include\libavcodec目录下的avcodec.h头文件,添加一行

#define FF_INPUT_BUFFER_PADDING_SIZE 32

在这里插入图片描述
将配置改成Release
其中SDL的include和lib目录应该是在pjproject-2.9\SDL2-2.0.10下。
D:\Program Files\ExperimentForNetwork\pjproject-2.9\SDL2-2.0.10\lib\x86其中的全部dll文件复制到C:\Windows\SysWOW64目录下。

在pjmedia、pjmedia-codec、pjmedia-videodev、pjsua这几个工程中中添加ffmpeg、SDL的include和lib路径。
右键点击工程->属性->配置属性->C/C++->常规->附加包含目录中添加include路径;

D:\Program Files\ExperimentForNetwork\pjproject-2.9\ffmpeg-4.2.1-win32-dev\include
D:\Program Files\ExperimentForNetwork\pjproject-2.9\SDL2-2.0.10\include

在这里插入图片描述
右键点击工程->属性->配置属性->链接器->常规->附加库目录中添加lib路径。

D:\Program Files\ExperimentForNetwork\pjproject-2.9\SDL2-2.0.10\lib\x86
D:\Program Files\ExperimentForNetwork\pjproject-2.9\ffmpeg-4.2.1-win32-dev\lib

在这里插入图片描述
在pjsua项目的工程->属性->链接器->命令行->其他选项中添加/SAFESEH:NO,来忽略一个错误警告:error LNK2026 模块对于 SAFESEH 映像是不安全的
在这里插入图片描述
pjproject-2.9\pjsip-apps\src\vidgui中的vidwin.cpp中37行的setAttribute(Qt::WA_PaintOutsidePaintEvent);注释掉。这句是针对directX11版本的。将vidgui.cpp中296行的toAscii().data()改成toLatin1()。这是因为在Qt5中,Qstring对象没有toAscii()方法。

编译

1>------ 已启动生成: 项目: vcxproj, 配置: Release Win32 ------
1>LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>vidgui.obj : error LNK2019: 无法解析的外部符号 _pjsua_vid_preview_param_default,该符号在函数 "public: void __thiscall MainWin::preview(void)" (?preview@MainWin@@QAEXXZ) 中被引用
1>vidgui.obj : error LNK2019: 无法解析的外部符号 _pjsua_vid_preview_start,该符号在函数 "public: void __thiscall MainWin::preview(void)" (?preview@MainWin@@QAEXXZ) 中被引用
1>vidgui.obj : error LNK2019: 无法解析的外部符号 _pjsua_vid_preview_get_win,该符号在函数 "public: void __thiscall MainWin::preview(void)" (?preview@MainWin@@QAEXXZ) 中被引用
1>vidgui.obj : error LNK2019: 无法解析的外部符号 _pjsua_vid_preview_stop,该符号在函数 "public: void __thiscall MainWin::preview(void)" (?preview@MainWin@@QAEXXZ) 中被引用
1>vidgui.obj : error LNK2019: 无法解析的外部符号 _pjsua_vid_win_get_info,该符号在函数 "public: void __thiscall MainWin::initVideoWindow(void)" (?initVideoWindow@MainWin@@QAEXXZ) 中被引用
1>vidgui.obj : error LNK2019: 无法解析的外部符号 _SDL_GetError,该符号在函数 _main 中被引用
1>vidgui.obj : error LNK2019: 无法解析的外部符号 _SDL_InitSubSystem,该符号在函数 _main 中被引用
1>release\\vcxproj.exe : fatal error LNK1120: 7 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========

这里失败的原因是因为pjsua没有编译好。
ffmpeg

avcodec.lib
avdevice.lib
avfilter.lib
avformat.lib
avutil.lib
postproc.lib
swresample.lib
swscale.lib

SDL

SDL2.lib

编译
在这里插入图片描述
生成的可执行程序是pjproject-2.9\pjsip-apps\src\vidgui\release目录下的可执行文件。双击打开。
在这里插入图片描述
打通电话。因为我笔记本没有图像设备,所以打开不了摄像头。
在这里插入图片描述

可以考虑搭建SIP服务器,下载MiniSipServer
安装后配置系统信息
在这里插入图片描述
添加分机信息
在这里插入图片描述

分别在100号和101号客户端运行pjsua,+a添加自己的用户信息

Your SIP URL: SIP:100@10.108.21.176
URL of the registrar:SIP:10.108.21.176
Auth Realm:myvoipapp.com
Auth Username:100
Auth Password: 100
Your SIP URL: SIP:101@10.108.21.176
URL of the registrar:SIP:10.108.21.176
Auth Realm:myvoipapp.com
Auth Username:101
Auth Password: 101

SIP对方的URL就可以打通了,是不是听到了滴滴滴滴的声音!

  • 37
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 40
    评论
pjsip是一种基于开源的多媒体通信库,它可以用于构建VoIP(Voice over Internet Protocol)应用程序。要在Windows系统上使用pjsip实现语音通话,可以按照以下步骤进行: 1. 下载pjsip库:首先,需要从pjsip的官方网站下载适用于Windowspjsip库。选择与您系统架构相对应的版本,例如32位或64位。 2. 配置编译环境:安装和配置C编译器,例如MinGW。确保您的编译环境在系统的PATH环境变量中。 3. 构建pjsip库:将下载的pjsip源代码解压到本地目录。在命令行中进入该目录,并执行以下命令来构建pjsip库: ``` ./configure make dep make ``` 此过程可能需要一些时间,具体取决于您的系统性能。 4. 创建C语言项目:在您的开发环境(例如Visual Studio)中创建一个新的C语言项目。 5. 配置项目include路径:将pjsip库的include文件夹添加到您的项目的include路径中,以便您可以使用pjsip的头文件。 6. 配置链接器路径:将pjsip库的库文件夹添加到您项目的库路径中,以便您可以链接pjsip库。 7. 编写代码:在您的C语言项目中编写代码来实现语音通话功能。您可以使用pjsip提供的API来初始化pjsip库、创建SIP用户代理、完成呼叫建立和音频流。 8. 构建并运行项目:使用您的开发环境的编译和构建工具,构建并运行您的C语言项目。确保pjsip库和您的项目正确链接。 通过以上步骤,您将能够在Windows系统上使用pjsip实现语音通话功能。请注意,使用pjsip进行语音通话需要了解SIP(Session Initiation Protocol)协议和相关的VoIP概念。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值