严格来说,具体到移动端音视频这个细分领域,除非你不依赖任何平台硬件加速能力(比如硬件编解码),否则我们可以大胆的说:根本不存在彻底的跨平台。
我们可以从更狭义的角度来说,移动端音视频领域的跨平台,其实是编译工具链和数据流程上的跨平台,基于这两个底座,接入依赖平台特性的功能模块,最终封装为多平台统一的native接口。
这里所谓的数据流程,或者叫pipeline,我们可以说它还包含了线程管理、内存管理、数据统计、日志管理等附属模块。
此外,如果要封装应用层面的API,则又要基于统一的native接口,依据各平台的语言特性,分别编写了。
用一张图来描述前面的思想,如下

下面我们用两个大家都熟知的开源项目ijkplayer和webrtc,看看他们的结构,来印证我们的想法。
ijkplayer
在ijkplayer中,对应数据流程的模块就是核心的ff_ffplay.c,我们知道它其实就脱胎于ffmpeg的ffplay.c,所以我们也可以说它直接用了ffmpeg的编译工具链、内存管理、日志管理等附属模块。
ff_ffplay.c中定义的两个核心队列,FrameQueue和PacketQueue驱动了音视频数据从读取、解封装、解码到渲染的流程。
截止目前的实现我们都可以说它是彻底跨平台的。但是具体到硬件解码,则完全呈现为平台相关。渲染方面,如果都选择用
本文探讨移动端音视频的跨平台开发,强调实际意义上的跨平台主要体现在编译工具链和数据流程,而非硬件加速。以ijkplayer和WebRTC为例,解释其内部结构和跨平台实现。ijkplayer的核心在于ff_ffplay.c的数据流程,而WebRTC通过peer_connection串联音视频模块。两者都提供了双端统一的native接口,并依赖平台特定功能。理解这种跨平台架构有助于深入掌握移动端开发。
订阅专栏 解锁全文
1929

被折叠的 条评论
为什么被折叠?



