核心内容摘要
hlw葫芦里卖的什么药?颠覆你的认知,一场关于“不卖药”的深刻启示
前言Telegram 的研究先放一放在 Telegram 源码中看到了VOIP相关功能不禁想到自己上家公司的业务就是做VOIP 通讯趁着现在自己这段时间勤奋劲还没过特地记录下。
PJSIP 是什么PJSIP 是一个用C 语言编写的开源嵌入式 SIP 协议库实现了基于标准的协议如SIP、SDP、RTPSTUN、TURN 和 ICE把基于信令协议 SIP 的多媒体框架和 NAT 穿透功能整合成高层次、抽象的多媒体通信 API。
PJSIP 具有非常好的移植性几乎支持现今所有系统从桌面系统、嵌入式系统到智能手机。
PJSIP 同时支持语音、视频、状态呈现和即时通讯PJSIP 具有非常完善的文档对开发者非常友好。
PJSIP 基本框架PJSIP 库主要包括SIP 协议栈处理 SIP 消息流媒体处理模块RTP / RTCP 等媒体包处理SIP 协议部分SIP 协议由下往上进行了多层封装PJSIP -开源的 SIP 协议栈Open Source SIP stackPJMEDIA - 开源的媒体栈Open Source Media StackPJNATH - 开源的 NAT-T 辅助库Open Source NAT Traversal Helper LibraryPJLIB-UTIL - 辅助工具库Auxiliary LibraryPJLIB - 基础框架库Ultra Portable Base Framework Library对于 PJSIP 有以上基本了解就行毕竟目前我们主要目的是编译出 iOS 多架构静态库并导入到我们项目中进行功能开发~PJSIP 自动化导入pod pjsip懒人必备方式已经有先驱们因为个人需要编译了这个版本优点不需要繁琐的手动编译伸手即得。
缺点并不是官方存储库且人家已经完成了自己的开发任务目前停留在了
2.
1版本放弃了维护。
如果需要扩展某些功能他人编译出来的版本未必会支持到头来还是得自己重新编译~PJSIP 手动编译官方编译文档点这里截至目前2023/01/28为止官方能下载的最新版本是
13因此我将在这个版本上编译。
image.png
下载并解压缩首先我们去官方下载源代码推荐下载.tar.gz的压缩包。
下载完毕我们可以将其放到一个合适的目录下最好路径不包含中文我这里就是将其放在桌面上若你电脑上已经安装了解压缩软件就可以双击解压缩没有的话也没关系我们打开终端用命令解压缩tar -jxvf pjproject-
2.
tar.gz这样我们就能得到一个名为pjproject-
13的文件夹。
编译这里我已经写好了一个脚本#!/bin/sh touch pjlib/include/pj/config_site.h echo #define PJ_CONFIG_IPHONE 1 #define PJ_HAS_IPV6 1 #include pj/config_site_sample.h pjlib/include/pj/config_site.h mkdir -p ./lib export MIN_IOS-miphoneos-version-min
0 export DEVPATH/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer #编译 i
x86_
arm64 3种CPU架构 export ARCH-arch i386 CFLAGS-O2 -m32 -mios-simulator-version-min
0 LDFLAGS-O2 -m32 -mios-simulator-version-min
0 ./configure-iphone make dep make clean make export ARCH-arch x86_64 CFLAGS-O2 -m64 -mios-simulator-version-min
0 LDFLAGS-O2 -m64 -mios-simulator-version-min
0 ./configure-iphone make dep make clean make export ARCH-arch arm64 ./configure-iphone make dep make clean make #合并3种CPU架构的.a库 lipo -arch i386 third_party/lib/libg7221codec-i386-apple-darwin_ios.a -arch x86_64 third_party/lib/libg7221codec-x86_64-apple-darwin_ios.a -arch arm64 third_party/lib/libg7221codec-arm64-apple-darwin_ios.a -create -output lib/libg7221codec.a lipo -arch i386 third_party/lib/libgsmcodec-i386-apple-darwin_ios.a -arch x86_64 third_party/lib/libgsmcodec-x86_64-apple-darwin_ios.a -arch arm64 third_party/lib/libgsmcodec-arm64-apple-darwin_ios.a -create -output lib/libgsmcodec.a lipo -arch i386 third_party/lib/libilbccodec-i386-apple-darwin_ios.a -arch x86_64 third_party/lib/libilbccodec-x86_64-apple-darwin_ios.a -arch arm64 third_party/lib/libilbccodec-arm64-apple-darwin_ios.a -create -output lib/libilbccodec.a lipo -arch i386 pjlib/lib/libpj-i386-apple-darwin_ios.a -arch x86_64 pjlib/lib/libpj-x86_64-apple-darwin_ios.a -arch arm64 pjlib/lib/libpj-arm64-apple-darwin_ios.a -create -output lib/libpj.a lipo -arch i386 pjlib-util/lib/libpjlib-util-i386-apple-darwin_ios.a -arch x86_64 pjlib-util/lib/libpjlib-util-x86_64-apple-darwin_ios.a -arch arm64 pjlib-util/lib/libpjlib-util-arm64-apple-darwin_ios.a -create -output lib/libpjlib-util.a lipo -arch i386 pjmedia/lib/libpjmedia-audiodev-i386-apple-darwin_ios.a -arch x86_64 pjmedia/lib/libpjmedia-audiodev-x86_64-apple-darwin_ios.a -arch arm64 pjmedia/lib/libpjmedia-audiodev-arm64-apple-darwin_ios.a -create -output lib/libpjmedia-audiodev.a lipo -arch i386 pjmedia/lib/libpjmedia-codec-i386-apple-darwin_ios.a -arch x86_64 pjmedia/lib/libpjmedia-codec-x86_64-apple-darwin_ios.a -arch arm64 pjmedia/lib/libpjmedia-codec-arm64-apple-darwin_ios.a -create -output lib/libpjmedia-codec.a lipo -arch i386 pjmedia/lib/libpjmedia-videodev-i386-apple-darwin_ios.a -arch x86_64 pjmedia/lib/libpjmedia-videodev-x86_64-apple-darwin_ios.a -arch arm64 pjmedia/lib/libpjmedia-videodev-arm64-apple-darwin_ios.a -create -output lib/libpjmedia-videodev.a lipo -arch i386 pjmedia/lib/libpjmedia-i386-apple-darwin_ios.a -arch x86_64 pjmedia/lib/libpjmedia-x86_64-apple-darwin_ios.a -arch arm64 pjmedia/lib/libpjmedia-arm64-apple-darwin_ios.a -create -output lib/libpjmedia.a lipo -arch i386 pjnath/lib/libpjnath-i386-apple-darwin_ios.a -arch x86_64 pjnath/lib/libpjnath-x86_64-apple-darwin_ios.a -arch arm64 pjnath/lib/libpjnath-arm64-apple-darwin_ios.a -create -output lib/libpjnath.a lipo -arch i386 pjsip/lib/libpjsip-simple-i386-apple-darwin_ios.a -arch x86_64 pjsip/lib/libpjsip-simple-x86_64-apple-darwin_ios.a -arch arm64 pjsip/lib/libpjsip-simple-arm64-apple-darwin_ios.a -create -output lib/libpjsip-simple.a lipo -arch i386 pjsip/lib/libpjsip-ua-i386-apple-darwin_ios.a -arch x86_64 pjsip/lib/libpjsip-ua-x86_64-apple-darwin_ios.a -arch arm64 pjsip/lib/libpjsip-ua-arm64-apple-darwin_ios.a -create -output lib/libpjsip-ua.a lipo -arch i386 pjsip/lib/libpjsip-i386-apple-darwin_ios.a -arch x86_64 pjsip/lib/libpjsip-x86_64-apple-darwin_ios.a -arch arm64 pjsip/lib/libpjsip-arm64-apple-darwin_ios.a -create -output lib/libpjsip.a lipo -arch i386 pjsip/lib/libpjsua-i386-apple-darwin_ios.a -arch x86_64 pjsip/lib/libpjsua-x86_64-apple-darwin_ios.a -arch arm64 pjsip/lib/libpjsua-arm64-apple-darwin_ios.a -create -output lib/libpjsua.a lipo -arch i386 pjsip/lib/libpjsua2-i386-apple-darwin_ios.a -arch x86_64 pjsip/lib/libpjsua2-x86_64-apple-darwin_ios.a -arch arm64 pjsip/lib/libpjsua2-arm64-apple-darwin_ios.a -create -output lib/libpjsua
a lipo -arch i386 third_party/lib/libresample-i386-apple-darwin_ios.a -arch x86_64 third_party/lib/libresample-x86_64-apple-darwin_ios.a -arch arm64 third_party/lib/libresample-arm64-apple-darwin_ios.a -create -output lib/libresample.a lipo -arch i386 third_party/lib/libspeex-i386-apple-darwin_ios.a -arch x86_64 third_party/lib/libspeex-x86_64-apple-darwin_ios.a -arch arm64 third_party/lib/libspeex-arm64-apple-darwin_ios.a -create -output lib/libspeex.a lipo -arch i386 third_party/lib/libsrtp-i386-apple-darwin_ios.a -arch x86_64 third_party/lib/libsrtp-x86_64-apple-darwin_ios.a -arch arm64 third_party/lib/libsrtp-arm64-apple-darwin_ios.a -create -output lib/libsrtp.a lipo -arch i386 third_party/lib/libwebrtc-i386-apple-darwin_ios.a -arch x86_64 third_party/lib/libwebrtc-x86_64-apple-darwin_ios.a -arch arm64 third_party/lib/libwebrtc-arm64-apple-darwin_ios.a -create -output lib/libwebrtc.a lipo -arch i386 third_party/lib/libyuv-i386-apple-darwin_ios.a -arch x86_64 third_party/lib/libyuv-x86_64-apple-darwin_ios.a -arch arm64 third_party/lib/libyuv-arm64-apple-darwin_ios.a -create -output lib/libyuv.a将该脚本保存为build-iphone.sh存放到刚解压完成的pjproject-
13文件夹下然后执行cd pjproject-
13进入到pjproject-
13文件夹接着执行./build-iphone.sh如果提示权限不够那么使用chmod 777 build-iphone.sh来赋予该文件最大的访问权限接着再次执行./build-iphone.sh执行完后所有生成的不同架构的静态库都会被合并且存放在pjproject-
13/lib目录下image.png
集成在桌面上新建一个文件夹名为PJSIP将上一步编译完成的lib文件夹复制到PJSIP目录下并在PJSIP文件夹目录下新建一个includes文件夹存放对应的头文件。
image.pngincludes下新建的文件夹分别存放对应pjproject-
13里相同名字文件夹下的include文件。
然后我们新建一个 iOS 的项目testPJSIPDemo将PJSIP拖入到项目根目录下项目结构如图image.png注意includes 文件夹不要添加到项目中来只需添加 lib 文件夹但我们仍需保证上图中的目录结构image.png在项目工程配置中在targets为testPJSIPDemo的Build Settings设置以下配置Header Search Path:$(PROJECT_DIR)/testPJSIPDemo/PJSIP/includes/pjlib $(PROJECT_DIR)/testPJSIPDemo/PJSIP/includes/pjlib-util $(PROJECT_DIR)/testPJSIPDemo/PJSIP/includes/pjmedia $(PROJECT_DIR)/testPJSIPDemo/PJSIP/includes/pjnath $(PROJECT_DIR)/testPJSIPDemo/PJSIP/includes/pjsipOther Linker Flags 添加 -ObjCPreprocessor Macros 添加 PJ_AUTOCONF1Enable Bitcode 设置为 NO在Build Phases中的Link Binary With Libraries中添加下面几个FrameworkSecuritySystemConfigurationVideoToolboxAudioToolboxAVFoundationCFNetworkCoreAudioCoreFoundationCoreImageCoreMediaCoreVideoOpenGLESQuartzCoreFoundationCoreGraphicsUIKit在info.plist添加相机如果需要视频通话和使用麦克风所需的权限Privacy - Microphone Usage DescriptionPrivacy - Camera Usage Description走完上面的步骤我们就可以正常的使用pjsip库了Command B编译下你的工程如果有警告或错误那就说明你的配置可能出现了问题。
AI大模型学习福利作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。
至于能学习到多少就看你的学习毅力和能力了 。
我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
全套AGI大模型学习路线AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取
640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。
无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。
因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获
AI大模型经典PDF籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。
这些大型预训练模型如GPT-
BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。
那以下这些PDF籍就是非常不错的学习资源。
因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获