GVKun编程网logo

Windows、Linux、ARM、Android、iOS全平台支持的RTMP推流组件libEasyRTMP库接口调用说明

4

本文的目的是介绍Windows、Linux、ARM、Android、iOS全平台支持的RTMP推流组件libEasyRTMP库接口调用说明的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同

本文的目的是介绍Windows、Linux、ARM、Android、iOS全平台支持的RTMP推流组件libEasyRTMP库接口调用说明的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于Android 模拟器支持运行 ARM 应用,Android 11 系统映像可直接将 ARM 指令转换成 x86 指令、ARM 和 RISC-V 公然开撕,GNOME 之父指责 ARM、ARM 处理器各个模式之间是如何切换的?ARM 各个模式之间切换时,上下文的保存哪些是硬件在做?哪些是操作系统在做?、ARM 处理器详解(1)- ARM Cortex-A 系列处理器的知识。

本文目录一览:

Windows、Linux、ARM、Android、iOS全平台支持的RTMP推流组件libEasyRTMP库接口调用说明

Windows、Linux、ARM、Android、iOS全平台支持的RTMP推流组件libEasyRTMP库接口调用说明

EasyRTMP是结合了多种音视频缓存及网络技术的一个rtmp直播推流端,包括:圆形缓冲区(circular buffer)、智能丢帧、自动重连、rtmp协议等等多种技术,能够非常有效地适应各种平台(Windows、Linux、ARM、Android、iOS),各种网络环境(有线、wifi、4G),以及各种情况下的直播恢复(服务器重启、网络重启、硬件设备重启)。

EasyRTMP工作流程.png

libEasyRTMP库接口调用说明

API接口函数定义

函数说明:激活EasyRTMP
EasyRTMP_API Easy_I32 Easy_APICALL EasyRTMP_Activate(char *license)

函数说明:创建RTMP推送Session 返回推送句柄
EasyRTMP_API Easy_Handle Easy_APICALL EasyRTMP_Create(void)

函数说明: 设置数据回调
参数说明:userptr传输自定义对象指针
EasyRTMP_API Easy_I32 Easy_APICALL EasyRTMP_SetCallback(Easy_Handle handle, EasyRTMPCallBack _callback, void * _userptr);

函数说明:连接RTMP服务器
参数说明:url流媒体地址
EasyRTMP_API Easy_Bool Easy_APICALL EasyRTMP_Connect(Easy_Handle handle, const char *url)

函数说明:推送H264或AAC流
EasyRTMP_API Easy_U32 Easy_APICALL EasyRTMP_SendPacket(Easy_Handle handle, EASY_AV_Frame* frame)

函数说明:获取缓冲区大小
EasyRTMP_API Easy_I32 Easy_APICALL EasyRTMP_GetBufInfo(Easy_Handle handle, int* usedSize, int* totalSize)

函数说明:停止RTMP推送,释放句柄
EasyRTMP_API void Easy_APICALL EasyRTMP_Release(Easy_Handle handle)

Android 模拟器支持运行 ARM 应用,Android 11 系统映像可直接将 ARM 指令转换成 x86 指令

Android 模拟器支持运行 ARM 应用,Android 11 系统映像可直接将 ARM 指令转换成 x86 指令

技术编辑:鸣飞转载于谷歌开发者公众号


随着 Android 11 开发者预览版的发布,我们同时也推出了Android 11 系统映像。新的系统映像在执行 ARM 二进制文件方面取得了显著的性能提升。

此前,依赖 ARM 库且无法构建 x86 版本应用的开发者只能使用完整的 ARM 模拟系统映像 (其速度远低于在 x86 设备上运行 x86 系统映像) 或者实体机。Android 11 系统映像能够在不影响整个系统的前提下,直接将 ARM 指令转换成 x86 指令。开发者无需搭建高负载的 ARM 环境即可执行 ARM 二进制文件并进行测试。

全新的 Android 11 (Google API) x86 系统映像支持 ARM 应用二进制接口 (ABI),较旧版本的 Android Oreo 系统映像并不提供该支持

  • Android 11 系统映像https://developer.android.goo...

