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 ; 打開采集的設備的預覽窗口
到此大功告成,可以愉快的與自己進行視頻通話了,哈哈哈哈!!!