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