技术细节

我们可能需要结合具体情景来说明这项新技术的重要性,尤其是如果您只使用 Kotlin 或 Java 编程语言来构建应用的话。Kotlin 和 Java 编程语言均在 ART (Android 运行时) 上执行,但 C++ 则与它们不同,Android 应用中的所有 C++ 指令会直接编译为机器指令,也就是说,目标设备的平台架构决定着 C++ 的编译方法。移动手机一般搭载 ARM 处理器,因此,您为应用添加的许多 C++ 依赖项 (例如摄像头条形码扫描库) 仅与 ARM 处理器兼容。在这种情形下,如果您使用基于 x86 处理器的设备进行开发工作,便会遇到应用无法运行的问题。

过去,开发者需要通过模拟器镜系统映像搭建一个完整的 ARM 环境,才能绕过这个限制并在 x86 机器上执行 ARM 应用。但是,把整个系统的 ARM 指令都转换成 x86 指令会造成过高的性能负荷,因此与基于 x86 的系统映像相比,完整的 ARM 系统映像在 x86 宿主机上的运行速度会慢很多,而且它还无法使用 x86 处理器提供的硬件加速和 CPU 虚拟化技术。

全新的Android 11 系统映像与 ARM 兼容,它不仅允许整个系统在本机运行 x86 指令,而且还可以照常使用虚拟化技术。当应用的某个进程需要使用 ARM 二进制代码时,代码仅会在该进程内被转换成 x86 指令,其余进程将继续在 x86 环境内执行,包括 Android 运行时 (ART) 以及其它性能关键库,例如libGLES和libvulkan。除此以外,指令转换器也不会执行低层的硬件特定库,从而避免高成本的内存访问检测和相应的性能影响。在 ARM 公司的协作下,新的模拟器系统映像在本地和持续集成框架内均可运行。

  • Android 11 系统映像
    https://developer.android.goo...
  • libGLES https://developer.android.goo...
  • libvulkan

    https://developer.android.goo...

下一步

如果您之前由于缺乏高性能的 ARM 支持,去选择了实体机而非模拟器,不妨尝试一下Android 11 系统映像。此映像文件目前已随 Android 11 开发者预览版一同开放下载。您可通过 SDK Manager 或者Android Virtual Device Manager将最新版本的系统映像下载至 Android Studio。

使用 Android Virtual Device Manager 创建一个运行 Android 11 的 AVD

  • Android 11 系统映像

    https://developer.android.goo...

  • Android Virtual Device Manager 

    https://developer.android.goo...

一旦应用在模拟器中成功运行后,请考虑适配 Chrome OS。Chrome OS 同样也支持在 x86 笔记本上执行 ARM 版本的 Android 应用。通过构建适用于 Chrome OS 的应用,您可以挖掘大屏幕设备生态圈所蕴含的海量机遇,让全球更多的用户认识您的应用。

  • 适配 Chrome OS

    https://developer.android.goo...

这项技术可以帮助更多开发者在 Android 模拟器上进行测试。我们建议开发者同时构建 x86 和 ARM ABI 两个版本的应用,使其在物理设备上拥有最佳的运行性能并吸引尽可能多的用户。接下来,我们计划在多个 API 级别普及这项技术,同时确保它能和实体机一样支持所有测试用例。欢迎大家向我们提交反馈,帮助我们进一步优化这项新技术。

  • 提交反馈

    https://issuetracker.google.com/issues?q=componentid:192727%20status:open

请注意: ARM - x86 指令转换技术可用于执行 ARM 公司旗下的产品。该技术只可通过 Google API 和 Play Store 系统映像获取,且仅用于在 x86 台式机、笔记本、客户端本地服务器或自购的云环境上进行应用开发和调试。该技术不可在商用托管服务下使用。

Java 是 Oracle 和/或其附属公司的注册商标。

原文链接:在 Android 模拟器上运行 ARM 应用

ARM 和 RISC-V 公然开撕,GNOME 之父指责 ARM

