【问题标题】:G729 codec enable in PJSIP2.5 for iPhone在 iPhone 的 PJSIP2.5 中启用 G729 编解码器
【发布时间】:2019-04-15 00:23:51
【问题描述】:

我是使用 iPhone 构建 pjsip 的新手。我正在使用 iOS 9.3.2、Xcode 7.3 和 Pjsip 2.5。我已经成功构建了没有 g729 的 Pjsip 2.5,并且没有 g729 也可以正常工作。由于我的应用程序也需要 g729,因此我遵循 here 的所有指示

使用上述步骤启用 g729 后,在 "make dep && make clean && make" 时,对于我用于我的应用程序的所有架构,它都会出现以下错误。

../src/pjsua2-test/main.cpp
if test ! -d ../bin; then mkdir -p ../bin; fi
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/../../../Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -o ../bin/pjsua2-test-armv7-apple-darwin_ios \
         output/pjsua2-test-armv7-apple-darwin_ios/main.o -L/MyApps/pjproject/pjlib/lib -L/MyApps/pjproject/pjlib-util/lib -L/MyApps/pjproject/pjnath/lib -L/MyApps/pjproject/pjmedia/lib -L/MyApps/pjproject/pjsip/lib -L/MyApps/pjproject/third_party/lib           -O2 -arch armv7 -isysroot /Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk -framework AudioToolbox -framework Foundation -lpjsua2-armv7-apple-darwin_ios -lstdc++ -lpjsua-armv7-apple-darwin_ios -lpjsip-ua-armv7-apple-darwin_ios -lpjsip-simple-armv7-apple-darwin_ios -lpjsip-armv7-apple-darwin_ios -lpjmedia-codec-armv7-apple-darwin_ios -lpjmedia-armv7-apple-darwin_ios -lpjmedia-videodev-armv7-apple-darwin_ios -lpjmedia-audiodev-armv7-apple-darwin_ios -lpjmedia-armv7-apple-darwin_ios -lpjnath-armv7-apple-darwin_ios -lpjlib-util-armv7-apple-darwin_ios  -lsrtp-armv7-apple-darwin_ios -lresample-armv7-apple-darwin_ios -lgsmcodec-armv7-apple-darwin_ios -lspeex-armv7-apple-darwin_ios -lilbccodec-armv7-apple-darwin_ios -lg7221codec-armv7-apple-darwin_ios  -lpj-armv7-apple-darwin_ios -lm -lpthread  -framework CoreAudio -framework CoreFoundation -framework AudioToolbox -framework CFNetwork -framework UIKit -framework UIKit -framework OpenGLES -framework AVFoundation -framework CoreGraphics -framework QuartzCore -framework CoreVideo -framework CoreMedia 
