惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
月光博客
月光博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 聂微东
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
美团技术团队
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
Jina AI
Jina AI
D
Docker
Last Week in AI
Last Week in AI
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog

音视频开发进阶

音视频教程-第三节 音视频教程-第二节 真的,AI 可能就是新时代的信息差 充值 Cursor 之后,工作有了哪些变化?🤔 个人'蒸馏'大模型能做哪些有意思的事情 DeepSeek 大模型在 Mac 上的部署和运行 音视频教程-第一节 【WebRTC 专栏】-- Android 开发集成 WebRTC 库的几种方式 【WebRTC 专栏】-- 在 Mac M1 等系列芯片编译和开发 WebRTC-Android 库 Meta Llama3 大模型在 Mac 上的部署和运行 iOS VideoToolBox 解码 HEVC Open-GOP 视频的问题排查 Flutter 状态管理之 InheritedWidget 使用和分析 用 ChatGPT 回答技术问题怎么样 ? 音视频开发系统入门大致路线 UE 4.27 添加自定义 ShadingModel 用 UE4 虚幻引擎做个捏脸小功能~~ UE4 材质练习 之 凹凸贴图偏移的使用 UE4 材质练习系列基础 OpenGL上下文创建以及共享机制 007 | 播放器系列专栏-解析 MP4 文件读取信息 006 | 播放器系列专栏-在 Mac 上查看 MP4 格式信息 干货 | 快速抽取缩略图是怎么练成的? 关于直播、WebRTC、FFmpeg 的那些事 005 | 播放器系列专栏-在 Windows 上查看 MP4 格式信息 将音视频中的花屏、绿屏、黑屏问题一网打尽 关于音视频里面的解码帧率和渲染帧率 004 | 播放器系列专栏-认识MP4视频(下) 003 | 播放器系列专栏-认识MP4视频(上) 入门或者转行音视频,应该要怎么做? H264视频文件如何缩放分辨率
001 | 播放器系列专栏-关于播放器项目的一个小实践
音视频开发进阶 · 2022-03-18 · via 音视频开发进阶

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

众所周知,前段时间开通了知识星球,旨在为音视频的开发和学习提供更专业的问答氛围。 同时也考虑在星球内出一些干货教程,回馈大家的信任,一番思索之后,决定在星球内出一个播放器的项目实践

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

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

比如我做短视频 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 | 播放器系列专栏-关于播放器项目的一个小实践