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

推荐订阅源

W
WeLiveSecurity
Jina AI
Jina AI
博客园 - 司徒正美
雷峰网
雷峰网
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
I
InfoQ
博客园 - Franky
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
Cyberwarzone
Cyberwarzone
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
T
Threatpost
Cloudbric
Cloudbric
D
Docker
M
MIT News - Artificial intelligence
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Vercel News
Vercel News
Martin Fowler
Martin Fowler
J
Java Code Geeks
AWS News Blog
AWS News Blog
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
L
Lohrmann on Cybersecurity
Hacker News: Ask HN
Hacker News: Ask HN
Last Week in AI
Last Week in AI
S
Security @ Cisco Blogs
Help Net Security
Help Net Security
C
Cisco Blogs
V
V2EX
博客园 - 【当耐特】
I
Intezer
爱范儿
爱范儿
F
Fortinet All Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Privacy International News Feed
IT之家
IT之家
L
LINUX DO - 最新话题
B
Blog RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO

音视频开发进阶

音视频教程-第三节 音视频教程-第二节 真的,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视频文件如何缩放分辨率 002 | 播放器系列专栏-FFmpeg依赖库的配置 001 | 播放器系列专栏-关于播放器项目的一个小实践 Seek策略以及在有B帧情况下的处理 目前流媒体开发工程师工作内容主要是什么? 一个音视频领域专业问答的小圈子 干货收藏 || Vulkan Game Engine 视频教程 音视频春节假期内卷指南(实操) Vulkan 在 FFmpeg 中的支持 Windows 下 FFmpeg 和 LibX264 的编译和配置 Metal 开发 | 使用 C++ 进行接口调用 音视频开发工作经验分享 || 视频版 FFmpeg 调用 MediaCodec 硬解码到 Surface 上 代码吸猫 | 用 OpenGL 图像渲染的养猫计划 百倍变速--解码到底能不能丢 非参考帧 ?FFmpeg 有话说!!! 老生常谈-FFmpeg 的编译问题轻松搞定 FFmpeg 调用 Android MediaCodec 进行硬解码(附源码) 【WebRTC 专栏】--创建相机预览 Unity Shader 光照基础之 Half Lambert 光照模型 Unity Shader 光照基础之Lambert光照模型 Unity Shader 光照基础内容 Unity Shader 显示一张图片纹理 UnityShader 的基本概念 Unity 物体的基本操作 C++ 模板系列小结07-尾置返回类型 C++ 模板系列小结06-可变参数模板特性 C++ 中的多线程的使用和线程池建设 C++ 模板系列小结05-模板类型作为模板参数 C++ 模板系列小结04-类模板中的成员模板 C++ 模板系列小结03-在模板中指定变量类型 C++ 模板系列小结02-非类型模板参数 C++ 模板系列小结01-函数模板和类模板 从零打造渲染引擎系列01-什么是渲染引擎 iOS开发 - 在 Swift 中去调用 C/C++ 代码 2021 技术新番 - 从零打造渲染引擎系列 iOS 音视频开发的一些基础准备工作 音视频交流群又来啦~~~ 【WebRTC 专栏】WebRTC & Android 开发学习环境搭建~ 【喜大普奔】域名终于备案通过啦 Shader 优化 | OpenGL 绘制网格效果 【音视频连载-011】第二季 FFmpeg 一层一层获取文件信息 KodeLife | Shader 实时编辑预览的强大工具使用实践 推荐几个堪称教科书级别的 Android 音视频入门项目 【音视频连载-010】第二季 FFmpeg 日志打印 【音视频连载-008】基础学习篇-SDL 播放 PCM 音频文件(下) 【音视频连载-007】基础学习篇-SDL 播放 PCM 音频文件(上) 【音视频连载-006】基础学习篇-SDL 播放 YUV 视频文件 【音视频连载-005】基础学习篇-SDL 加载 YUV 文件并显示 【音视频连载-004】基础学习篇-SDL 加载图片并显示 【音视频连载-003】基础学习篇-SDL 消息循环和事件响应 【音视频连载-002】基础学习篇-SDL 创建窗口并显示颜色 【音视频连载-001】基础学习篇- SDL 介绍以及工程配置 LearnOpenGL 源码在 MAC 上的编译与调试 2019 年终总结与回顾 Android NDK 开发的免费技术视频来啦~~ OpenGL 实现视频编辑中的转场效果 OpenGL 实践之贝塞尔曲线绘制 图像库 libjpeg-turbo 编译与实践 图像库 libpng 编译与实践 rust 开发编译 Android 动态库实践 Android NDK 开发 —— 从 Assets 文件夹加载图片并上传纹理 简单易用的图像解码库介绍 —— stb_image 博客图床迁移记 进击的 Vulkan 移动开发之 SwapChain 进击的 Vulkan 移动开发之 Command Buffer 进击的 Vulkan 移动开发之 Instance & Device & Queue 进击的 Vulkan 移动开发(一)之今生前世 Java 显式锁 Lock 与条件队列 C++ 标准容器库小结 MediaCodec 硬编码之相机内容编码成 H264 文件 一文读懂 YUV 的采样与格式 《OpenGL ES 3.x 游戏开发》碰撞检测之 AABB 包围盒
入门或者转行音视频,应该要怎么做?
音视频开发进阶 · 2022-03-28 · via 音视频开发进阶

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

