将Linphone集成到自己的iOS项目中

时间:2015-03-31 05:52:58

标签: ios iphone sip linphone

我正在使用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

2 个答案:

答案 0 :(得分:5)

  • 从以下链接下载Liblinphone iPhone SDK:http://www.linphone.org/releases/ios/liblinphone-iphone-sdk-latest.zip 来自此处,http://www.linphone.org/releases/ios 并从这里选择最新的一个。
  • 将两个文件夹(包含 lib )移至项目文件夹
  • 在项目中添加指向这些文件夹的路径构建设置 - INCLUDE文件夹转到标题,LIB文件夹转到图书馆
  • 链接框架中的常规标签添加 LIB 文件夹中的所有文件
  • 下载/克隆回购https://github.com/BelledonneCommunications/linphone-iphone
  • 找到4个文件: LinphoneManager.h / .m Utils.h / .m ,将它们包含在项目文件夹中,并将它们添加到左侧窗格中类文件也
  • 尝试编译您的项目 - xCode会向您发送错误信息 - 这没关系。
  • 您需要检查错误并删除导致错误的所有文件导入(某些Linphone地址簿文件/某些配置存储文件以及您在项目中不需要基本用途的一些帮助程序类)因为很可能你已经在现有项目中实现了这个功能))
  • 然后再次编译并检查方法中的所有错误。注释删除任何有问题的代码块(大约有10-15个代码)。

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

答案 1 :(得分:4)

使用MacOS 10.15.6 Catalina的Xcode 11

使用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 ouptut目录,其中包含已构建的框架和资源。

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

安装点->

$ 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. 将框架和共享文件夹添加到xcode项目中,框架具有多种通用架构。
  2. 将框架路径添加到构建设置中的框架搜索中
  3. 在添加到Xcode Framework设置中时,默认情况下,每个Frameworks文件夹框架的类型均应为“ embed and sign”(表示嵌入框架。),而不是默认为“ not embed”。这是最重要的部分。
  4. apple-darwin-> Tools文件夹具有deply.sh脚本,复制其内容并在“构建设置”中创建一个新的运行脚本,然后将其粘贴”
  5. 棘手的部分是在哪里放置第4点的脚本,以使用带有条带和切片的存档来上传应用程序。编辑方案->存档->打开下拉菜单->发布操作-> +添加新脚本->复制并粘贴。

6(可选)。如果体验脚本由于我们的项目使用了胖子库而导致应用程序崩溃,则脚本中有一个小的更改,我从此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

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

:)现在喜欢在您的项目中使用linphone sdk。

linphone sdk的结尾

我们项目中的Linphone SDK配置。

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

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