ARM 和 RISC-V 公然开撕,GNOME 之父指责 ARM

之前我们曾报道过“因 ARM 授权费用太贵,科技巨头欲转向开源架构 RISC-V” 的消息,与 ARM 相比,开源的 RISC-V 指令集可以自由地用于任何目的,允许任何人设计、制造和销售 RISC-V 芯片和软件,也因此 RISC-V 在嵌入式平台正引起越来越多公司的关注,包括 Google、特斯拉、三星、高通等科技公司已加入 RISC-V 阵营。

或许是因为这种趋势让 ARM 感受到了压力,ARM 在6月底建立一个域名为 riscv-basics.com 的网站,里面的内容主题为“设计系统芯片之前需要考虑的五件事”,从成本、生态系统、碎片化风险、安全性和设计保证上对 RISC-V 进行攻击。

此举自然引起了 RISC-V 的强烈不满,7月9日 RISC-V 也建立一个域名为 arm-basics.com 的网站,并用“设计系统芯片之前需要考虑的六件事”为题(在 ARM 列出的五项上新增了社区支持),对 ARM 进行反击,并呼吁厂商采用真正自由的架构 RISC-V。

对于此事,GNOME 之父 Miguel de Icaza 在推特上表示,“ARM 对 RISC-V 的这种负面宣传只会适得其反,而且他们提出的观点有点弱”。

7月10日,ARM 的 riscv-basics.com 网站下线。Arm 发言人在接受外媒采访时表示,他们最初的目的是打算创建一个网页以列出围绕 RISC-V 的商业化产品需要考虑的关键因素,旨在为激烈的行业辩论提供信息。遗憾的是,结果有些出乎意料,该页面也不符合 Arm 的合作文化,所以下线了。

该发言人还强调:“我们绝对不希望给大家一种攻击开源的印象,因为我们本身就是许多不同领域的开源社区的高度支持者。我们的目的是想做一些健康的行业讨论,因为这对这个行业的未来至关重要。”

ARM 处理器各个模式之间是如何切换的?ARM 各个模式之间切换时,上下文的保存哪些是硬件在做?哪些是操作系统在做?

ARM 处理器各个模式之间是如何切换的?ARM 各个模式之间切换时,上下文的保存哪些是硬件在做?哪些是操作系统在做?

OSC 请你来轰趴啦!1028 苏州源创会,一起寻宝 AI 时代

1、ARM 处理器各个模式之间是如何切换的?

答:除用户模式外的其他 6 种模式称为特权模式,这些模式中,程序可以访问所有系统资源,也可以任意进行处理器模式的切换。处理器模式可以通过软件控制进行切换 (直接设置 CPSR 寄存器的后五位就可以在 6 种特权模式之间互相切换),也可以通过外部中断或异常处理过程进行切换 (例如,在 USR 模式下,发生中断后切换到 IRQ 模式)。

2、ARM 各个模式之间切换时,上下文的保存哪些是硬件在做?哪些是操作系统在做?

         答:CPU 做的:

(1)把返回地址保存到相应模式的 lr 寄存器中,例如从 usr 模式切换到 irq 模式,CPU 会将 usr 模式下的 pc 值,保存到 irq 模式下的 lr 寄存器中。

(2)保存 CPSR 到相应模式的 SPSR 寄存器中,还是上面的例子,CPU 保存 usr 模式下的 CPSR 到 irq 模式下的 SPSR 中。

(3)将 pc 设置成相应模式下的某地址值继续执行。

操作系统做的(以从模式 A 切换到模式 B 为例):

操作系统所做内容需要根据情况而定,因为模式切换不一定伴随着进程之间的切换,有可能从 A 模式切换到 B 模式后,CPU 执行的是同一个进程,这时不需要操作系统具体做什么。

当模式切换伴随着进程切换时,操作系统需要保存模式切换之前的上下文环境。也就是进程控制块,进程控制块包括标识符、用户可见寄存器、控制和状态寄存器、栈指针等等,这与普通的进程切换类似。

 

