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>