如何使用 Xcode link 或在 Objective C 项目上添加 openh264 库

How to link or add openh264 library on Objective C project using Xcode

我正在使用 Openh264 库。我之前在 Linux 环境中使用过这个库。但是我还没有在 Xcode 上找到 link openh264 库的任何工作文档。

我尝试了其他解决方案来在 Xcode 中添加 .a 或 .so 库文件,例如: 一)How to import a C++ library into a Xcode Objective C project? ii) How to link or load shared libraries (.so) in Objective C?

但不幸的是我每次都失败了。 我从这个 link 得到了 OpenH264: https://github.com/cisco/openh264。 我可以执行 Openh264 库提供的演示编码器解码器项目,但我需要在我自己的项目中 link 这个库的帮助。 提前致谢。

以下是将 OpenH264 库集成到任何 Xcode 项目的步骤:

  1. 从此 link 下载或克隆 OpenH264 库:https://github.com/cisco/openh264
  2. 创建 Xcode 项目选择 IOS 应用程序、Objective C 和其他强制选项。
  3. 将 OpenH264 库与所有文件和文件夹放在项目根目录中。例如,我的 IOS 应用程序位于目录 /user/rajib/HelloApp/HelloApp.xcodeproj,OpenH264 库保存在 /user/rajib/HelloApp/OpenH264Library
  4. 现在打开终端并启用root模式。
  5. 转到保存 OpenH264Library 的目录并使用以下命令进行制作:->sudo make OS=ios ARCH=amrv7 install
  6. 现在转到项目构建设置并找到 Header 搜索路径 属性。在单独的行中将以下 header 路径添加到该属性。 $(继承),"$(SRCROOT)/OpenH264Library/codec/encoder/core/inc","$(SRCROOT)/OpenH264Library/codec/processing/interface", "$(SRCROOT)/OpenH264Library/codec/common/inc", "$(SRCROOT)/OpenH264Library/codec/api/svc",
  7. 现在我们必须整合另外 3 个 Xcode 名为 common.xcodeprojprocessing.xcodeproj 的项目, welsenc.xcodeproj 在我们的 HelloApp 项目中。所有这些 .xcodeproj 文件都可以在 OpenH264Library 中找到。我们必须在 OpenH264Library 中找到这些具有该名称的 .xcodeproj 文件,并将这些文件拖放到我们的 HelloApp 项目中。
  8. 现在转到项目构建阶段并找到 Target Dependencies 属性。从工作地点添加 welsencprocessingcommon 项目。
  9. 尝试构建这个项目,然后这3个项目将编译并执行,我们将在我们的工作场所找到3个静态库。
  10. 现在再次进入项目构建阶段,找到 Link 带有 Libraries 属性的二进制文件。从工作场所添加 libwelsenc.a、libprocessing.a、libcommon.a 静态库。

就是这样...这是构建和 linking openh264 库的过程。 现在可以轻松调用openh264库函数了。在这里,我给出了一个简单的编码器初始化工作代码调用 OpenH264 库函数。

//Adding Header files
#include "codec_api.h"
#include "codec_def.h"

//Calling OpenH264 Library function to initialize Encoder
- (IBAction)EncoderTestBtn:(id)sender {
    NSLog(@"Inside EncoderTestBtn");
    ISVCEncoder *pEncoder = NULL;
    int iRet = -1;
    iRet = WelsCreateSVCEncoder(&pEncoder);
    if(iRet == 0)
    {
        NSLog(@"Rajib_Check: Encoder Initialization SUCCESSFUL");
    }
    else
    {
        NSLog(@"Rajib_Check: ERROR--> iRet returned with = %d", iRet);
    }

}