[Compile UniMRCP Client JNI] #Compile
UniMRCP是一种在外呼系统中较为常见的音频传输协议,其客户端和服务器端均有C++开源代码实现。同时官方为方便其他语言进行UniMRCP的客户端开发,提供了其他语言调用Unimrcp client库的指南。
Linux系统Unimrcp client的JNI编译完全参照官方提供的编译步骤即可(参见:https://github.com/unispeech/swig-wrapper/blob/master/INSTALL)
官方指南中虽然也简单提及了windows系统下的JNI编译方法,但实际编译过程中存在非常多的问题,故在此记录
安装Visual Studio
下载unimrcp dependence和src,并合并两个文件夹
编译apr静态库。进入D:\unimrcp-1.2.0\unimrcp-1.2.0\libs\apr,编译apr工程,编译选项:
编译apr-util静态库。进入D:\unimrcp-1.2.0\unimrcp-1.2.0\libs\apr-util,编译apr-util工程,编译选项:
编译xml静态库。进入D:\Win\unimrcp-1.2.0\libs\apr-util\xml\expat\lib,编译xml工程,编译选项:
编译pthread静态库。进入D:\Win\unimrcp-1.2.0\libs\sofia-sip\win32\pthread,编译libpthread工程,编译选项:
编译sofia-sip静态库。进入D:\Win\unimrcp-1.2.0\libs\sofia-sip\win32\libsofia-sip-ua-static,编译libsofia_sip_ua_static工程,编译选项:
编译方案unimrcp-2010各个静态库(源码主目录下)。进入D:\Win\unimrcp-1.2.0,编译unimrcp-2010.sln方案,只编译其中libs,modules,platforms下的工程,只编译client相关的工程,编译选项:
将上一步生成的所有静态库也拷贝到D:\Win\unimrcp-static下放在一起
进入cmake安装路径,修改Findswig.cmake首行中swig的执行路径
find_program(SWIG_EXECUTABLE NAMES swig3.0 swig2.0 swig)
set(SWIG_EXECUTABLE "C:/Program Files/swigwin-3.0.12/swig.exe")
将swig安装目录/Lib下的所有文件拷贝到D:\Win\swig-wrapper-static下,否则后面会找不到.swg文件,并且将Lib/java文件下的typemaps.i和所有swg也拷贝出来放在D:\Win\swig-wrapper-static下,否则找不到该文件
修改FindSofia.cmake的227行:
file (STRINGS "${SOFIA_INCLUDE_DIR}/features/sofia-sip/sofia_features.h" _sofia_ver
进入D:\Win\swig-wrapper-static下,按照如下参数指定库路径,头文件路径和生成静态库选项,然后 运行cmake命令
cmake
-D APR_LIBRARY=D:\Win\unimrcp-static\apr-1.lib
-D APR_INCLUDE_DIR=D:\Win\unimrcp-1.2.0\libs\apr\include
-D APU_LIBRARY=D:\Win\unimrcp-static\aprutil-1.lib
-D APU_INCLUDE_DIR=D:\Win\unimrcp-1.2.0\libs\apr-util\include
-D APU_XML_LIBRARY=D:\Win\unimrcp-static\xml.lib
-D SOFIA_INCLUDE_DIR=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua
-D SOFIA_INC_bnf=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\bnf\sofia-sip
-D SOFIA_INC_features=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\features\sofia-sip
-D SOFIA_INC_iptsec=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\iptsec\sofia-sip
-D SOFIA_INC_msg=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\msg\sofia-sip
-D SOFIA_INC_nea=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\nea\sofia-sip
-D SOFIA_INC_nta=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\nta\sofia-sip
-D SOFIA_INC_nua=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\nua\sofia-sip
-D SOFIA_INC_sdp=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\sdp\sofia-sip
-D SOFIA_INC_sip=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\sip\sofia-sip
-D SOFIA_INC_soa=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\soa\sofia-sip
-D SOFIA_INC_su=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\su\sofia-sip
-D SOFIA_INC_tport=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\tport\sofia-sip
-D SOFIA_INC_url=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\url\sofia-sip
-D SOFIA_INC_win32=D:\Win\unimrcp-1.2.0\libs\sofia-sip\libsofia-sip-ua\win32\sofia-sip
-D SOFIA_LIBRARY=D:\Win\unimrcp-static\libsofia_sip_ua_static.lib
-D SOFIA_PTW32_INCLUDE_DIR=D:\Win\unimrcp-1.2.0\libs\sofia-sip\win32\pthread
-D SOFIA_PTW32_LIBRARY=D:\Win\unimrcp-static\pthreadVC2.lib
-D UNIMRCP_CLIENT_LIBRARY=D:\Win\unimrcp-static\libunimrcpclient.lib
-D UNIMRCP_CLIENT_INCLUDE_DIRS=D:\Win\unimrcp-1.2.0\libs\mrcp-client\include
-D UNIMRCP_INCLUDE_DIR=D:\Win\unimrcp-1.2.0\libs\mrcp\include
-D UNIMRCP_SOURCE_DIR=D:\Win\unimrcp-1.2.0
-D UNIMRCP_aprtoolkit_LIBRARY=D:\Win\unimrcp-static\aprtoolkit.lib
-D UNIMRCP_mpf_LIBRARY=D:\Win\unimrcp-static\mpf.lib
-D UNIMRCP_mrcp_LIBRARY=D:\Win\unimrcp-static\mrcp.lib
-D UNIMRCP_mrcpclient_LIBRARY=D:\Win\unimrcp-static\mrcpclient.lib
-D UNIMRCP_mrcpsignaling_LIBRARY=D:\Win\unimrcp-static\mrcpsignaling.lib
-D UNIMRCP_mrcpsofiasip_LIBRARY=D:\Win\unimrcp-static\mrcpsofiasip.lib
-D UNIMRCP_mrcpunirtsp_LIBRARY=D:\Win\unimrcp-static\mrcpunirtsp.lib
-D UNIMRCP_mrcpv2transport_LIBRARY=D:\Win\unimrcp-static\mrcpv2transport.lib
-D UNIMRCP_unirtsp_LIBRARY=D:\Win\unimrcp-static\unirtsp.lib
-D CMAKE_STATIC_LINKER_FLAGS=/machine:X64
-D MSVCRT_STATIC=ON
-D APR_STATIC=ON
-D APU_STATIC=ON
-D SOFIA_STATIC=ON
-D UNIMRCP_STATIC=ON
-D SWIG_DIR=C:\Program Files\swigwin-3.0.12\Lib
-D SWIG_EXECUTABLE=C:\Program Files\swigwin-3.0.12\swig.exe
-D WRAP_JAVA=ON
编译mrcp swapper库,生成UniMRCP.dll。修改UniMRCP-wrapper.cpp中头文件路径"su_config.h"和"sofia_features.h",并将对应的文件拷贝到根目录下。进入D:\Win\swig-wrapper-static,打开UniMRCPWrapper.sln,只编译JUniMRCP工程。编译选项:
验证编译结果
java -Djava.library.path=. UniRecog "D:\Win\unimrcp_test\data\grammar.xml" "D:\Win\unimrcp_test\data\demo-8kHz.pcm"
UNIMRCP
MRCPv2
UniMRCP C++/SWIG Wrapper Released
Swig / Java
Build Swig-wrapper erro [Could NOT find APR (missing: APR_LIBRARIES APR_INCLUDE_DIRS)]