admin 管理员组

文章数量: 887609

        pjsip大体上是什么,更多内容可以参考pjsip背景组成等。项目需求在 Windows上部署运行,并开发客户端,客户端打算用MicroSip改造。MicroSip依赖pjsip。

        首先编译pjsip 2-11-1。依赖ffmpeg和sdl2,好多案例openh264不是必须的,但是我调用本地摄像头需要依赖openh264, windows 版本需要单独编译,我会单独说一下。

  •         下载pjsip源码

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

源码主要结构:

lib: [PJPROJECT的lib库]

pjlib:[基础框架库]

pjlib-util:[辅助工具库]

pjmedia:[开源的媒体栈]

pjnath:[开源的NAT-T辅助库]

pjsip:[开源的SIP协议栈]

pjsip-apps[demo] 

  • 下载ffmpeg, 下载windows版本

Download FFmpeg

  • 下载sdl2

Simple DirectMedia Layer - SDL version 2.0.18 (stable)

  •  编译方法,官方其实写的非常详细了,下面列了支持的平台

Windows 平台编译教程如下Getting-Started/Windows – pjsip Open source SIP, media, and NAT traversal stacks/libraries for smartphones 。具体就不展开了,直接列出需要修改的部分,需要修改的内容不仅限于如下的部分(其实就是指定库目录和包含目录,谁需要就给谁配一下)

  1. 进入指定目录../pjlib/include/pj/,创建config_site.h即可(VS必须手动创建),这个文件可以为空,为空是使用默认值。干脆把config_site_simple.h复制一份重命名为config_site.h

        参考配置

/*支持视频的参数*/
#define PJMEDIA_HAS_VIDEO 1  
#define PJMEDIA_HAS_OPENH264_CODEC 1
#define PJMEDIA_HAS_LIBYUV 1
#define PJMEDIA_VIDEO_DEV_HAS_SDL 1
#define PJMEDIA_VIDEO_DEV_HAS_DSHOW 1

/*ffmpeg 支持*/
#define PJMEDIA_HAS_FFMPEG 1

/*如果希望调用摄像头信息,除了默认支持VP8,还需要支持H264,这个也是网上好多其他教程部分情况无法调用摄像头的原因*/

#define PJMEDIA_HAS_OPENH264_CODEC    1
//#define PJMEDIA_HAS_VPX_CODEC            1    //by default VP8 codec is enabled
//#define PJMEDIA_HAS_VPX_CODEC_VP9       1    //enable VP9 codec

        2. 我使用vs2019编译,需要把Windows SDK和平台工具集统一

        3. 引入sdl2 和 ffmpeg

参考:

  • 完成上述配置,实际编译过程依然会报错,错误信息基本是pjsystest 、pjsip_test等项目找不到依赖的静态库,其实这些项目和pjsip本身没多大关系,是一些辅助的项目,分别单独设置一下就可以了,或者从当前解决方案内移除就可以啦。不影响项目运行。
  •  编译成功,可以运行pjsip-apps/bin/下的exe,效果如下

  • 测试打电话和发视频

        主叫端:

被叫需要回复a, 以及回传一个,进行应答 

 

可以看到Media 的信息包括:

只有语音没有视频:1 audio & 0 video

来自: from<sip:192.168.1.23>

打给:to<sip:192.168.1.111>

需要按a 接听,按h 拒绝接听

接听后需要回复一个100-600之间的任意整数。

然后就可以畅快通话了。

  • 打视频电话

需要先设置启用视频信息,双方都需要设置

vid enable               ; 打开视频

vid acc autotx on        ; 即使打开了视频,默认视频也不会自动开始传输。要修改该设置

vid acc autorx on        ; 即使接收到了视频,默认也不会播放,要修改该设置

接听方接听后,需要回复

vid call tx on 1 // 打开视频发送

这时候就可以看到视频了

 重新打电话

接听放协商回复

 

这时候看到Media: 1 audio & 1 video ,实测不回复也会开启视频传输

 看下视频效果

发起方:

 接听方:

本地测试,还可以,感觉略微有延迟。 

本文标签: 环境 Windows pjsip