最近因项目需求,需要在IOS上使用jrtplib,故在此记录编译流程。
正统流程应通过cmake编译,但因笔者对于不甚了解,因此做了一些取巧的操作。
本文基于jrtplib 3.11.2和jthread 1.3.3
一、编译jthread
首先在github上下载jthread源码:https://github.com/j0r1/JThread
然后新建一个IOS 静态库工程,工程名称笔者命名为了JThread。
然后像项目中添加源文件如下:
在此处笔者添加了一个文件 jthreadconfig.h。但是事实上源码中并没有这个文件,而是jthreadconfig.h.in。
事实上,这个.h文件就是由这个.in文件通过cmake生成的。
1.1 生成jthreadconfig.h文件
笔者这儿没有使用cmake,而是通过直接修改.in文件内容后修改文件后缀生成的.h文件。
将.in 文件内容更换如下:
#ifndef JTHREADCONFIG_H #define JTHREADCONFIG_H #define JTHREAD_IMPORT #define JTHREAD_EXPORT #ifndef JTHREAD_COMPILING #define JTHREAD_IMPORTEXPORT JTHREAD_EXPORT #else #define JTHREAD_IMPORTEXPORT JTHREAD_IMPORT #endif /* JTHREAD_COMPILING */ #endif /* JTHREADCONFIG_H */
1.2 编译
选择需要的架构即可执行编译。编译的结果默认会放在 /Users/${username}/Library/Developer/Xcode/DerivedData/下的JThread相关文件夹中。
二、编译jrtplib
与jthread相同,jrtplib中有几个文件也是通过cmake生成而来的:
-
- rtpconfig.h
- rtplibraryversioninternal.h
- rtptypes.h
可按照如下修改文件内容,并修改文件后缀。
2.1 生成rtptypes.h
修改.in文件内容为:
#include "rtpconfig.h" #include <stdint.h> #include <sys/types.h>
2.2 生成rtplibraryversioninternal.h
修改.in文件内容为:
#ifndef RTPLIBRARYVERSIONINTERNAL_H #define RTPLIBRARYVERSIONINTERNAL_H #define JRTPLIB_VERSION_MAJOR 3 #define JRTPLIB_VERSION_MINOR 11 #define JRTPLIB_VERSION_DEBUG 2 #endif // RTPLIBRARYVERSIONINTERNAL_H
这儿只是用于标识库的版本
2.3 生成rtpconfig.h
修改.in文件内容为:
#ifndef RTPCONFIG_UNIX_H #define RTPCONFIG_UNIX_H #ifndef JRTPLIB_UNUSED /** * Provide a macro to use for marking method parameters as unused. */ #define JRTPLIB_UNUSED(x) (void)(x) #endif // JRTPLIB_UNUSED #define JRTPLIB_IMPORT #define JRTPLIB_EXPORT #ifdef JRTPLIB_COMPILING #define JRTPLIB_IMPORTEXPORT JRTPLIB_EXPORT #else #define JRTPLIB_IMPORTEXPORT JRTPLIB_IMPORT #endif // JRTPLIB_COMPILING #define JRTPLIB_NO_COPY(ClassName) \ private: \ ClassName(const ClassName &); \ ClassName &operator=(const ClassName &); #define RTP_HAVE_SYS_FILIO #define RTP_HAVE_SYS_SOCKIO // Little endian system #define RTP_SOCKLENTYPE_UINT #define RTP_HAVE_SOCKADDR_LEN #define RTP_SUPPORT_IPV4MULTICAST #define RTP_SUPPORT_THREAD #define RTP_SUPPORT_SDESPRIV #define RTP_SUPPORT_PROBATION #define RTP_SUPPORT_GETLOGINR #define RTP_SUPPORT_IPV6 #define RTP_SUPPORT_IPV6MULTICAST #define RTP_SUPPORT_IFADDRS #define RTP_SUPPORT_SENDAPP #define RTP_SUPPORT_MEMORYMANAGEMENT // No support for sending unknown RTCP packets #define RTP_SUPPORT_NETINET_IN // Not using winsock sockets // No QueryPerformanceCounter support // No ui64 suffix // Stdio snprintf version #define RTP_HAVE_ARRAYALLOC // No rand_s support // No strncpy_s support // No SRTP support // No SRTP2 support #define RTP_HAVE_CLOCK_GETTIME #define RTP_HAVE_POLL // No 'WSAPoll' support #define RTP_HAVE_MSG_NOSIGNAL #endif //RTPCONFIG_UNIX_H
这儿的内容是根据源文件下的最外层CMakeLists.txt的配置生成的。其中一些宏定义是通过源文件下的test文件夹下的测试工程确定是否添加的。
需要注意的有大小端宏定义问题,具体看系统是使用大端模式还是小端模式。笔者这儿使用了小端模式,因为手机都是小端模式。
2.4 添加文件
同JThread工程一样,使用Xcode创建一个jrtplib的IOS静态库工程,然后添加源文件。
笔者在添加源文件时,没有选择添加extratransmitters文件夹中的rtpfaketransmitter。因为笔者不需要使用到。
2.5 添加依赖jThread
关于添加静态库jThread的以来有三步
- 添加头文件搜索路径
- 添加库文件搜索路径
- 添加具体链接的二进制库文件(相当于vs中的附加依赖项)
2.6 编译
选择需要的架构即可执行编译。编译的结果默认会放在 /Users/${username}/Library/Developer/Xcode/DerivedData/下的JRTPLIB相关文件夹中。
标签:文件,JRTPLIB,SUPPORT,IOS,jrtplib,添加,RTP,使用,define From: https://www.cnblogs.com/unrealCat/p/17346960.html