首页 > 其他分享 >关于播放器的一次项目实践~~

关于播放器的一次项目实践~~

时间:2022-12-20 22:34:45浏览次数:71  
标签:播放器 代码 实践 音视频 开发 关于 星球 SDK

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

​一个关于音视频领域专业问答的小圈子!!​

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

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

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

比如我做短视频 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 的单测内容都在这里了。

目前及后续的进展

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

关于播放器的一次项目实践~~_音视频_02

我是用 CLion 做开发的,IDE 还是好用很多,但由于它是付费的,星球内不一定所有人都可以使用。

因此我特意配置了一下 VSCode 上的开发环境,捣鼓了 launch.json 的配置,也可以直接运行代码了,但建议还是使用 CLion 来开发,毕竟 VSCode 只是一个编辑器,和强大的 IDE 比还是少了不少功能。

关于播放器的一次项目实践~~_CL_03


标签:播放器,代码,实践,音视频,开发,关于,星球,SDK
From: https://blog.51cto.com/u_12127193/5956918

相关文章

  • 播放器 FFmpeg 依赖库的配置
    目前已经完成了项目的创建,是怎样一个项目呢?首先是播放器SDK,也是项目最核心的模块,然后是对SDK进行单元测试的模块,最后是使用SDK做播放器的可视化项目模块。项目工程的......
  • 关于音视频里面的 解码帧率 和 渲染帧率
    在里面有位PM同学,咨询关于音视频里面的解码帧率和渲染帧率,关于这两个概念其实挺绕的,不同的人可能还有不同的看法,所以也让大家一起来评估一下解读是否正确!!以下是星球内的提......
  • 仿剪映播放器、剪辑视频、预览条、快速精准抽帧(附源码)
    给大家分享一下里面小伙伴的项目实践,高仿剪映快速抽帧、精准显示功能,而且还有源码给出!关于实现思路,之前也在公众号里面给大家分享过:​​干货|快速抽取缩略图是怎么练成的?......
  • 关于Iceberg数据湖的Temp笔记
    ​​实践数据湖iceberg第一课入门​​实践数据湖iceberg第二课iceberg基于hadoop的底层数据格式实践数据湖iceberg第三课在sqlclient中,以sql方式从kafka读数据到icebe......
  • 【关于Java中方法重写的注意事项】
    需要重写的场景:源代码封装方法无法满足我们的需要,可以通过重写方法解决。注意事项:一般来说,子类只能够重写父类的声明为public和protected的非final方法,如果需要重写......
  • 关于分类的线性模型的讨论
    关于分类的线性模型的讨论1.引言所谓分类模型,是指一类用于解决分类问题的数学模型。分类的目标是将输入变量x分到K个离散的类别Ck中的某一类。最常......
  • 关于 CMS 垃圾回收器,你真的懂了吗?
    大家好,我是树哥。前段时间有个小伙伴去面试,被问到了CMS垃圾回收器的详细内容,没答出来。实际上,CMS垃圾回收器是回收器历史上很重要的一个节点,其开启了GC回收器关注GC......
  • Iceberg在袋鼠云的探索及实践
    “数据湖”、“湖仓一体”及“流批一体”等概念,是近年来大数据领域热度最高的词汇,在各大互联网公司掀起了一波波的热潮,各家公司纷纷推出了自己的技术方案,其中作为全链路数......
  • iOS监听模式系列之关于delegate(代理,委托)的学习
    其次,我简单的总结了一下自己用到的委托的作用有两个,一个是传值,一个是传事件。1.所谓传值经常用在b类要把自己的一个数据或者对象传给a类,让a类去展示或者处理。(切......
  • PyTorch 深度学习实践第一讲
    写在前面:B站刘二大人 传送门​​Pytorch深度学习实践第一讲​​预备知识线性代数和概率论与数理统计(至少知道分布)Python(了解面向对象、类)引言:HumanIntelligence推理能力......