microsip是一个开源的轻量级sip软电话软件,其所用的协议栈是大名鼎鼎的pjsip协议栈
以下是个人手把手总结的编译修改microsip注意事项
1.下载库ffmepg,主要用来做h264的codec,可到如下目录中下载已经编好好的库,注意因为兼容性问题,不能用最新的0.11的ffmepg
只能用0.10的版本,已经编译好的windows库下载列表,从中选一个可以编译好的
windows环境已编译的dev库和动态库下载列表
开发包:http://ffmpeg.zeranoe.com/builds/win32/dev
动态库:http://ffmpeg.zeranoe.com/builds/win32/shared
本人选的是2011年12月份的最后一个版本下载的:
http://ffmpeg.zeranoe.com/builds/win32/dev/ffmpeg-git-f514695-win32-dev.7z
http://ffmpeg.zeranoe.com/builds/win32/shared/ffmpeg-git-f514695-win32-shared.7z
注意事项:对于vs2008,需要到网上找stdint.h和inttypes.h源文件,放入目录ffmpeg/include目录下,这个网站【http://ffmpeg.arrozcru.org/autobuilds/】的开发包中有着2个文件
中有这2个文件,可提取出来。
2.下载SDL 1.3版本编译生成库和链接
http://www.libsdl.org/tmp/SDL-1.3.zip
注意事项:不知道什么原因,用vs2008编译的DLL导致视频无法显示,我换了microsip.exe中的原版SDL.dll即可显示了。
下载的开发包生成的lib和头文件还是有用的。
3.下载DXSDK Aug2009,安装DirectX
http://www.microsoft.com/en-us/download/confirmation.aspx?id=23549
注意 如果装的是vs2008,别用2010的版本
4.下载pjsip源码,建议用2.0以上的版本
http://www.pjsip.org/download.htm
http://www.pjsip.org/release/0.5.4/PJSIP-Dev-Guide.pdf
pjsip的编译宏配置,是您能否成功的关键所在
a.新建config_site.h文件,路径为pjproject-2.0.1\pjlib\include\pj\config_site.h
b.添加如下配置,原因请看解释
#define PJSUA_HAS_VIDEO 1 //启用视频
#define PJMEDIA_HAS_VIDEO 1 //启用视频
#define PJMEDIA_VIDEO_DEV_HAS_SDL 1 //启用SDL视频设备,否则无法显示视频
#define PJMEDIA_VIDEO_DEV_SDL_HAS_OPENGL 0 //不依赖OPENGL
#define PJMEDIA_VIDEO_DEV_HAS_FFMPEG 0//不使用ffmepg视频设备,wpf的设备过时了
#define PJMEDIA_HAS_FFMPEG 1//启用ffmpeg,需要用到h264的codec进行视频编解码
#define PJMEDIA_HAS_FFMPEG_CODEC_H264 1//启用h264,不起用,microsip的setting对话框中的codec设置无h264选项。
#define PJMEDIA_VIDEO_DEV_HAS_DSHOW 1//启用direct show,依赖DirectX,不起用microsip的setting对话框中的Camera无法看到你的USB摄像头设备
#define PJMEDIA_VIDEO_DEV_HAS_AVI 0//不启用AVI设备
#define PJMEDIA_HAS_FFMPEG_VID_CODEC 1//启用ffmepg codec
c.选择pjsua子项目为Startup Project,开始编译前,请进该工程配置属性页面,点击Configuration Manager按钮,选择Win32平台,不要选择ARM平台来编译,
我就犯过这种傻。开始编译,遇到编译缺少头文件的,增加SDL,ffmpeg,directx SDK的路径到相应工程设置中
遇到链接通不过,则增加其lib路径到工程设置中,直到编译成功。
d.生成的pjsip project的lib库在为pjproject-2.0.1\lib目录下,大小约12M左右,这个库汇总了所有需要依赖的库,是microsip唯一需要依赖的pjsip库
例如我的Debug环境生成为libpjproject-i386-Win32-vc8-Debug.lib
5.下载microsip.exe,可以用来比较测试(非常好!),提取其SDL.dll
http://microsip.org.ua/downloads
6. 下载源码
http://microsip.org.ua/source
这个相对简单,打开vc工程即可编译,遇到编译缺少头文件的,增加pjsip, SDL,ffmpeg,directx SDK的路径到相应工程设置中
遇到链接通不过,则增加其lib路径到工程设置中,直到编译成功。
a. 遇到链接libpjproject-xxx.lib找不到的,该库即为前面第4步d项生成的总的pjsip库,在工程源码中查找该库名称,
并修改该库的名称为前面生成的库名。
b. 把SDL.dll,ffmpeg的DLL放到工程目录
c. 严重注意, 如果microsip.exe点击菜单”Account”和”Settings”无法显示对话框,是因为资源文件microsip.rc2中,含有SysLink控件,导致加载资源失败。
解决办法,删除资源中的所有SysLink控件即可。(该问题可能仅限vs2008环境)
d. 如果遇到可以拨打电话,无法接听电话的话(SIP 返回404错误),请打开microsipdlg.cpp文件,查找并删除该判断条件即可
accountSettings.domain != sipuri.domain
7.安装freeswitch作为缺省的sip server,用来测试
在linux下,可下载一个rpm包安装,不需要修改任何配置,即可运行
1. 安装完毕后,用service freeswitch start运行程序
2. 缺省可用sip账号:1001-1020,20个账号,密码都为1234,sip域名为服务器IP地址
希望我花费5个工作日时间,编译pjsip和microsip的经验,查阅上百网页搜集资讯,经过实践检验的总结能给您帮助,帮您少走弯路。
目前达到的效果是语音呼叫,视频呼叫等都很正常。
共 25 个评论(Comments)
大神,你那有没有pjmedia-audiodev-x86_64-x64-vc14-Release-Dynamic.lib这个库文件,我下载的pjsip中没有,网上也找不到,就是编译不过去,QQ:33758609,如能恢复,非常感谢
楼主,最新版3.15.1.0,(源码为MicroSIP-3.15.1-src.7z)
依赖的SDL与ffmpeg版本是什么,按照文中所述编译不了。
SDL的版本,您可以安装一个官方最新的microsip,查看SDL.dll文件的右键属性,查看sdl的版本号
ffmpeg可以查看相应的ffmepg的version.h,我估计是2.0以后的版本,如果版本太低,编译会报错。
sdl2.dll可以用了,视频没有问题
您好,
请教您个问题,请问最新版3.15.1.0所依赖的SDL与ffmpeg版本是什么。(源码为MicroSIP-3.15.1-src.7z)
楼主你可以确认一下,你试用的是Microsip的什么版本吗?
楼主,按照你的方法,我在VS2008中编译Microsip的时候提示 CLSID_DestinationList 未声明的标识符,我使用的是MicroSIP-3.9.6-src/ffmpeg-20150326/pjproject-2.3/SDL2-2.0.3,不知道此问题如何解决?
另附:在VS2008下 pjproject-2.3和SDL2-2.0.3都编译成功了
此问题已经解决,是新版对应的WIN7中TOOLBAR相关的操作功能,可以注释掉
我使用的版本太新了,编译通过运行还是有问题
请问您用的是什么开发环境,VS2012还是VS2005?
vs2008和vs2010
请问你使用MicroSIP哪个版本的源码编译?
microsip应该是去年年初发布的最新版本,3.2以上吧,具体记不清了,pjsip是2.0的版本
请教一下 我的microsip工程里pjsua_vid_enum_devs函数能枚举到usb摄像头 但是在自建的工程里枚举不到 能赐教下是什么原因吗
話說 account跟setting去把microsip.rc2的檔案裡面有syslink的部份統統mark起來後,setting可以正常顯示了。但account還是不行。
我是用vs2010
vs下的错误都可以通过F5进入调试状态进行定位的,可以重载函数 OnCreate,OnInitDialog这2个消息函数。特别是OnCreate,如果调用基类的OnCreate失败了,可以肯定就是资源文件还有其他问题。
話說 account跟setting去把microsip.rc2的檔案裡面有syslink的部份統統mark起來後
请问这个具体怎么做呢?比如:
IDD_MICROSIP_DIALOG DIALOGEX 0, 0, PAGE_WIDTH, 190
#ifdef _GLOBAL_PADDING_TOP
+ _GLOBAL_PADDING_TOP
#endif
#ifdef _GLOBAL_PADDING_BOTTOM
+ _GLOBAL_PADDING_BOTTOM
#endif
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
FONT 8, “MS Shell Dlg”, 0, 0, 0×1
BEGIN
CONTROL “”,ID_TAB,”SysTabControl32″,TCS_BUTTONS | 0×8,0,3,PAGE_WIDTH,16
END
IDD_ACCOUNT DIALOGEX 0, 0, 236, 322
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION “Account”
FONT 8, “MS Shell Dlg”, 400, 0, 0×1
BEGIN
RTEXT “SIP server”,IDC_STATIC,7,10,70,8
LTEXT “*”,IDC_STATIC,78,10,8,8
EDITTEXT IDC_EDIT_SERVER,86,7,127,14,ES_AUTOHSCROLL
RTEXT “SIP proxy”,IDC_STATIC,7,29,70,8
EDITTEXT IDC_EDIT_PROXY,86,26,127,14,ES_AUTOHSCROLL
RTEXT “User”,IDC_STATIC,7,55,70,8
LTEXT “*”,IDC_STATIC,78,55,8,8
EDITTEXT IDC_EDIT_USERNAME,86,52,127,14,ES_AUTOHSCROLL
RTEXT “Domain”,IDC_STATIC,7,74,70,8
LTEXT “*”,IDC_STATIC,78,74,8,8
EDITTEXT IDC_EDIT_DOMAIN,86,71,127,14,ES_AUTOHSCROLL
RTEXT “Login”,IDC_STATIC,7,93,70,8
EDITTEXT IDC_EDIT_AUTHID,86,90,127,14,ES_AUTOHSCROLL
RTEXT “Password”,IDC_STATIC,7,112,70,8
LTEXT “*”,IDC_STATIC,78,112,8,8
EDITTEXT IDC_EDIT_PASSWORD,86,109,127,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL “”,IDC_SYSLINK_DISPLAY_PASSWORD,”SysLink”,WS_TABSTOP,86,125,120,8
RTEXT “Your name”,IDC_STATIC,7,143,70,8
EDITTEXT IDC_EDIT_DISPLAYNAME,86,140,127,14,ES_AUTOHSCROLL
RTEXT “Media encryption”,IDC_STATIC,7,161,70,8
COMBOBOX IDC_SRTP,86,158,127,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT “Transport”,IDC_STATIC,7,179,70,8
COMBOBOX IDC_TRANSPORT,86,176,127,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT “Public address”,IDC_STATIC,7,198,70,8
COMBOBOX IDC_PUBLIC_ADDR,86,195,127,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
RTEXT “Local port”,IDC_STATIC,7,217,70,8
COMBOBOX IDC_LISTEN_PORT,86,214,127,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
CONTROL “Publish presence”,IDC_PUBLISH,”Button”,BS_AUTOCHECKBOX | WS_TABSTOP,86,234,127,10
RTEXT “STUN server”,IDC_STATIC,7,257,70,8
EDITTEXT IDC_STUN,85,254,127,14,ES_AUTOHSCROLL
CONTROL “ICE”,IDC_ICE,”Button”,BS_AUTOCHECKBOX | WS_TABSTOP,86,271,127,10
CONTROL “Allow IP rewrite”,IDC_REWRITE,”Button”,BS_AUTOCHECKBOX | WS_TABSTOP,86,286,127,10
CONTROL “”,IDC_SYSLINK_DELETE,”SysLink”,WS_TABSTOP,12,306,70,14
DEFPUSHBUTTON “Save”,IDOK,83,303,70,14
PUSHBUTTON “Cancel”,IDCANCEL,158,303,70,14
#ifndef _GLOBAL_CUSTOM
CONTROL “?“,IDC_SYSLINK_SIP_SERVER,”SysLink”,0×0,222,9,7,8
CONTROL “?“,IDC_SYSLINK_SIP_PROXY,”SysLink”,0×0,222,28,7,8
CONTROL “?“,IDC_SYSLINK_USERNAME,”SysLink”,0×0,222,55,7,8
CONTROL “?“,IDC_SYSLINK_DOMAIN,”SysLink”,0×0,222,73,7,8
CONTROL “?“,IDC_SYSLINK_AUTHID,”SysLink”,0×0,222,92,7,8
CONTROL “?“,IDC_SYSLINK_PASSWORD,”SysLink”,0×0,222,112,7,8
CONTROL “?“,IDC_SYSLINK_NAME,”SysLink”,0×0,222,142,7,8
CONTROL “?“,IDC_SYSLINK_ENCRYPTION,”SysLink”,0×0,222,160,7,8
CONTROL “?“,IDC_SYSLINK_TRANSPORT,”SysLink”,0×0,222,178,7,8
CONTROL “?“,IDC_SYSLINK_PUBLIC_ADDRESS,”SysLink”,0×0,222,197,7,8
CONTROL “?“,IDC_SYSLINK_LOCAL_PORT,”SysLink”,0×0,222,216,7,8
CONTROL “?“,IDC_SYSLINK_PUBLISH_PRESENCE,”SysLink”,0×0,222,234,7,8
CONTROL “?“,IDC_SYSLINK_STUN_SERVER,”SysLink”,0×0,222,257,7,8
CONTROL “?“,IDC_SYSLINK_ICE,”SysLink”,0×0,222,271,7,8
CONTROL “?“,IDC_SYSLINK_REWRITE,”SysLink”,0×0,222,286,7,8
#endif
END
有機會合作嗎? ppppp0820@gmail.com
不好意思,工作很忙,没时间!
请问删除资源中的所有SysLink控件即可,这个控件怎么删呢?可以举个例子吗?这是其中用到syslink的一个地方CONTROL “”,IDC_SYSLINK_DISPLAY_PASSWORD,”SysLink”,WS_TABSTOP,86,125,120,8
真诚期待你的解答!谢谢
很简单的,直接打开资源编辑器删除啊,再把引用到该控件id的代码,比方说DC_SYSLINK_DISPLAY_PASSWORD,从源码中注释或删除,用vs2008搜索这个资源id即可。
非常感谢
是否可以联系一下看看能否合作。758844758@qq.com
有何合作项目?
我现在编译microsip遇到好多问题,不知道有人也在编译吗。