ARM 处理器详解(1)- ARM Cortex-A 系列处理器

ARM 处理器详解(1)- ARM Cortex-A 系列处理器

 

如图所示,绿色的部分都是 v7-A 的架构,蓝色的是 v8-A 架构,基本上绿色都是可以支持到 32 和 64 位的,除了 A32,只支持到 32 位。在右边的每个部分,比如说需要高效能的最上面的 A15-A73 这个部分是最高效的,接下来就是比较注重整个效率的部分了,中间那个部分是比较高效率的,最下面那栏的是效率最好的,在电池的效能方面达到了最好的标准。

最新的还有使用在麒麟 980 上的,基于 Dynamiq 技术的第二代优质内核 Cortex A76。

Acore 主打的就是高性能,消费类的产品比如手机,平板,机顶盒等需要上系统的基本上都需要使用 Acore。Acore 的发展曲线基本上和工艺曲线重叠,最新的 A76 是基于 7nm 的工艺,A73 基于 10nm 的工艺,更早些的 A5,A9 基本上使用 40nm 或 28nm 的工艺。

 

这是 ARM 2016 年发布的最新 A 系列处理器,Cortex-A73 支持全尺寸 ARMv8-A 构架,ARMv8-A 是 ARM 公司的首款支持 64 位指令集的处理器架构,包括 ARM TrustZone 技术、NEON、虚拟化和加密技术。所以无论是 32 位还是 64 位,Cortex-A73 都可以提供适应性最强的移动应用生态开发环境。Cortex-A73 包括 128 位 AMBR 4 ACE 接口和 ARM 的 big.LITTLE 系统一体化接口,采用了目前最先进的 10nm 技术制造,可以提供比 Cortex-A72 高出 30% 的持续处理能力,非常适合移动设备和消费级设备使用。预计今年晚些时候到 2017 年,Cortex-A73 处理器将会逐渐覆盖到我们合作伙伴的高端智能手机、平板电脑、翻盖式移动设备、数字电视等一系列消费电子设备。

big.LITTLE 架构发展到最新的 A76,更新了 Dynamiq 架构,core 的外面再包了一层 L3 cache,减少了对外部 DDR 的读写,所以性能更优。

 

Cortex-A72 最早发布于 2015 年年初,也是基于 ARMv8-A 架构,采用台积电 16nm FinFET 制造工艺,Cortex-A72 可在芯片上单独实现性能,也可以搭配 Cortex-A53 处理器与 ARMCoreLinkTMCCI 高速缓存一致性互连(CacheCoherentInterconnect)构成 ARMbig.LITTLETM 配置,进一步提升能效。在相同的移动设备电池寿命限制下,Cortex-A72 能相较基于 Cortex-A15 的设备提供 3.5 倍的性能表现,相比于 Cortex-A57 也有约 1.8 倍的性能提升,展现出了优异的整体功耗效率。Cortex-A72 是目前基于 ARMv8-A 架构处理器中使用最广泛的处理器之一,主要其应用市场包括高端智能手机、大屏幕的移动设备、企业网路设备、服务器、无线基台、数字电视。

 

Cortex-A57 是 ARM 针对 2013 年、2014 年和 2015 年设计起点的 CPU 产品系列的旗舰级 CPU,它也是 ARM 首次采用 64 位 ARMv8-A 架构 CPU,而且通过 Aarch32 执行状态,保持与 ARMv7 架构的完全后向兼容性。除了 ARMv8 的架构优势之外,Cortex-A57 还提高了单个时钟周期性能,比高性能的 Cortex-A15 CPU 高出了 20% 至 40%。它还改进了二级高速缓存的的设计以及内存系统的其他组件,极大的提高了能效。Cortex-A57 将为移动系统提供超高能的性能,而借助 big.LITTLE,SoC 能以很低的平均功耗做到这一点。其主要面对的是中高端电脑,平板电脑以及服务器产品

 

