天天看點

pjsip(2.4.5)增加視訊功能

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,動态編譯後程式運作需要)版本 ,如圖:

pjsip(2.4.5)增加視訊功能

找2.8版本

pjsip(2.4.5)增加視訊功能

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>