35.FFmpeg+OpenGLES+OpenSLES播放器实现(完结.封装,多线程,和模块化处理)

前言

好久未更新
之前的几篇文章介绍了音视频相关概念,FFmpeg的交叉编译,FFmpeg Api解封转 解码 音频重采样和视频播放相关的功能,以及分别介绍了OpenGLES Shader播放视频和 OpenSLES播放音频的实现,今天的文章将对这些功能进行整合,实现一款播放器的完整功能,包括播放,暂停,快进快退这些通用的实现。主要介绍封装思想,不注重代码细节,具体可查看源码。
项目源码

结构

我们使用FFmpeg实现播放的整个过程,从打开视频文件,解封装,解码,音频重采样,帧像素格式转换,播放音频,播放视频,这一系列的过程其实可以看做视频播放的一个通用的逻辑,每一个播放器,从打开一个视频,到画面开始显示,声音开始播放,几乎都要经历这么一个过程。所以项目将会被分为好几个模块----解封装,解码,音频播放,视频播放,为了使架构具有更强的扩展性,每一个功能模块我们都将其抽取出一个基类,在c++中用纯虚函数来提供通用的接口,具体的实现交给派生类处理,比如解封装这个模块,IDemux基类中抽取出了open接口,每个IDemux派生类都要来实现这个接口,因为针对一个视频进行解封装,open是必须的,然后具体如何open一个输入的视频文件,交给子类去实现,以FFmpeg的方式实现解封装,创建FFDexmu,他有自己解封装的逻辑,但是如果有一天我们不用FFmpeg进行解封张的操作了,那么只需要创建另一个XXDemux继承IDemux实现open接口就可以了。

项目类图如下

未完。。待续,,,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容