一个专注音视频领域的小圈子

众所周知,前段时间开通了知识星球,旨在为音视频的开发和学习提供更专业的问答氛围。

同时也考虑在星球内出一些干货教程,回馈大家的信任,一番思索之后,决定在星球内出一个播放器的项目实践

为什么会选择做播放器呢?

在星球内也有很多朋友咨询从事音视频开发要如何入手?其实音视频开发根据业务形态的不同也会有不同的侧重点。

比如我做短视频 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 的一些知识技巧,在播放器的正式代码中不一定需要,就可以放到单测中做总结了,存储一些代码以后用得上。

整个项目结构如下图所示:

对每个文件夹内容的具体说明如下:

  1. 依赖第三方库代码,比如 FFmpeg 等,目前用临时代码模拟顶替一下,后面会讲如何接入 FFmpeg。
  2. Demo 工程,演示如何接入 SDK 的具体工程代码,也是通过这个 Demo 工程来播放视频的。
  3. SDK 的接口头文件代码,对外暴露 include 里面的接口就行了
  4. SDK 的具体实现代码,也是后面的核心代码了
  5. 单测目录,Google Test 的单测内容都在这里了。

后续的进展

目前还只是完成了工程的搭建, 写了一丢丢的代码。

我是用 CLion 做开发的,IDE 还是好用很多,但由于它是付费的,星球内不一定所有人都可以使用,因此我特意配置了一下 VSCode 上的开发环境,捣鼓了 launch.json 的配置,也可以直接运行代码了,但建议还是使用 CLion 来开发,毕竟 VSCode 只是一个编辑器,和强大的 IDE 比还是少了不少功能。

重点:

说了那么多,接下来就是重点部分了。

关于播放器实践的专栏,后续大部分进展都会放在知识星球里面了,尤其是源码会在星球内同步更新,当然也会挑一些干货在公众号同步。

目前 音视频开发进阶知识星球 还在让利中,非常低的价格就可以获得业内一线开发人员的答疑解惑。

与其在群里面提问石沉大海,不如来星球有问必答,而且这个价格还是管一年的哦,一年的时间可以说是相当划算了。

同时星球内非常欢迎大家提问,尤其是我不会的问题,我会去找业内好朋友请教,既回答了你的问题又帮助了我提高。

想要加入的可以通过扫如下二维码进星球哦,iPhone 用户如果不能访问小程序的话,也可以加我微信 ezglumes 拉你进星球。

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