win10 x64 VS2017 PJSIP 视频通话编译流程
1. 下载PJSIP源码
PJSIP源码下载地址:https://www.pjsip.org/
2. 阅读一遍官方的文档
文档地址:https://trac.pjsip.org/repos/wiki/Getting-Started
本文以Win10 + VS2017 为例
官方文档最好还是先读一遍。
3. 下载SDL
SDL 官方地址:https://www.libsdl.org/download-2.0.php
下载如下图版本
我们需要的是下载后得到的 SDL2-devel-2.0.10-VC\SDL2-2.0.10\lib\x64 目录下的文件
如下图:
4. 下载ffmpeg
下载地址:https://ffmpeg.zeranoe.com/builds/
这里需要下载两个版本
注意: Dev 是编译需要用到里面的 lib 文件
Shared 目前理解为运行时需要用到的dll
5. 安装Windows SDK
下载地址:https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk
6. VS2017 打开PJSIP
因为PJSIP官网提供的是VS2015的版本,如果用VS2017打开需要升级平台工具集 v140 到 v141
升级步骤参考此处:https://blog.csdn.net/qq_38265674/article/details/80539228
7. 配置PJSIP 编译环境
7.1 配置config_site.h
pj配置,新建空白的config_site.h
路径为:.\pjlib\include\pj\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
7.2 编译前配置ffmpeg 和 SDL
将下载的DEV 版本的ffmpeg 的所有lib文件放入 .\pjproject-2.9\lib 目录下,注意你是x86还是x64
将下载的SDL 所有lib 文件也放入此目录下,有文章说只放sdl2.lib 但是我试了一致编译不通过,放所有的lib就可以编译通过
在.\pjproject-2.9 新建 include 文件夹
并在include 新建文件夹 ffmpeg 和sdl
将下载的DEV 版本的ffmpeg 的 .\ffmpeg-4.2-win64-dev\include 下所有的文件拷贝到新建的\include\ffmpeg 目录
将下载的 SDL 的.\SDL2-devel-2.0.10-VC\SDL2-2.0.10\include 下所有的文件拷贝到新建的 \include\sdl 目录下
7.3 配置编译环境
对相应的项目右键属性进行如下配置
对项目 pjmedia_videodev 的 VC++目录 -> 包含目录 添加 ;$(MSBuildStartupDirectory)\include\sdl;
对项目 pjmedia_videodev 的 VC++目录 -> 库目录 添加 ;$(MSBuildStartupDirectory)\lib;
对项目 pjmedia 的 VC++目录 -> 包含目录 添加 ;$(MSBuildStartupDirectory)\include\ffmpeg;
对项目 pjmedia 的 VC++目录 -> 库目录 添加 ;$(MSBuildStartupDirectory)\lib;
对项目 pjmedia_codec 的 VC++目录 -> 包含目录 添加 ;$(MSBuildStartupDirectory)\include\ffmpeg;
对项目 pjmedia_codec 的 VC++目录 -> 库目录 添加 ;$(MSBuildStartupDirectory)\lib;
注意: 确保 你安装的windows SDK 版本是你编译时选择的版本。编译时需要修改pjproject-2.9\pjmedia\src\pjmedia-codec\ffmpeg_vid_codecs.c 1713行 FF_INPUT_BUFFER_PADDING_SIZE 为 AV_INPUT_BUFFER_PADDING_SIZE
7.4 设置PJSUA 为启动项进行编译
注意你选则的编译平台,我选择的都是x64 的
编译成功后,生成的文件在 .\pjproject-2.9\pjsip-apps\bin\pjsua-x86_64-x64-vc14-Debug.exe
如果此时直接双击运行则会报错,缺少 *.dll
所以需要将之前下载的 ffmpeg shared 版本下的 .\ffmpeg-20190826-0821bc4-win64-shared\bin\下的所有 dll 拷贝的生成的 .\pjproject-2.9\pjsip-apps\bin\路径下
同样对于SDL 也需要将下载的 sdl2.dll 拷贝到 .\pjproject-2.9\pjsip-apps\bin\路径下 路径下
这样在运行时应该不会报错
运行截图
8. 使用编译后的pjsua进行视频通话
视频通话前需要开启视频设置
vid enable ; 打开视频
vid acc autotx on ; 即使打开了视频,默认视频也不会自动开始传输。要修改该设置
vid acc autorx on ; 即使接收到了视频,默认也不会播放,要修改该设置
这之前在进行呼叫前设置
在命令行输入 m 进行呼叫
在命令行继续输入 sip:192.168.19.73 呼叫另一台电脑
两个运行的pjsua 都需要进行上面的开启视频设置
接收方的电脑需要 先输入 a 进行接收通话,回车后输入 200 建立通话
此时双方通信只有音频,需要开启视频的传送
vid call tx on 1 ; 打开视频发送
双方都要设置,这样才能进行视频发送
显示预览窗框使用
vid dev prev on -1 ; 打开采集的设备的预览窗口
到此大功告成,可以愉快的与自己进行视频通话了,哈哈哈哈!!!
参考网址
pjsip win32启用视频通话
Win10环境下使用VS2015编译PJProject
解决Visual Studio(2017)软件无法重新生成问题
Getting Started: Building and Using PJSIP and PJMEDIA