[iOS] SRT编译傻瓜教程

以下以SRT ver 1.4.3为例
这个版本可能会过时, 但编译方法都是一样的.
我会将影响版本编译的地方, 插入一些说明.

1.基本环境准备


  • MacOS
  • Homebrew
Homebrew安装

打开终端输入

  /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"


2.编译环境准备


通过Homebrew安装

  • cmake

ver 2.8.12 或更高

brew install cmake


  • pkg-config
brew install pkg-config


  • openssl

ver 1.1
一般来说, MacOS都会自带, 注意版本号

brew install openssl

Q: 我可能没有. 或者说 我怎么找到本地中安装的openssl?
A: /usr/local/Cellar/openssl/版本号/bin/openssl

如果没有你需要按照上面自己安装一个, 版本尽量满足1.1的要求(1.1.x)

Q: 我有openssl, 怎样知道他是否生效呢?
A: 在终端中输入下面命令

openssl version

Q: 我有openssl, 但使用openssl version时, 提示我没有找到这个命令
A: 你需要link一下

注意openssl的路径中带有版本号.
所以复制粘贴的时候, 你需要结合自身的环境修改.
我的环境中如下

  ln -s /usr/local/Cellar/openssl/1.1.1k/bin/openssl /usr/local/bin

在这一切结束后, 你要知道你的openssl版本号, 因为下面会用到.

3.SRT的准备


SRT在GitHub中的地址

选择一种方式, 将代码下载下来

 git clone https://github.com/Haivision/srt.git


4.OpenSSL-for-iOS的准备


OpenSSL for iOS 在GitHub中的地址
选择一种方式, 将代码下载下来

 git clone https://github.com/x2on/OpenSSL-for-iPhone.git

Q: 刚刚不是才安装过openssl吗?
A: 这个是给iOS环境用的, 结合Xcode工具链编译的.

Q: 为什么特别说明结合Xcode工具链编译的
A: 因为不通过Xcode工具链编译, 在iOS中就用不了啊(笑)

5.OpenSSL-for-iOS编译


当你下载ok后, 进入到OpenSSL-for-iPhone文件中, 执行

还记得上面让你记录的版本号吗? 请在这里配置他--version=1.1.x

sh ./build-libssl.sh --version=1.1.1d

不出意外的话, 编译完成后, 你可以在OpenSSL-for-iPhone/bin中找到一些SDK文件
比如iPhoneOS14.5-arm64.sdk
这个就是在Xcode中可以使用的openssl静态库
他们都是使用处理器架构命名的

如果你的项目中需要支持多种处理器架构, 你需要将同名的下列文件合并到一起
libssl.a
libcrypto.a

只是简单的合并两个库的话, 使用下面的命令后, 路径3下的libssl.alibcrypto.a是最终生成的fat包

lipo -create 路径1/libssl.a 路径2/libssl.a -output 路径3/libssl.a
lipo -create 路径1/libcrypto.a 路径2/libcrypto.a -output 路径3/libcrypto.a

如果你需要合并三个及以上, 你可以参考这篇文章

以上完成后, 还需要做一些事情

  • 新建一个文件夹起名为openssl-iOS
  • 将SDK中的include拷贝进来 (任何一个SDK中的都可以)
  • 将SDK中的lib 拷贝进来 (如果你的.a是自己合成的, 那就拷贝你的.a)
  • lib中的package文件夹删除掉

你的openssl文件中, 应该是这样的结构

openssl-iOS
+-- lib
     +-- libssl.a
     +-- libcrypto.a
+-- include
     +-- xxxx.h
     +-- ...(.h有很多)

记得这个openssl-iOS文件夹, 一会儿要用到他.

6.SRT编译


首先, 在终端中进入到srt文件夹中, (如果你下载的是zip包, 文件夹叫srt-master)

cd srt

配置三个环境变量
这里配置的是安装到你mac中的openssl的路径

export OPENSSL_ROOT_DIR=$(brew --prefix openssl)
export OPENSSL_LIB_DIR=$(brew --prefix openssl)"/lib"
export OPENSSL_INCLUDE_DIR=$(brew --prefix openssl)"/include"

然后再配置一个环境变量
这里配置的是, 在iOS环境中, srt依赖的openssl

这里用到的是上面openssl-iOS文件夹的路径
为了方便说明
我没有为自己创建openssl-iOS路径
而是直接使用OpenSSL-for-iPhone/bin下的SDK文件夹作为路径
如果是你的话, 应该在export IOS_OPENSSL=后面写上openssl-iOS的绝对路径

export IOS_OPENSSL="/Users/panda/source/OpenSSL-for-iPhone/bin/iPhoneOS14.5-arm64.sdk"



ok到这一步为止, 一切准备妥当
如果你的cmake没有问题的话, 你可以开始编译了
以下是三条命令合一, 你可以一起使用, 也可以逐条使用

./configure --cmake-prefix-path=$IOS_OPENSSL --use-openssl-pc=OFF --cmake-toolchain-file=scripts/iOS.cmake
make
make install

7.编译后的处理


编译结束后, 你需要找到你的include和.a文件,他们的路径在下面
/usr/local/lib/libsrt.a
/usr/local/include/srt

你可以创建一个lib文件夹
将上面openssl-iOS中的文件
和刚刚生成的srt相关文件, 全部放进去, 整理成如下结构

同一个include中, 尽量不要混放多个库的.h文件
我建议你为他们创建一个以库名命名的文件夹收纳, 方便管理
当然这只是一个建议

lib
+-- libssl.a
+-- libcrypto.a
+-- libsrt.a
+-- include
     +-- srt
          +-- xxxx.h
          +-- ...(.h有很多)
     +-- openssl
          +-- xxxx.h
          +-- ...(.h有很多)

将他导入你的Xcode中

  • 设置Header Search Paths
    TargetsBuild SettingsSearch PathsHeader Search Paths
    加入$(PROJECT_DIR)/Project名称/lib/include
    设置为recursive, 以便让Xcode明白这里需要递归搜索

  • 设置Library Search Paths
    TargetsBuild SettingsSearch PathsLibrary Search Paths
    加入$(PROJECT_DIR)/Project名称/lib
    设置为recursive, 以便让Xcode明白这里需要递归搜索

  • 加入Framework
    TargetsGeneralFrameworks, Libraries, and Embedded Content
    点击+添加一个
    libc++.1.tbd
    然后点击+选择Add Other...加入下列
    libssl.a
    libcrypto.a
    libsrt.a

如果有帮助到您的话, 期待您的打赏
如果有疑问的话, 欢迎随时提问
如果有错误的话, 欢迎您的指正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容