Cortex-A53 同样是采取了 ARMv8-A 架构,能够支持 32 位的 ARMv7 代码和 64 位代码的 AArch64 执行状态。A53 架构特点是功耗降低、能效提高。其目标是 28nm HPM 制造工艺下、运行 SPECint2000 测试时,单个核心的功耗不超过 0.13W。它提供的性能比 Cortex-A7 处理器的功率效率更高,并能够作为一个独立的主要的应用处理器,或者搭配 Cortex-A57 处理器构成 big.LITTLE 配置。Cortex-A53 在相同的频率下,能提供比 Cortex-A9 更高的效能。其主要面对的是中高端电脑,平板电脑,机顶盒,数字电视等。

Cortex-A35 是基于 ARMv8-A 64 位架构设计的一款低功耗 CPU,其目的是为了取代此前 32 位 Cortex-A7 和 Cortex-A5 两颗老核心,采用和 A53/A7 类似的顺序有限双发射设计,同时融入了 A72 的一些新特性,并在前端重新设计了指令预取单元,提升了分支预测精度。此外,A35 还采用了 A53 的缓存、内存架构,可配置 8-64KB 一级指令和数据缓存、128KB-1MB 二级缓存,加入了 NEON/FP 单元,改进了存储性能,支持完整流水线的双精度乘法,还为 CPU 核心、NEON 流水线都配备了硬件保留状态 (独立电源域) 以提升电源管理效率。在同样的工艺、频率下,A35 的功耗比 A7 低大约 10%,同时性能提升 6-40%。而对比 A53,它可以保留 80-100% 的性能,但是功耗降低 32%、面积缩小 25%,能效提升 25%。A35 还可以和 A53、A57、A72 等大核心搭配,组成 big.LITTLE 混合架构系统,进一步提升系统能效。其主要定位于低功耗的低端手机、可穿戴、物联网等领域。

这是 ARM 新一代构架中,唯一一个 32 位(ARMv7-A )架构的处理器,但 A32 就像是 32 位版的 A35,目标很明显,就是在效能比本来就逆天的 A35 的基础上进一步控制功耗。A32 架构主打芯片面积、功耗控制和能耗比,其停留在 32 位(ARMv7-A 指令集),指令预取单元针对效率进行了重新设计,一、二级暂存、浮点和 DSP 操作性能则针对速度进行了改进,并引入了新的电源管理特性。其支持 TrustZone 安全加密、NEON SIMD 指令集、DSP / SIMD 扩展、VFPv4 浮点计算、虚拟硬件等。A32 可以在 32 位下提供和 A35 一样的性能。但更低功耗,让它的效能比(单位电能产出的性能)比 A35 还要高 10%、比 A5 高 30%、比 A7 高 25%。A35 可以透过提升频率达到 A53 80-100% 性能,也就是说,A32 也可以在 32 位下达到同样的性能等级,这时候的芯片面积只有 A53 的 68%,而功耗则只有 A53 的 61%。

  在 64 位之下,A35 都有代替 A53 架构的实力,而在 32 位中,A32 就已经是完胜所有人的境界了,而且比起 64 位的 A35 架构,32 位的 A32 更适合用在穿戴设备和物联网产品上。

A17 仍然基于 32 位 ARMv7-A 指令集,初期会采用 28nm 工艺,后期进化到 20nm。本质架构和 A12 一样都是双宽度、乱序发射,仅仅是改进了外部互联,引入了新的一致性总线 AMBA4 ACE,可以更快速地连接内存控制器,从而改善性能和能效。得益于这个新的总线,A17 可以支持多核心 SoC 的完整内存一致性操作,能够参与 big.LITTLE 双架构混合方案,在特定频率、工艺、内存条件下,A17 的性能比 A12 提升大约 40%。在某些特定的环境中,A17 的性能已经可以和 A15 处于一个档次了,但是功耗更低、能效更高。虽然在命名上排在 Cortex-A15 之上,但其定位中端,而不是高端。