众所周知,前段时间开了 音视频开发进阶 知识星球,已经有不少朋友加入并且活跃起来了。 关于知识星球的介绍可以看这篇文章:

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

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

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

一些干货教程也正在准备中,马上要和大家见面了!!!

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

在星球里经常被问到的问题,想从事(入门或者转行)音视频开发,要怎么做?

很多人对此都有疑惑,不光有工作多年的职场老司机,也有求学期间的研究生同学们,摘录了其中一部分提问,可以看到大家的疑惑是有类似的。

对于星球用户的每个提问我都有认真回答,毕竟每个人的情况不一样,没有什么统一的答案。

这些提问其实可以归为两类:

  1. 针对自己的情况,现阶段要从事音视频开发吗?这是一个关于利弊分析的问题,也是特别实际,很现实的问题。

  2. 已经决定从事音视频开发,要怎么去做呢?这是一个学习路线的问题,也是我个人的经验可以给到帮助的问题。

其实,第一类问题要不要从事音视频开发 会比 第二类问题从事音视频开发要怎么做 更难回答一些,毕竟迈出第一步永远是最难的。

在之前也做过音视频工作经验的视频分享,帮忙大家更多的了解音视频工作。

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

可以在 B 站中直接看,地址如下:

https://www.bilibili.com/video/BV1p54y1X7fY

要不要从事音视频开发

尤其是针对已经工作多年的朋友来说,这是一个职业规划的问题,每个人的职业经历、思考角度甚至利益关系都不一样,在十字路口上选择的方向也是不同的。

不同于技术问题的回答,闻道有先后,术业有专攻,在我不熟悉的领域回答错了问题,并不是一件丢人的事情,反而是个学习的机会。

但职场上给错了建议,并且听从执行了,那在短暂的程序员生涯上可能会造成不可逆的影响,尤其是我本身还从事音视频的开发,在一些观念上就会有一些偏袒,很难做到客观中立。

所以针对第一类问题,我只能从行业趋势和自己的观察上给出一些看法。

这一两年因为该死的疫情,让短视频、超高清视频和实时音视频反而成为需求风口。

我的看法当然是觉得音视频这个行业还可以,而且从我自己的观察来看,做音视频的现在普遍年龄都在 30+ 了,我 94 年的在组里有可能还是年龄最小的那一批人了。

另外,由于星球内的朋友或者关注公众号的朋友大多数是从事移动开发的,经常会有一个误区,把音视频开发认为是安卓的一个分支,我是非常不认同这个观念的。

我的观点是 音视频开发也可以是一个独立的分支,不一定要和 Android 、iOS 联系上的。和信息安全行业一样,也分移动安全、Web 安全、云安全等,不同的安全领域有可能差异很大,但还是都属于信息安全范畴,音视频同样如此。

做客户端上的音视频、服务端上的、嵌入式的、系统底层的都是音视频的范围,另外从事音视频编解码算法、网络通信协议、视频超分、音频降噪等等,也是音视频的领域范围内,所以说音视频也可以是一个很大的范围体系,每个人处在其中的位置不同而已。

如果你很熟练 FFmpeg ,熟悉播放器,或者很懂 OpenGL 渲染,那么不懂 JVM ,不懂 Android Framework 一点也不妨碍你找高薪工作。

以上就是关于 第一类问题要不要从事音视频开发 的建议,每个人都不同,具体情况还是要具体分析的,仅供参考。

如果你决定迈出第一步,尝试一下入门或者转行音视频,那么可以接下往下看了。

