Bootstrap

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,动态编译后程序运行需要)版本 ,如图:


找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>









;