首页 > 其他分享 >在IOS上使用jrtplib

在IOS上使用jrtplib

时间:2023-04-23 17:25:05浏览次数:26  
标签:文件 JRTPLIB SUPPORT IOS jrtplib 添加 RTP 使用 define

  最近因项目需求,需要在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的以来有三步

    1. 添加头文件搜索路径
    2. 添加库文件搜索路径
    3. 添加具体链接的二进制库文件(相当于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

相关文章

  • 使用encoder编码器-decoder解码器加GAN网络的生成式图像修复
    论文链接https://openaccess.thecvf.com/content_cvpr_2016/papers/Pathak_Context_Encoders_Feature_CVPR_2016_paper.pdf简介作者提出了一种基于上下文像素预测的无监督视觉特征学习算法,它既完成了特征提取,也完成了图像修复。通过与自动编码器的类比,提出了上下文编码器(Conte......
  • 如何使用 css 将页面缩小/缩放到 90%
    当我使用像笔记本电脑这样的设备时,它被放大了,当我缩小到90%时,它看起来好多了。我使用了缩放:90%;首先,但这不适用于Firefox或safari。通过一些研究,我发现transform:scale(0.9); 是要走的路。ZoomIE适用。但是,当我这样做时html或body{transform:scale(0.9); 它使网站......
  • Buildroot使用记录
     关键词:rootfs、BR2_EXTERNAL等等。 记录buildroot使用各种方法,以及解决的问题。1定制文件系统方法1.1根文件系统覆盖(BR2_ROOTFS_OVERLAY)将BR2_ROOTFS_OVERLAY指向的目录覆盖到output/target根文件系统。还可以通过都好间隔,指定多个目录。配置方式:Systemconfigurati......
  • 一统天下 flutter - widget Sliver: SliverGrid - 网格(需要在 CustomScrollView 中使
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widgetSliver:SliverGrid-网格(需要在CustomScrollView中使用)示例如下:lib\widget\sliver\sliver_grid.dart/**SliverGrid-网格(需要在CustomScrollView中使用)*/import'dart:......
  • 一统天下 flutter - widget Sliver: SliverAppBar/FlexibleSpaceBar - 可展开/收缩的
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widgetSliver:SliverAppBar/FlexibleSpaceBar-可展开/收缩的标题栏(需要在CustomScrollView中使用)示例如下:lib\widget\sliver\sliver_app_bar.dart/**SliverAppBar/FlexibleSpaceBar......
  • springboot使用mybatis应用clickhouse
    一、clickhouse,说白了还是数据库,不一样的是clickhouse是列式存储,和传统的MySQL行式存储不同的地方在于,查询和所储。1)查询,行式和列式的区别,图形说明说明:理解上来说,行式对于一条数据的完整性索引会更快。而列式对于统计和查询指定数据会更加块。2)数据......
  • jQuery Ajax 实例 详细介绍$.ajax、$.post、$.get的使用
    Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦需要处理浏览器之间的兼容问题,Jquery大大简化了我们的这些操作操作,不用在考虑浏览器这方面的问题,可以直接使用!$.post、$.get是一些简单的方法,如果要处理复杂的逻辑,还是需要用到jQuery.ajax() 一、$.ajax的一般格式$.ajax({......
  • Cookie禁用使用Session值方法
    Cookie禁用使用Session值方法:首先:    PHP中的Session在默认情况下是使用客户端的Cookie来保存SessionID的,所以当客户端的cookie出现问题的时候就会影响Session了。必须注意的是:Session不一定必须依赖Cookie,这也是Session相比Cookie的实用之处。当客户端的Cookie被禁用或出......
  • apisix网关使用自研插件流程
    1. 关于apisix网关插件apisix插件分为内置插件和自编插件,本文主要介绍使用自研插件的流程,内置插件使用方法参考官方文档内置插件官方文档:https://apisix.apache.org/zh/docs/apisix/plugins/batch-requests/2. 使用自研插件的实现步骤apisix支持多种语言自研插件,本文主要介......
  • 在C#中使用SQLite数据库
    轻量级桌面程序数据库不太适合用SQLServer、MySQL之类的重量级数据库,嵌入式数据库更好。在对比Access、SQLite、Firebird数据库后发现SQLite较另外两个有较多优点。环境:.NETFramework3.5、windows1164位、VisualStudio2010.C#使用SQLite需要从SQLite官网下载DLL组件。我是......