从事音视频开发要怎么做

对于 第二类问题从事音视频开发要怎么做 大概会从四个方面给出路线:

  1. 概念
  2. 技能
  3. 架构
  4. 实践

概念

首先,最重要的就是概念了。

既然认为音视频也是一个单独的领域,那么每个领域就会有它对应的名词概念。学音视频也和我们上学学习一样,一门学科一开始肯定要学一些新的名词概念。

关于音视频常见的概念有哪些呢?帧率、码率、I 帧、B 帧、P 帧吗?

那么问题来了,这些概念你是从哪里得知的?尤其是 I 帧、B 帧、P 帧这种常见的面试八股文会提到的

想必很多人我和一样,都是从网络上一些博客中得知的。但网络博客质量参差不齐,且不说一篇文章会被反复抄袭无数遍,就文章中内容可能都不是对的,而有的同学却没有经过的自己思考,盲目的吸收这些概念,等到后期遇到疑难杂症要解决时,却发现连一些基础概念都没搞懂。

这也是目前学习音视频中比较蛋疼的地方,缺少统一的教材能够把一些概念讲清楚,尤其是涉及深一点的概念,牵扯的内容很多,不是一两页就能讲清楚的。

后续如果遇到好的资料,也会在知识星球内分享给大家。

这里我举个例子,前端面试中会有个典型的题目:从输入 URL 到页面展示到底发生了什么?

换到音视频行业中,从相机录制到编码成视频会发生什么,牵扯到哪些概念?

就这么一个问题都会涉及到很多操作和概念了,而从移动端转向音视频开发的同学可能就缺少系统的了解,只有碎片化的学习。

就相机操作来说,常见的相机光圈、ISO 参数、测光模式、对焦模式、焦距、曝光补偿等概念。

就相机数据来说,YUV 格式,NV12、YUV420 等,另外还涉及到色域空间 BT.601、BT.709 等,再深入还能涉及相机的 Gamma 曲线,还有 HDR 视频的 HLG、PQ 曲线,Tone Mapping 概念等。

就视频编码来说,涉及到 H.264 算法,常见概念有 IDR 帧、I 帧、B 帧、P 帧等,另外还有开放 GOP 和闭合 GOP 、静态码率和动态码率、AVCC 和 Annex-b 码流格式等。

就音频编码来说,涉及到 ACC 算法,常见概念有采样率、采样位数、声道数、比特率等,深入一点的话,还有 ACC 的 ADTS 以及 ADIF 文件格式信息等。

最后封装成的 MP4 视频,涉及到封装格式,MP4 的各种 BOX 概念,常见的有 ftyp、moov、ctts 等,另外如何用工具去排查格式问题。

以上概念算是很常见了,面试八股文中会问到,死记硬背当然简单,但要实际去理解这些概念,在代码中调试他们,真真切切地感受这些概念的差异。

另外,这些涉及到图像、视频、音频等基础概念,不要觉得是 IT 人员搞音视频才会有的,还没有音视频技术之前人类就已经研究过很多年了。

就好比色域空间这个概念,在艺术领域同样要用到,设计师们也要了解 sRGB 色域、P3 色域等知识。再比如采样率这个概念,著名的奈奎斯特采样定理早在上个世纪20年代就提出了,而第一台计算机二十年后才诞生。理论先行,思想指导行动这个道理肯定没错的。

音视频也可以认为是一门杂学科目,确实各个方面都会涉及到,这也是为什么要强调概念很重要,基础不牢,地动山摇。

当然了,一开始也不可能掌握好所有的概念,但随着深入的学习就会愈发觉得把一些基础概念弄清楚有多重要。

2. 技能

掌握音视频概念之后,接下来就是技能了,也是很多人关心的音视频开发要如何学习的部分。

为什么要把这部分称作技能呢?在网上其实也有很多音视频入门指南了,有的指南还很全面,每篇文章都会讲解技术点,讲述 API 具体如何使用等。

举个例子:

  1. 使用 MediaExtractor 和 MediaMuxer 来解封装和封装 mp4 文件
  2. 使用 MediaCodec 来编码和解码 H.264 和 AAC 数据
  3. 使用 Camera API 完成相机的预览、对焦操作
  4. 使用 FFmpeg 做视频的解封装和封装
  5. 使用 FFmpeg、libx264、libfdk-aac 等各种库完成音视频的编解码操作等
  6. …..

以前的我也认为把上面内容都掌握了,就算是学懂音视频了,现在才觉得他们就是一些技能而已,是学习音视频的必要不充分条件。

音视频相关的技能操作肯定是必须要掌握的,但如果只沉醉于各种技能的学习,那么我可以很认真地告诉你,你只会是一个工具人而已

不要为了学习技能而学习技能,举个例子,安卓上想要实现音频的播放有哪些方式呢?

系统提供的 API 就有 MediaPlayer 、AudioTrack 直接播放音频,底层一点还可以用 OpenSL 播放音频。

另外还可以使用第三方库 FFmpeg、libfdk-aac 等来做解码操作配合上层接口播放音频。

想要实现同样的功能,可以有多种不同的方案设计。那么多排列组合都去掌握的话,当然学不过来了。

不是说掌握技能不重要,而是说要换一种思路去学习。

技术方案排列组合有很多,但最终的业务形态是有限的呀,比如播放器、直播推拉流、音视频通话、短视频录制和编辑等,而且这些业务形态有一些技能还是通用的。

在学习音视频时,就要先设定某种业务形态,围绕这个业务去掌握一系列技能,并选择最优的解决方式。

比如想做播放器,那么先掌握用 MediaExtractor 去解封装、用 MediaCodec 解码、用 OpenGL 渲染等,然后再用 FFmpeg 去解封装和解码,这个时候完成了第一版基础技能掌握,然后再用不同的实现方案替换中间的某个环节,对比新旧方案的效率怎么样,哪个更优?

更好的方案当然要优先使用,为什么大厂的音视频体验那么好,因为他们早在各种方案中选择了最优的。

通过这样的方式学习技能,才不会因为一些新的技术出现来疲于奔命。

3. 架构

假如此时,你已经熟练使用各种音视频技能,并且对每个方案的实现优劣都很清楚,能选择最好的方案,那么恭喜你已经是一个优秀的工具人了。

为什么还要强调工具人呢,因为工具人只会实现功能,缺少了一些架构思想,而这正是进阶转变的关键之处。

同事之间经常说自己是做音视频工程的,一些特效、算法都是其他组做的,我们做的工程要很灵活的去对接和业务拓展,像剪映的编辑模块有很多功能,画中画、曲线变速、蒙版、定格、动画等,既有涉及编解码的,也有涉及效果,如果架构设计一开始没弄好的话,后面业务迅速发展,技术侧就很难保证迭代速度可以跟上业务脚步了。

这个时候光掌握一些技能就不够看了,要学会打地基,学会设计架构,从一个小的模块开始再到整体的模块。

当然架构设计也不是空中阁楼,不可能脱离业务存在的,想要做好架构设计,首先还是要理解好自己的业务,针对目前在业务上的弊端做优化,同时也多观察竞品的功能,假如现在的设计要实现竞品的功能,又会遇到哪些问题呢?另外,针对问题要能看到问题的本质,抽象出自己的理解。

除此之外,多看一些优秀的开源项目也是大有裨益的,就比如 FFmpeg 的源码和结构设计,还有 GStreamer 和 WebRTC 的源码及架构设计,这些优秀的开源库都是经受过项目考验的,仿照着学习就已经能够提高很多了。

另外,关于架构设计,目前业内经常会有交流活动,一些大厂也会在活动会议上把自己的架构方案与遇到的问题拿出来和大家分享,虽说具体的技术实现细节很少有人讲,但大的方案和趋势还是可以借鉴参考的。

后续有一些好的架构设计,也会在 音视频开发进阶 知识星球内分享给大家!

4. 实践

放在最后,也是最重要的模块,就是实践了,实践出真知。

入门或者转行音视频,理论方案说再多,还是要落实到行动上,强调实践,整起来就流弊!!!

另外,实践也要讲究环境氛围,他人的实践也可以成为你成长的台阶,就比如音视频的细节很多,我也不可能什么都搞过,但是我的同事搞过,我可以去了解他做内容,同样增加了自己的知识面,反过来亦如此。

如果你觉得自己掌握的已经够好,那么不妨跳出来试试外面的世界,也许会有更好的机会在等你。

如果你在实践中遇到的问题,也欢迎加入音视频开发进阶 知识星球,提供专业的答疑和干货内容。

这两天肝完了,时间有点仓促,其实还有很多可以讲的,欢迎大佬一起交流讨论~~

原创文章,转载请注明来源:    入门或者转行音视频,应该要怎么做?