众所周知,前段时间开通了知识星球,旨在为音视频的开发和学习提供更专业的问答氛围。
同时也考虑在星球内出一些干货教程,回馈大家的信任,一番思索之后,决定在星球内出一个播放器的项目实践。
为什么会选择做播放器呢?
在星球内也有很多朋友咨询从事音视频开发要如何入手?其实音视频开发根据业务形态的不同也会有不同的侧重点。
比如我做短视频 SDK 的,马上去做网络通话的优化,估计就要被优化了。同样,做音视频算法的来搞工程搭建一时半会也不见得能搞定。
尽管工作内容不同,但我们都还属于音视频开发范围内,所以说音视频也是一个很大的方向了。
而我个人觉得播放器会是音视频大方向下的一个很好入门切入点。
关于音视频的概念有很多,比如 I、B、P 帧、容器格式、H.264 码流、编解码器等等,这些概念都是基础必须知道的,但如何在项目实践中去真正调试使用它呢?说的再多也不如实操一遍。
而做一个播放器是能够将这些概念融会贯通的,在解码时去体验每一帧的不同,在渲染时去感受 YUV 的格式差异,在音视频对齐时去领悟音画同步的真谛。
要如何去做一个播放器呢?
一个播放器可以很简单,也可以很复杂,但这不重要。
做播放器不是我们的目的,最终是为了在这个过程中掌握音视频开发、调试经验,并且熟悉 C++、FFmpeg 的用法,建立起系统而完善的概念。
目前我已经完成了整个项目的初步搭建,Github 地址如下:
https://github.com/glumes/PlanetPlayer
设想按照具体的业务实际来开发,核心是开发播放器 SDK ,对外提供 SDK 的能力,业务工程去依赖 SDK ,这就和目前的短视频 SDK 开发接入流程一样了。
理想情况是做一个跨平台的播放器 SDK ,因为写的是 C++ 代码,天然就有跨平台的基因。
但前期的运行都是在电脑上测试通过的,先保证自己电脑上的播放器项目可以正常运行,然后再去做移动端上的适配。
另外,整个 SDK 还引入了 Google Test 做单元测试,保证每个接口都可以测试通过,这也是现代软件开发流程中必备的了。而且关于 FFmpeg 的一些知识技巧,在播放器的正式代码中不一定需要,就可以放到单测中做总结了,存储一些代码以后用得上。
整个项目结构如下图所示:
对每个文件夹内容的具体说明如下:
- 依赖第三方库代码,比如 FFmpeg 等,目前用临时代码模拟顶替一下,后面会讲如何接入 FFmpeg。
- Demo 工程,演示如何接入 SDK 的具体工程代码,也是通过这个 Demo 工程来播放视频的。
- SDK 的接口头文件代码,对外暴露 include 里面的接口就行了
- SDK 的具体实现代码,也是后面的核心代码了
- 单测目录,Google Test 的单测内容都在这里了。
后续的进展
目前还只是完成了工程的搭建, 写了一丢丢的代码。
我是用 CLion 做开发的,IDE 还是好用很多,但由于它是付费的,星球内不一定所有人都可以使用,因此我特意配置了一下 VSCode 上的开发环境,捣鼓了 launch.json 的配置,也可以直接运行代码了,但建议还是使用 CLion 来开发,毕竟 VSCode 只是一个编辑器,和强大的 IDE 比还是少了不少功能。
重点:
说了那么多,接下来就是重点部分了。
关于播放器实践的专栏,后续大部分进展都会放在知识星球里面了,尤其是源码会在星球内同步更新,当然也会挑一些干货在公众号同步。
目前 音视频开发进阶知识星球 还在让利中,非常低的价格就可以获得业内一线开发人员的答疑解惑。
与其在群里面提问石沉大海,不如来星球有问必答,而且这个价格还是管一年的哦,一年的时间可以说是相当划算了。
同时星球内非常欢迎大家提问,尤其是我不会的问题,我会去找业内好朋友请教,既回答了你的问题又帮助了我提高。
想要加入的可以通过扫如下二维码进星球哦,iPhone 用户如果不能访问小程序的话,也可以加我微信 ezglumes 拉你进星球。
知识星球
公众号音视频开发进阶对应的知识星球,一个编程开发领域的专业圈子,贩卖知识和技巧! ※ 入群须知:了解该星球能提供的价值和帮助,在提问时务必阐述好背景,附带相关的信息。 iOS 用户可以加我微信 ezglumes 邀请你进星球,有疑问也可以加我微信咨询。 ※ 星球内容: 基础教程: 在知识星球连载的干货教程,可以在专栏中找到,随着时间的推移,教程也会越来越多: - 音视频基础概念 - WebRTC 入门教程及源码实践 - 播放器教程及源码实践 - OpenGL 和特效开发教程 - Vulkan 入门教程 部分内容可以在博客 https://glumes.com 中检索到,后面会在星球里持续更新. 干货分享: 涵盖了移动开发和音视频工程领域的绝大部分,从项目实战角度出发,提升能力,包括但不限于以下领域: - Android/iOS 移动开发 - Camera 开发 - 短视频编辑 SDK 项目实践 - 在线直播和推流 - WebRTC 开发 - 播放器基础和提高 - OpenGL 图像渲染及特效开发 - C++ 基础和提高 - FFmpeg 使用和分析 - 干货资源和书籍分享 不止于技术方面的,各种 IT 新闻、茶余饭后、生活趣事也欢迎大家分享!!! 技术答疑解惑: 针对上述基础教程和干货分享的答疑,另外还有音视频和 IT 开发中的各种交流讨论。 - 基础知识点答疑 - 工业项目实践答疑 - 问题排查思路分析 一个 BUG 排查很久,不如来星球里提个问题,效率提升百倍。 求职和面试辅导: 一站式职场服务,每份工作都值得用心对待!!! - 面试题和面试经验分享 - 简历修改和模拟面试 - 大厂内推和信息同步 - 职场经验分享 - 职业规划和发展分析 ※ 星主和合伙人介绍 星主是公众号音视频开发进阶的作者,也是网站 https://glumes.com 的作者,曾参与过抖音、剪映等头部音视频 APP 底层 SDK 的开发。 合伙人也是在头条、快手从事音视频架构师的职位,具有多年的音视频开发经验,能力圈覆盖了音视频的绝大多数领域,资深音视频从业人员为你保驾护航。
微信公众号
扫描下面的二维码关注我的微信公众号《音视频开发进阶》,推送更多精彩内容!
添加我的微信 ezglumes 拉你入音视频与图形图像技术群一起交流学习~

原创文章,转载请注明来源: 001 | 播放器系列专栏-关于播放器项目的一个小实践