Cortex-A15 最早在 2010 年发布,基于 32 位 ARMv7-A 架构。A15 和 A9 同样具备乱序执行,但是 Cortex-A15 具备(两倍)的指令发射端口和执行资源,指令解码能力也要高出 50%,动态分支预测能力更强(采用了多层级分支表缓存),指令拾取带宽更强(128 bit vs 64 bit),这些都能让 A15 的流水线执行具备更高的效率。除此以外,A15 采用了 VFPv4 浮点单元设计,能执行 FMA 指令以及硬件除法指令,相较而言 A9 的峰值向量浮点性能基本上只有 A15 的一半。Cortex-A15 处理器可以应用在智能手机、平板电脑、移动计算、高端数字家电、服务器和无线基础结构等设备上。

ARM Cortex-A9 采用 ARMv7-A 架构,目前我们能见到的四核处理器大多都是属于 Cortex-A9 系列。 Cortex-A9 处理器的设计旨在打造最先进的、高效率的、长度动态可变的、多指令执行超标量体系结构,提供采用乱序猜测方式执行的 8 阶段管道处理器,凭借范围广泛的消费类、网络、企业和移动应用中的前沿产品所需的功能,它可以兼具高性能和高能效。Cortex-A9 微体系结构既可用于可伸缩的多核处理器(Cortex-A9 MPCore 多核处理器),也可用于更传统的处理器(Cortex-A9 单核处理器)。可伸缩的多核处理器和单核处理器支持 16、32 或 64KB 4 路关联的 L1 高速缓存配置,对于可选的 L2 高速缓存控制器,最多支持 8MB 的 L2 高速缓存配置,它们具有极高的灵活性,均适用于特定应用领域和市场。

ARM Cortex-A8 处理器,基于 ARMv7-A 架构,是目前使用的单核手机中最为常见的产品。Cortex-A8 处理器是首款基于 ARMv7 体系结构的产品,能够将速度从 600MHz 提高到 1GHz 以上。Cortex-A8 处理器可以满足需要在 300mW 以下运行的移动设备的功率优化要求;以及需要 2000 Dhrystone MIPS 的消费类应用领域的性能优化要求。Cortex-A8 高性能处理器目前已经非常成熟,从手机到上网本、DTV、打印机和汽车信息娱乐,Cortex-A8 处理器都提供了可靠的高性能解决方案。

Cortex-A7 采用 ARMv7-A 架构,它的特点是在保证性能的基础上提供了出色的低功耗表现。Cortex-A7 处理器的体系结构和功能集与 Cortex-A15 处理器完全相同,不同这处在于,Cortex-A7 处理器的微体系结构侧重于提供最佳能效,因此这两种处理器可在 big.LITTLE(大小核大小核心伴侣结构)配置中协同工作,从而提供高性能与超低功耗的终极组合。单个 Cortex-A7 处理器的能源效率是 Cortex-A8 处理器的 5 倍,性能提升 50%,而尺寸仅为后者的五分之一。

Cortex-A5 处理器同样基于 ARMv7-A 架构,它是能效最高、成本最低的处理器,能够向最广泛的设备提供最基础的 Internet 访问。Cortex-A5 处理器在指令以及功能方面与更高性能的 Cortex-A8、Cortex-A9 和 Cortex-A15 处理器完全兼容 - 一直到操作系统级别。Cortex-A5 处理器还保持与经典 ARM 处理器(包括 ARM926EJ-S、ARM1176JZ-S 和 ARM7TDMI?)的向后应用程序兼容性。其定位于从入门级智能手机、低成本手机和智能移动设备以及基础工业设备。

关于Windows、Linux、ARM、Android、iOS全平台支持的RTMP推流组件libEasyRTMP库接口调用说明的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android 模拟器支持运行 ARM 应用,Android 11 系统映像可直接将 ARM 指令转换成 x86 指令、ARM 和 RISC-V 公然开撕,GNOME 之父指责 ARM、ARM 处理器各个模式之间是如何切换的?ARM 各个模式之间切换时,上下文的保存哪些是硬件在做?哪些是操作系统在做?、ARM 处理器详解(1)- ARM Cortex-A 系列处理器等相关知识的信息别忘了在本站进行查找喔。

本文标签: