Android开发想转行音视频,应该要怎么做?

📅 2026/8/27 12:22:57
Android开发想转行音视频,应该要怎么做?
在星球经常被问到的问题Android开发想转行音视频应该要怎么做很多人对此都有疑惑不光有工作多年的职场老司机也有求学期间的研究生同学们摘录了其中一部分提问可以看到大家的疑惑是有类似的。对于星球用户的每个提问我都有认真回答毕竟每个人的情况不一样没有什么统一的答案。这些提问其实可以归为两类针对自己的情况现阶段要从事音视频开发吗这是一个关于利弊分析的问题也是特别实际很现实的问题。已经决定从事音视频开发要怎么去做呢这是一个学习路线的问题也是我个人的经验可以给到帮助的问题。其实第一类问题要不要从事音视频开发会比第二类问题从事音视频开发要怎么做更难回答一些毕竟迈出第一步永远是最难的。要不要从事音视频开发尤其是针对已经工作多年的朋友来说这是一个职业规划的问题每个人的职业经历、思考角度甚至利益关系都不一样在十字路口上选择的方向也是不同的。不同于技术问题的回答闻道有先后术业有专攻在我不熟悉的领域回答错了问题并不是一件丢人的事情反而是个学习的机会。但职场上给错了建议并且听从执行了那在短暂的程序员生涯上可能会造成不可逆的影响尤其是我本身还从事音视频的开发在一些观念上就会有一些偏袒很难做到客观中立。所以针对第一类问题我只能从行业趋势和自己的观察上给出一些看法。这一两年因为该死的疫情让短视频、超高清视频和实时音视频反而成为需求风口。我的看法当然是觉得音视频这个行业还可以而且从我自己的观察来看做音视频的现在普遍年龄都在 30 了我 94 年的在组里有可能还是年龄最小的那一批人了。做客户端上的音视频、服务端上的、嵌入式的、系统底层的都是音视频的范围另外从事音视频编解码算法、网络通信协议、视频超分、音频降噪等等也是音视频的领域范围内所以说音视频也可以是一个很大的范围体系每个人处在其中的位置不同而已。如果你很熟练 FFmpeg 熟悉播放器或者很懂 OpenGL 渲染那么不懂 JVM 不懂 Android Framework 一点也不妨碍你找高薪工作。以上就是关于 第一类问题要不要从事音视频开发 的建议每个人都不同具体情况还是要具体分析的仅供参考。如果你决定迈出第一步尝试一下入门或者转行音视频那么可以接下往下看了。从事音视频开发要怎么做对于第二类问题从事音视频开发要怎么做大概会从四个方面给出路线概念技能架构实践概念首先最重要的就是概念了。既然认为音视频也是一个单独的领域那么每个领域就会有它对应的名词概念。学音视频也和我们上学学习一样一门学科一开始肯定要学一些新的名词概念。关于音视频常见的概念有哪些呢帧率、码率、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 具体如何使用等。举个例子使用 MediaExtractor 和 MediaMuxer 来解封装和封装 mp4 文件使用 MediaCodec 来编码和解码 H.264 和 AAC 数据使用 Camera API 完成相机的预览、对焦操作使用 FFmpeg 做视频的解封装和封装使用 FFmpeg、libx264、libfdk-aac 等各种库完成音视频的编解码操作等…以前的我也认为把上面内容都掌握了就算是学懂音视频了现在才觉得他们就是一些技能而已是学习音视频的必要不充分条件。音视频相关的技能操作肯定是必须要掌握的但如果只沉醉于各种技能的学习那么我可以很认真地告诉你你只会是一个工具人而已。不要为了学习技能而学习技能举个例子安卓上想要实现音频的播放有哪些方式呢系统提供的 API 就有 MediaPlayer 、AudioTrack 直接播放音频底层一点还可以用 OpenSL 播放音频。另外还可以使用第三方库 FFmpeg、libfdk-aac 等来做解码操作配合上层接口播放音频。想要实现同样的功能可以有多种不同的方案设计。那么多排列组合都去掌握的话当然学不过来了。不是说掌握技能不重要而是说要换一种思路去学习。技术方案排列组合有很多但最终的业务形态是有限的呀比如播放器、直播推拉流、音视频通话、短视频录制和编辑等而且这些业务形态有一些技能还是通用的。在学习音视频时就要先设定某种业务形态围绕这个业务去掌握一系列技能并选择最优的解决方式。比如想做播放器那么先掌握用 MediaExtractor 去解封装、用 MediaCodec 解码、用 OpenGL 渲染等然后再用 FFmpeg 去解封装和解码这个时候完成了第一版基础技能掌握然后再用不同的实现方案替换中间的某个环节对比新旧方案的效率怎么样哪个更优更好的方案当然要优先使用为什么大厂的音视频体验那么好因为他们早在各种方案中选择了最优的。通过这样的方式学习技能才不会因为一些新的技术出现来疲于奔命。3. 架构假如此时你已经熟练使用各种音视频技能并且对每个方案的实现优劣都很清楚能选择最好的方案那么恭喜你已经是一个优秀的工具人了。为什么还要强调工具人呢因为工具人只会实现功能缺少了一些架构思想而这正是进阶转变的关键之处。同事之间经常说自己是做音视频工程的一些特效、算法都是其他组做的我们做的工程要很灵活的去对接和业务拓展像剪映的编辑模块有很多功能画中画、曲线变速、蒙版、定格、动画等既有涉及编解码的也有涉及效果如果架构设计一开始没弄好的话后面业务迅速发展技术侧就很难保证迭代速度可以跟上业务脚步了。这个时候光掌握一些技能就不够看了要学会打地基学会设计架构从一个小的模块开始再到整体的模块。当然架构设计也不是空中阁楼不可能脱离业务存在的想要做好架构设计首先还是要理解好自己的业务针对目前在业务上的弊端做优化同时也多观察竞品的功能假如现在的设计要实现竞品的功能又会遇到哪些问题呢另外针对问题要能看到问题的本质抽象出自己的理解。除此之外多看一些优秀的开源项目也是大有裨益的就比如 FFmpeg 的源码和结构设计还有 GStreamer 和 WebRTC 的源码及架构设计这些优秀的开源库都是经受过项目考验的仿照着学习就已经能够提高很多了。另外关于架构设计目前业内经常会有交流活动一些大厂也会在活动会议上把自己的架构方案与遇到的问题拿出来和大家分享虽说具体的技术实现细节很少有人讲但大的方案和趋势还是可以借鉴参考的。后续有一些好的架构设计也会在 音视频开发进阶 知识星球内分享给大家4. 实践放在最后也是最重要的模块就是实践了实践出真知。入门或者转行音视频理论方案说再多还是要落实到行动上强调实践整起来就流弊另外实践也要讲究环境氛围他人的实践也可以成为你成长的台阶就比如音视频的细节很多我也不可能什么都搞过但是我的同事搞过我可以去了解他做内容同样增加了自己的知识面反过来亦如此。如果你觉得自己掌握的已经够好那么不妨跳出来试试外面的世界也许会有更好的机会在等你。最后给大家分享一份《音视频精编源码解析》内容分为7个章节涵盖 WebRTC Native 源码导读、X264 源码解读、FFmpeg、ijkplayer 源码分析系列、jsmpeg 源码解析、Live555 源码解析、Opus 源码解析一共 675 页。第一章 WebRTC Native 源码导读第一节-安卓相机采集实现分析第二节-安卓预览实现分析第三节-安卓视频硬编码实现分析第四节-VideoCRE 与内存抖动优化第五节-安卓 P2P 连接过程和 DataChannel 使用第六节-视频数据 native 层之旅第七节-混音第八节-P2P 连接过程完全解析第九节-API 概览第十节-RTP H.264 封包与解包第二章 X264源码解读第一节-概述第二节-x264命令行工具第三节-编码器主干部分-2第四节-x264_slice_write()第五节-滤波Filter部分第六节-宏块分析Analysis部分-帧内宏块Intra第三章 FFmpeg第一节-FFmpeg 编译和集成第二节-FFmpeg ANativeWindow 实现视频解码播放第三节-FFmpeg OpenSLES 实现音频解码播放第四节-FFmpeg OpenGLES 实现音频可视化播放第五节-FFmpeg OpenGLES 实现视频解码播放和视频滤镜第六节-FFmpeg 播放器实现音视频同步的三种方式第七节-FFmpeg OpenGLES 实现 3D 全景播放器第八节-FFmpeg 播放器视频渲染优化第九节-FFmpeg、x264以及fdk-aac 编译整合第十节-FFmpeg 视频录制 - 视频添加滤镜和编码第十一节-FFmpeg Android AudioRecorder 音频录制编码第十二节-Android FFmpeg 实现带滤镜的微信小视频录制功能第四章 ijkplayer 源码分析系列第一节-整体结构总结第二节-read_thread流程第三节-解码流程第四节-渲染流程第五章 jsmpeg 源码解析第一节-基础知识 字符处理 ArrayBuffer TypedArray第二节-TS码流 PAT PMT第三节-源码buffer.js对Uint8Array的封装第四节-源码ts.js TS格式解析流程第五节-源码mpeg1.js MPEG1码流结构第六节-概要总结第六章 Live555源码解析第一节-GROUPSOCK第二节-MEDIUM媒体基础类第三节-MEDIASOURCE、MEDIASINK、MEDIASESSION、MEDIASUBSESSION第四节-FRAMEDSOURCE、RTPSOURCE、RTPSINK第五节-GENERICMEDIASERVER、RTSPSERVER、RTSPCLIENT第六节-testRTSPClient第七节-ServerMediaSession、ServerMediaSubsession、live555MediaServer第七章 Opus源码解析第一节-简介第二节-编解码器使用第三节-手撸一个Opus编码程序第四节-Opus解码程序实现第五节-OggOpus封装器全解析第六节-Opus编码基础之认识声音第七节-Opus编码基础之压缩编码欢迎大家一键三连支持若需要文中资料直接点击文末CSDN官方认证微信卡片免费领取【保证100%免费】↓↓↓