【问题标题】:Integrate Linphone in own iOS project将 Linphone 集成到自己的 iOS 项目中
【发布时间】:2015-03-31 05:52:58
【问题描述】:

我正在使用 Linphone 创建一个基于 voip 通话的项目,并且我还成功构建并运行了 Linphone 项目,并成功运行了音频和视频通话。现在我正在将 Linphone 集成到我自己的项目中,我面临着很多问题和问题。我使用了一些以下链接来寻求帮助,但没有完整的说明。谁能给我完整的运行步骤-

http://shallwelearn.com/blog/build-linphone-for-iphone-and-ipad/

Integrate Linphone app to my iOS app

How to integrate Linphone into an existing project (SIP in IOS)

http://www.linphone.org/technical-corner/linphone/overview

How to integrate Linphone into an existing project (SIP in IOS)

http://lists.gnu.org/archive/html/linphone-developers/2014-09/msg00109.html

http://www.successmonkey.co.nz/blog/building-linphone-for-ios

【问题讨论】:

    标签: ios iphone sip linphone


    【解决方案1】:
    • 从以下链接下载 Liblinphone iPhone SDK:http://www.linphone.org/releases/ios 选择最新的。
    • 将两个文件夹(includelib)移动到您的项目文件夹中
    • 在您的项目中添加这些文件夹的路径构建设置 - INCLUDE 文件夹转到 headers,LIB 文件夹转到 libraries
    • Linked frameworksGeneral 选项卡中添加 LIB 文件夹中的所有文件
    • 下载/克隆 repo https://github.com/BelledonneCommunications/linphone-iphone
    • 找到 4 个文件:LinphoneManager.h/.mUtils.h/.m ,将它们包含在您的项目文件夹中,并将它们添加到左侧窗格中的其他类文件也
    • 尝试编译您的项目 - xCode 会向您发送错误信息 - 没关系。
    • 您需要检查错误并删除所有导致错误的文件导入(一些 Linphone 通讯簿文件/一些配置存储文件和一些您在项目中基本使用不需要的帮助程序类(因为您很可能已经在现有项目中实现了此功能))
    • 然后再次编译并检查方法中的所有错误。注释删除任何有问题的代码块(大约有 10-15 个)。

    LinphoneManager 类已经包含了许多有用的功能 - 例如良好的观察和使用具有良好日志记录的 linphone 内核等等,但不是全部(不幸的是)。

    【讨论】:

    • 从以下链接下载 Liblinphone iPhone SDK:linphone.org/releases/ios 并选择最新的。
    • @AndreyKonstantinov - 我已经克隆了存储库,在 Linphone 应用程序中,liblinphone sdk 丢失了,然后我已经下载了上面提到的 Liblinphone sdk,然后运行 ​​libbelcard.a,libbelr.a 库显示丢失(在redcolor),我已删除该库并运行它。它最终在模拟器 6 和 6+ 上运行,但是当我在设备上运行时,它运行成功,但在登录过程中,它在设备上崩溃,但在模拟器上却没有,请指教,谢谢,崩溃日志:[_NSInlineData bytes]:消息发送到解除分配的实例
    • @DharmendraKumarRajan 看起来有些对象在您仍然需要的时候被释放了。看起来您已经在某个方法中创建了变量,并且在方法完成其任务后它已被释放。尝试制作实例变量。在这里很难指出正确的方向。
    • @NikolaLukic 它不是文件夹 - 它位于 XCode 中的项目选项卡之一中。转到项目(项目文件中顶部的蓝色图标 - 然后选择常规选项卡,然后向下滚动到框架部分)。
    • 我找不到这两个文件夹(include 和 lib)。而且这个链接也不起作用。 linphone.org/releases/ios/liblinphone-iphone-sdk-latest.zip
    【解决方案2】:

    Xcode 11 使用 macos 10.15.6 Catalina

    使用 Cocoapod 的 Linphone SDK 4.4.0

    https://github.com/BelledonneCommunications/linphone-sdk/blob/master/README.md

    使用本地 linphone SDK 从 gitlab 中克隆 linphone-sdk 存储库:

    $ git clone https://gitlab.linphone.org/BC/public/linphone-sdk.git --recursive 
    $ git submodule update --init --recursive
    

    或者

    $ git clone --recurse-submodules https://gitlab.linphone.org/BC/public/linphone-sdk.git
    

    重建项目:

    PODFILE_PATH= 吊舱安装 linphone-sdk 项目的构建目录在哪里,其中包含 linphone-sdk.podspec 文件和包含构建框架和资源的 linphone-sdk 输出目录。

    Pod 文件的样子


    source "https://gitlab.linphone.org/BC/public/podspec.git"
    source "https://github.com/CocoaPods/Specs.git"
    
    def common_pods
        use_frameworks!
    
        pod 'linphone-sdk', '4.4.0'
    end
    

    然后用 Xcode 打开 linphone.xcworkspace 来构建和运行应用程序。

    Linphone SDK 4.4.0 使用编译

    $ git clone https://gitlab.linphone.org/BC/public/linphone-sdk.git -- recursive
    $ git submodule update --init --recursive
    

    或者

    $ git clone --recurse-submodules https://gitlab.linphone.org/BC/public/linphone-sdk.git
    

    转到构建目录

    $ mkdir build && cd build
    

    ———————————

    https://gitlab.linphone.org/BC/public/linphone-cmake-builder/blob/ios-3.13.19/README.python.md

    首先,安装 brew

    $ brew install cmake
    $ brew install yasm
    $ brew install pkg-config
    

    安装 pip ->

    $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
    $ python get-pip.py
    
    $ python -m pip install pystache //Check by $ python -m pip list
    
    $ brew install doxygen
    

    ———————————

    $ cmake .. -G Xcode -DLINPHONESDK_PLATFORM=IOS -DENABLE_G729=YES -DENABLE_G729B_CNG=YES -DENABLE_VCARD=OFF -DENABLE_ILBC=OFF -DENABLE_SILK=OFF -DENABLE_ISAC=OFF -DENABLE_MKV=OFF -DENABLE_GSM=OFF -DENABLE_DOC=OFF -DENABLE_UNIT_TESTS=OFF -DENABLE_LIME=OFF -DENABLE_GPL_THIRD_PARTIES=OFF -DENABLE_NON_FREE_CODECS=OFF
    

    注意 - 在这一步中,我们还将在我们的 linphone sdk 中启用 G729 dedec 支持。

    $ cmake --build . --config RelWithDebInfo
    

    编译过程已经完成,现在需要与Xcode集成

    编译好的 Linphone SDK 集成到 Xcode 中。

    在下面的目录中找到编译好的sdk linphone-sdk -> 构建 -> linphone-sdk -> apple-darwin

    1. Frameworks 和 share 文件夹添加到 xcode 项目中,Frameworks 具有多种通用架构。
    2. 框架路径添加到构建设置中的框架搜索中
    3. Frameworks 文件夹中的每个框架,在添加到 Xcode 框架设置时,应默认键入“嵌入并签名”(意味着嵌入框架。)而不是“不嵌入”作为默认值。这是最重要的部分。
    4. apple-darwin -> Tools 文件夹有 deply.sh 脚本,复制其内容并在“构建设置”中创建一个新的运行脚本并粘贴进去”
    5. 棘手的部分是放置第 4 点的脚本以使用带条和切片的存档上传应用程序。编辑方案 -> 存档 -> 打开下拉列表 -> 发布操作 -> + 添加新脚本 -> 复制和粘贴。

    6(可选)。如果体验脚本由于我们的项目使用了fat library导致应用程序崩溃,脚本有一个小的改动,我从这个URL找到了解决方案-Errors building Xcode Project after adding in Run Script fatal error: lipo: input file

    APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
    
    find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
    do
        FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
        FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
        echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
    
    # Start of Script modify - identify if the framework is FAT. If it is, then it skips it.
        if [ ! -f "${FRAMEWORK_EXECUTABLE_PATH}" ]; then
            continue
        fi
    
        if xcrun lipo -info "${FRAMEWORK_EXECUTABLE_PATH}" | grep --silent "Non-fat"; then
            echo "Framework non-fat, skipping: $FRAMEWORK_EXECUTABLE_NAME"
            continue
        fi
    
        echo "Thinning framework $FRAMEWORK_EXECUTABLE_NAME"
    # end of Script modify
    
        EXTRACTED_ARCHS=()
    
        for ARCH in $ARCHS
        do
            echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
            lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
            EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
        done
    
        echo "Merging extracted architectures: ${ARCHS}"
        lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
        rm "${EXTRACTED_ARCHS[@]}"
    
        echo "Replacing original executable with thinned version"
        rm "$FRAMEWORK_EXECUTABLE_PATH"
        mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
    
    done
    
    1. 如果您使用的是 pod,请在您的 pod 目录上使用终端命令“pod deintegrate”解集成 pod。同时从项目中删除 .xcworkspace 文件。
    2. 现在使用终端命令“pod install”安装 pod

    注意:如果您的情况是添加脚本导致应用程序崩溃,正如我在第 6 点中提到的,但每次添加脚本时,都必须 pod de 集成帮助我避免它。

    :) 现在享受在您的项目中使用 linphone sdk。

    linphone sdk 结束

    我们项目中的 Linphone SDK 配置。

    1. 启用编解码器 - 要启用音频编解码器,首先在 Audio.plist 文件中启用 g729_preference 的 defaultValue,最后一步在项目 -> 目标 -> 构建设置中找到“预处理器宏”并包含 HAVE_G729,它会在 sip 日志中打印,如添加 G729 /8000 用于兼容性,以防万一。

    #Update - 添加第 5 点编译以将应用上传到应用商店和 G729 编解码器配置。

    【讨论】:

    • 我尝试使用上述步骤进行编译,但出现以下错误“以下构建命令失败:PhaseScriptExecution CMake\Rules build/linphone-sdk.build/Debug/ios-armv7.build/Script-8B6947E693B44EA0845EC051。 sh" 那么你能帮我解决这个错误吗?
    • @shraddhakvaishanani 两个概率可能是子模块无法在 git repo 中获取或未安装 CMake,请检查 github.com/BelledonneCommunications/linphone-sdk/blob/master/… 中的依赖关系。你能说出你在编译的哪个步骤卡住了吗?
    • 我被困在使用下面的命令 $ cmake --build 。 --config RelWithDebInfo
    • @RaviKumar 你能告诉我如何使用 linphone sdk 拨打电话号码吗?可能需要什么配置?我们已经准备好 PBX 服务器。
    • @MasterAgentX 据我了解,呼叫手机号码而不是 sip 用户,是服务器端配置,我们只需要使用手机号码而不是 sip 用户 ID 进行呼叫(根据 linphone 代码)。服务器应该了解“手机号码”不是 sip 用户 ID,因此他们将其设为对运营商手机号码的出站呼叫。除了我不知道。如果您找到了,请与我们分享,我们将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2014-08-31
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多