当前位置: 首页 > news >正文

星球专享 | 关于播放器的一次项目实践~~

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

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

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

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

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

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

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

f3606c1207039e99ac6762b8dcdbe7ed.png

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

  1. 依赖第三方库代码,比如 FFmpeg 等,目前用临时代码模拟顶替一下,后面会讲如何接入 FFmpeg。

  2. Demo 工程,演示如何接入 SDK 的具体工程代码,也是通过这个 Demo 工程来播放视频的。

  3. SDK 的接口头文件代码,对外暴露 include 里面的接口就行了

  4. SDK 的具体实现代码,也是后面的核心代码了

  5. 单测目录,Google Test 的单测内容都在这里了。

目前及后续的进展

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

9e3e599ce67fa1f333c0bf979a40eb4c.png

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

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

6701781d6363bc6331d8ca5e4a81bf8e.png

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

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

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

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

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

2d8c192577f247d615b332ef04a4012d.png

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

推荐阅读:

音视频开发工作经验分享 || 视频版

OpenGL ES 学习资源分享

开通专辑 | 细数那些年写过的技术文章专辑

Android NDK 免费视频在线学习!!!

你想要的音视频开发资料库来了

推荐几个堪称教科书级别的 Android 音视频入门项目

觉得不错,点个在看呗~

fed5d23cb248f557a85dcf27ac1fe52e.gif

相关文章:

  • 可远程办公的神仙公司 招音视频啦!
  • 星球专享 | 播放器 FFmpeg 依赖库的配置
  • 干货分享丨HDR 技术产品实践与探索
  • H264 视频文件如何缩放分辨率?
  • 也许可以少走弯路的职场建议
  • FFmpeg 中 AVPacket 与 AVFrame 中数据的传递与释放
  • 头条都在用的边下边播方案
  • YUV 与 颜色空间转换
  • 原创干货 | 入门或者转行音视频,应该要怎么做?
  • 上手 GAMES 104 课程 Pilot 游戏引擎~~
  • 关于音视频里面的 解码帧率 和 渲染帧率
  • 将音视频中的花屏、绿屏、黑屏问题一网打尽
  • 关于直播、WebRTC、FFmpeg 的那些事~~
  • 干货 | 快速抽取缩略图是怎么练成的?
  • 没有操作系统程序可以运行起来吗?
  • ES6指北【2】—— 箭头函数
  • [译] React v16.8: 含有Hooks的版本
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【刷算法】从上往下打印二叉树
  • flutter的key在widget list的作用以及必要性
  • gulp 教程
  • HTML-表单
  • java概述
  • Laravel Telescope:优雅的应用调试工具
  • leetcode98. Validate Binary Search Tree
  • vue.js框架原理浅析
  • 简单实现一个textarea自适应高度
  • 排序算法之--选择排序
  • 日剧·日综资源集合(建议收藏)
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (C++20) consteval立即函数
  • (pojstep1.3.1)1017(构造法模拟)
  • (二)linux使用docker容器运行mysql
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (算法二)滑动窗口
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET MVC第三章、三种传值方式
  • .net MySql
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 服务 ServiceController
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net经典笔试题
  • [100天算法】-目标和(day 79)
  • [2016.7.Test1] T1 三进制异或
  • [Android Studio 权威教程]断点调试和高级调试
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [Apio2012]dispatching 左偏树
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现