Undefined symbols for architecture armv7:
  "_pjmedia_codec_g729_init", referenced from:
      _pjmedia_codec_register_audio_codecs in libpjmedia-codec-armv7-apple-darwin_ios.a(audio_codecs.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [../bin/pjsua2-test-armv7-apple-darwin_ios] Error 1
make[1]: *** [pjsua2-test-armv7-apple-darwin_ios] Error 2
make: *** [all] Error 1

我真的被困在这里了。请帮我解决这个问题。任何人的一条线索都会有所帮助。

【问题讨论】:

    标签: ios makefile voip pjsip g729


    【解决方案1】:

    如果您点击您提到的链接,您需要做的修改很少。

    1. pjmedia/build/Makefile:
    export PJMEDIA_CODEC_OBJS += audio_codecs.o ffmpeg_vid_codecs.o openh264.o\
    
                            h263_packetizer.o h264_packetizer.o \
    
                            $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
    
                            ipp_codecs.o silk.o opus.o $(CODEC_OBJS) \
    
                            g7221_sdp_match.o amr_sdp_match.o **g729.o**
    
    1. pjmedia/build/os-auto.mak.in:
     export CFLAGS += -I$(THIRD_PARTY)/g729/**Headers** 
    
    -DPJMEDIA_HAS_G729_CODEC=1
    
    1. 如下更改makefile (third_party/build/g729/Makefile):

    (注意:请确保您遵循 makefile 的规则,如果在任何情况下它会给出任何错误。要确认,请先构建 third_party/build/g729 /Makefile 使用 make 命令。看看它是否成功,那么完整的构建也将成功。)

        include ../../../build.mak
    
        include ../../../build/common.mak
    
        export LIBDIR := ../../lib
    
        RULES_MAK := $(PJDIR)/build/rules.mak
    
        export G729_CODEC_LIB := libg729codec-$(TARGET_NAME)$(LIBEXT)
    
        export _CFLAGS  := $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
                       $(CFLAGS) $(CC_INC)../.. $(CC_INC)../../g729/Headers \
                       $(CC_INC)../../../pjlib/include
    
         export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
                       $(HOST_CXXFLAGS) $(CXXFLAGS)
    
        export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \
                       $(LDFLAGS)
    
        export G729_CODEC_SRCDIR = ../../g729
    
        export G729_CODEC_OBJS = Sources/acelp_ca.o Sources/cod_ld8a.o Sources/dec_gain.o Sources/dspfunc.o Sources/g729a_encoder.o \
                             Sources/lpcfunc.o Sources/oper_32b.o Sources/post_pro.o Sources/pred_lt3.o Sources/tab_ld8a.o \
                             Sources/basic_op.o Sources/cor_func.o Sources/dec_lag3.o Sources/filter.o Sources/gainpred.o \
                             Sources/lspdec.o Sources/p_parity.o Sources/postfilt.o Sources/qua_gain.o Sources/taming.o \
                             Sources/bits.o Sources/de_acelp.o Sources/dec_ld8a.o Sources/g729a_decoder.o Sources/lpc.o \
                             Sources/lspgetq.o Sources/pitch_a.o Sources/pre_proc.o Sources/qua_lsp.o Sources/util.o
    
    
    
        export G729_CODEC_CFLAGS = $(_CFLAGS)
    
        TARGETS := $(G729_CODEC_LIB)
    
    
        all: $(TARGETS)
    
    
        doc:
            cd .. && doxygen docs/doxygen.cfg
    
    
        dep: depend
    
    
        distclean: realclean
    
    
    
        .PHONY: dep depend clean realclean distclean
    
        .PHONY: $(TARGETS)
    
        .PHONY: $(G729_CODEC_LIB)
    
        libg729codec: $(G729_CODEC_LIB)
    
        $(G729_CODEC_LIB):
            $(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $(subst /,$(HOST_PSEP),$(LIBDIR)/$@)
    
    
        clean print_lib:
            $(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $@
    
    
        realclean:
            $(subst @@,$(subst /,$(HOST_PSEP),.libg729codec-$(TARGET_NAME).depend),$(HOST_RMR))
    
            $(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $@
    
    
        depend:
            $(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $@
    

    【讨论】:

    • 嗨,我根据您的帖子进行了更改,之后我按照以下步骤操作:1. make clean,2. make,但它给出以下错误:ld:symbol(s) not found for architecture armv7 clang :错误:链接器命令失败,退出代码 1(使用 -v 查看调用)make[2]:*** [../bin/pjsua2-test-armv7-apple-darwin_ios] 错误 1 ​​make[1]:* ** [pjsua2-test-armv7-apple-darwin_ios] 错误 2 制作:*** [全部] 错误 1
    • g729 代码不正确导致的错误,请按照以下链接完成构建。 github.com/saravanandm/pjsip2.5-g729codec
    • 非常感谢。这个链接对我帮助很大。遵循所有命令后,我成功构建了 pjsip 项目。之后 xcode 抛出与 G729 支持相关的错误。请检查github.com/saravanandm/pjsip2.5-g729codec/issues/1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多