pjsip(2.4.5)增加視訊功能
(讓需要的人少走一些彎路)
1、程式下載下傳:http://www.pjsip.org/;
2、根據官方建議,windows編譯環境選用vs2012 Professional版本,系統win7 64位,采用ffmpeg方式實作視訊功能;
3、編譯基本的音頻功能:在pjproject-2.4.5\pjlib\include\pj下,重命名config_site_sample.h為config_site.h,開始編譯,此時僅支援語音;
4、準備工作
(1)下載下傳并安裝DX9 SDK,pj官方測試過8、9版本;
(2)SDL2.0庫:http://www.libsdl.org/;
(3)ffmpeg:https://ffmpeg.zeranoe.com/builds/,pj官方對2.8版本進行過測試,是以需要找以前的版本,這裡并沒有從源碼編譯,而是直接找編譯好的dev(提供頭檔案和lib庫)和shared(提供dll,動态編譯後程式運作需要)版本 ,如圖:
找2.8版本
5、一些修改
(1)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
#define PJMEDIA_HAS_FFMPEG 1
(2)去pj官網更新檔案ffmpeg_util.h和ffmpeg_util.c,2.4.5發行版中這倆檔案并不和ffmpeg2.8版本比對;
(3)需要頭檔案inttypes.h、stdint.h,通常位于:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include;
6、開始編譯
你所需要的東西理論上都已準備好,将一些需要的庫和頭檔案加入搜尋路徑,如pjmedia_videodev項目需添加SDL和ffmpeg的頭檔案路徑及lib庫路徑,一些test工程或samples工程編譯不過去可忽略。
7、建立一個MFC工程,實作視訊預覽功能核心代碼
pjsua_vid_preview_param parm;
pjsua_vid_preview_param_default(&parm);
parm.rend_id = PJMEDIA_VID_DEFAULT_RENDER_DEV;
parm.show = PJ_TRUE;
pj_status_t r = pjsua_vid_preview_start(PJMEDIA_VID_DEFAULT_CAPTURE_DEV,&parm);
8、實作視訊呼叫
(1)賬戶設定
acc_cfg.videoConfig.autoShowIncoming = true; //自動接收并顯示來的視訊流
acc_cfg.videoConfig.autoTransmitOutgoing = true; //自動向外傳輸視訊流
acc_cfg.videoConfig.defaultCaptureDevice = PJMEDIA_VID_DEFAULT_CAPTURE_DEV;
(2)視訊接聽
pjsua_call_setting call_setting;
pjsua_call_setting_default(&call_setting);
call_setting.vid_cnt = 1;
pjsua_call_answer2((*it)->getId(), &call_setting, 200, NULL, NULL);
(3)視訊外呼
<span style="font-size:12px;"> Call *call = new MyCall(*acc);
acc->calls.push_back(call);
CallOpParam prm(true);
prm.opt.audioCount = 1;
prm.opt.videoCount = 1;
number=_T("sip:")+number+_T("@")+host;
call->makeCall(number.GetBuffer(),prm);</span>