编译webrtc到pjsip中的方法

网络上编译webrtc的方法很多,大都直接使用GOOGLE的本身提供的编译webrtc的方法。实际上webrtc本身就是支持夸平台的代码,因此理论上说,可以将WEBRTC中对你有用代码提出来,编译到任何的平台中。

下面就是这两天折腾的将webrtc的audio_processing模块编译整合到了pjsip中去的编译过程:


         pjsip库是一个跨平台的VOIP库,支持语音和视频,在android平台编译是通过makefile的方式来进行的。使用编译工具链是ndk提供的。比如当前我们使用的就是android-ndk-r10e版本中提供的工具链,具体到编译工具,主要分为三大类,一个是编译C语言的工具。使用的是: android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc

编译C++的工具是:

android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++

这两个编译器是我的linux中配置的android相应的版本所采用的工具链,具体的不同版本采用的只是版本不同的GCC和G++。

编译框架

         PJSIP的主要编译原理是将所有的生成动作的makefile文件放置在根目录下的build/rules.mak 中,这个文件主要是定义的通用的生成规则,根目录下build.mak由build.mak.in生成,主要是用于环境检查以及生成各个脚本中的宏定义。然后再各个子模块的build目录下均有一个Makefile文件用于生成该子模块。

集成WEBRTC方式

对于WEBRTC,我们采用的集成方式是,将WEBRTC作为一个第三方的静态库集成到PJSIP中去,具体就是将WEBRTC的代码放到pjsip库目录下的third_party/webrtc/目录下,同时将编译脚本放置到/third_party/build/webrtc目录下。

脚本准备:

         1.在跟目录下的build.mak中加入如下代码:

        

 #add for webrtc audio module compile
ifneq (,1)
APP_THIRD_PARTY_LIB_FILES += $(PJ_DIR)/third_party/lib/libwebrtc-$(LIB_SUFFIX)
ifeq ($(PJ_SHARED_LIBRARIES),)
APP_THIRD_PARTY_LIBS += -lwebrtc-$(TARGET_NAME)
else
APP_THIRD_PARTY_LIBS += -lwebrtc
APP_THIRD_PARTY_LIB_FILES +=$(PJ_DIR)/third_party/lib/libwebrtc.$(SHLIB_SUFFIX).$(PJ_VERSION_MAJOR)$(PJ_DIR)/third_party/lib/libwebrtc.$(SHLIB_SUFFIX)
endif
endif

参考:

2. 将build/rules.mak文件拷贝一份,修改名字为rules-webrtc.mak,

将$(OBJDIR)/%$(OBJEXT):$(SRCDIR)/%.m 改为$(OBJDIR)/%$(OBJEXT):$(SRCDIR)/%.cc

将$(SRCDIR)/$(basename$(file)).m 改为$(SRCDIR)/$(basename$(file)).cc

参考:

3. 将third_party/build/webrtc/目录中新建一个Makefile文件。内容如下:

$(warning Makefile begin)
include ../../../build.mak
include ../../../build/common.mak
$(warning  include build.mak common.mak end)
export LIBDIR := ../../lib

RULES_MAK := $(PJDIR)/build/rules-webrtc.mak

export WEBRTC_LIB := libwebrtc-$(TARGET_NAME)$(LIBEXT)

ifeq ($(PJ_SHARED_LIBRARIES),)
else
export WEBRTC_SONAME := libwebrtc.$(SHLIB_SUFFIX)
export WEBRTC_SHLIB := $(WEBRTC_SONAME).$(PJ_VERSION_MAJOR)
endif

###############################################################################
# Gather all flags.
#
WEBRTC_EXTRA_CFLAGS :=  -DNDEBUG -DWEBRTC_NO_LOG -DWEBRTC_ANDROID -DWEBRTC_POSIX -DWEBRTC_LINUX -DWEBRTC_NS_FIXED -DWEBRTC_CLOCK_TYPE_REALTIME -mfloat-abi=softfp -mfpu=neon
export _CFLAGS 	:= $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) $(WEBRTC_EXTRA_CFLAGS) \
		   $(CFLAGS) $(CC_INC). $(CC_INC)../../webrtc \
		   $(CC_INC)../../webrtc/webrtc/common_audio/include \
		   $(CC_INC)../../webrtc/webrtc/common_audio/signal_processing/include

           #$(CC_INC)/root/android-ndk-r10e/platforms/android-19/arch-arm/usr/include
           #$(CC_INC)/root/android-ndk-r10e/platforms/android-19/arch-arm/usr/include/machine/\
           #$(CC_INC)/root/android-ndk-r10e//platforms/android-19/arch-arm/usr/include/

export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
		   $(HOST_CXXFLAGS) $(CXXFLAGS) $(WEBRTC_EXTRA_CFLAGS) -std=c++11 
export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \
		   $(APP_LDFLAGS) $(LDFLAGS) 

export WEBRTC_SRCDIR = ../../webrtc/webrtc
export WEBRTC_OBJS =base/checks.o 
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值