做音视频开发要掌握哪些知识?

最近有读者留言,说“想转行音视频开发,怎么做”,正巧,前几天我还在某乎上,看到有人在问音视频的学习资料,还是个大一的学生。

想说一句:真有眼光。

做音视频开发要掌握哪些知识?

如今这个时代,想赚钱,一个共识是,得先**选对赛道**。有些行业和领域,终其一生的天花板也不过如此。但有的朝阳行业,你一进去就可以获得大量的机会,就是“ROI(投入产出比)”很高。

那就聊聊为啥从事音视频技术,未来会很赚钱。

音视频学习资料免费领取+如何系统学习音视频开发,后台私信扣1

要说音视频技术,在这两年迎来爆发期。首先 5G 的发展提供了硬件条件,又受疫情的影响,生活场景线上化,大量的线上办公、线上教育、线上娱乐等需求,让几亿人涌入各类线上互动平台。比如:

  • 抖音和快手的短视频,需要应用图像处理和视频编码技术,如何在保持高画质的情况下,尽量减少视频文件的大小;
  • 连麦直播需要 RTC 和直播技术,如何能够保证在各种网络状况下实现超低延时、降低卡顿率;
  • 视频会议需要 RTC 和转码合流服务等技术,几十上百人的大型视频会议,如何保证流畅度、卡顿率、画质等指标等;
  • 随着线上体验的增加,人们对互动中的音频体验要求也在提升。除了听得到、听得清,还得好听、音质还原度高等。例如,Facebook 改名 Meta 进军元宇宙,TWS 耳机支持了空间音频渲染和主动降噪等等。

可以说,音视频技术就如同空气和水,无处不在,未来充满无限可能。而且这些真实场景都强调实时互动,延迟必须控制在毫秒级别内,如果在这个过程中,出现延时高、卡顿、画面模糊、杂音大等情况,你可以想象会出现什么样的体验吗?别说李佳琪双 11 直播带货 100 亿了,正常打一把沟通流畅的王者荣耀都不一定。

其实,早在疫情初期,很多 SaaS 平台甚至大厂都出现过卡顿问题,主要对突如其来的流量没有做好充分准备,而如今大家都看到了线上的市场,自然对音视频技术人才的需求就多了。

所以不夸张地说,音视频开发是一片蓝海,人少,钱多。而且未来,会更加炙手可热。

做音视频开发要掌握哪些知识?

这张图供参考。但也能看出来,整体薪资待遇比普通开发者要优厚很多。不仅如此,从网上随手一搜,就能看到某某安卓转音视频,真香了、突破就业危机等等。

做音视频开发要掌握哪些知识?

如今除了大厂,很多小公司也在寻找音视频的人才,稍微好点的音视频人才可能同时 3~4 家公司抢着要。就是因为从业人才基数低,高端人才缺乏,最重要的是,音视频技术有开发门槛,不好培养,也很难自学。但这也意味着,你跟别人相比有技术上的核心竞争优势,有分水岭。

快速入门音视频技术的方法,有吗?

音视频技术学起来并不容易,要懂的东西太多:音视频的采集、编码、传输、解码、渲染...等等,网上也少见体系化的资料。

但就像左耳朵耗子所说,“要去知识的源头学习”。对学习者来说,找到优质的信息源可以让你事半功倍,不是二手加工的,也不会有信息损失或有误。

而在音视频技术教育领域,不得不提的就是【零声】,在音视频课程里面可以说是非常系统全面的,并且提供一次报名永久学习服务。

内容分为音视频基础、FFmpeg实战、流媒体客户端、流媒体服务器、WebRTC音视频通话和Android NDK开发六大块内容, 包含9个开源项目、60+自研项目和案例分析,提供全套的课件、代码、资料。对标大厂音视频高级开发岗位技术栈。

现如今的音视频技术可以说无处不在。未来,也将作为一种基础技术应用到更广泛的的场景中,音视频技术人才也会成为新宠儿。虽然很难精通,但这个领域知识更新慢,学的东西不容易淘汰,积累的经验将会是撬动你更大未来的一个支点。

所有的伟大都来源于一个勇敢的开始。无论是现在从事音视频技术,还是后期转岗,都是很多人为数不多的机遇,能不能抓住就看个人了。

接下来附上详细学习路线:

音视频学习资料免费领取+想知道如何系统学习音视频开发

后台私信扣1。

做音视频开发要掌握哪些知识?

第一阶段

音频基础知识

01. 如何采集声音-模数转换原理02. 为什么高品质音频采样率>=44.1Khz03. 什么是PCM04. 一个采样点用多少位表示05. 采样值用整数还是浮点数表示 06. 音量大小和采样值大关系07. 多少个采样点作为一帧数据08. 左右通道的采样数据如何排列09. 什么是PCM(脉冲编码调制)10. 音频编码原理

视频基础知识

01. RGB彩色原理02. 为什么需要YUV格式03. 什么是像素04. 分辨率、帧率、码率05. YUV数据存储格式区别注:具体H264编码格式见FFmpeg章节 06. YUV内存对齐问题07. 为什么画面显示绿屏08. H264编码原理09. H264 I P B帧的关系

解复用基础知识

01. 什么是解复用,比如MP4格式02. 为什么需要不同的复用格式注:具体复用格式详解见FFmpeg章节 03. 常见的复用格式MP4/FLV/TS

FFmpeg开发环境搭建

01. Windows、Ubuntu、MAC三大平台02. QT安装03. FFmpeg命令行环境 04. FFmpeg API环境05. FFmpeg编译06. vs2019安装(win平台)

音视频开发常用工具

01. MediaInfo,分析视频文件02. VLC*放播**器,*放播**测试03. EasyICE,分析TS流04. flvAnalyser,分析FLV 05. mp4box,分析mp406. audacity,分析音频PCM07. Elecard_streamEye,分析H264

第二阶段 FFmpeg实战

FFmpeg命令

01. 音频PCM/AAC文件提取02. 视频YUV/H264文件提取03. 解复用、复用04. 音视频录制 05. 视频裁剪和合并06. 图片/视频转换07. 直播推流和拉流08. 水印/画中画/九宫格滤镜注:掌握FFmpeg的目的:1.快速掌握FFmpeg能做什么;2.加深对音视频的理解

SDL跨平台多媒体开发库实战

01. SDL环境搭建02. SDL事件处理03. SDL线程处理 04. 视频YUV画面渲染05. 音频PCM声音输出注:SDL兼容Win、Ubuntu、Mac三大平台,主要用于后续项目的画面显示和声音输出

FFmpeg基石精讲

01. FFmpeg框架02. FFmpeg内存引用计数模型03. 解复用相关AVFormat XXX等04. 编解码相关AVCodec XXX等 05. 压缩数据AVPacket06. 未压缩数据AVFrame07. FFmpeg面向对象思想08. Packet/Frame数据零拷贝注:目的熟悉FFmpeg常用结构体和函数接口

FFmpeg音视频解复用+解码

01. 解复用流程02. 音频解码流程03. 视频解码流程04. FLV封装格式分析05. MP4封装格式分析06. FLV和MP4 seek有什么区别07. 为什么FLV格式能用于直播08. 为什么MP4不能用于直播09. MP4能否用来做点播10. AAC ADTS分析 11. H264 NALU分析12. AVIO内存输入模式13. 音频重采样实战14. 重采样后的数据*放播**时长是否一致15. 重采样后PTS如何表示16. 视频解码后YUV内存对齐问题17. 音频解码后PCM排列格式问题 18. 硬件解码dxva2/nvdec/cuvid/qsv 19. 硬件gpu数据转移到cpu 20. H265解码 注:FFmpeg API学习:视频解复用 -> 解码 -> 编码 -> 复用合成视频 18/19/20部分为2022年新增内容

FFmpeg音视频编码+复用合成视频

01. AAC音频编码02. H264视频编码03. PCM+YUV复用合成MP4/FLV04. H264编码原理05. IDR帧和I帧区别06. 动态修改编码码率07. GOP间隔参考值08. 复用合成MP4音视频不同步问题 09. 编码、复用timebase问题10. MP4合成IOS不能*放播**问题11. 重采样后PTS如何表示12. 视频编码YUV内存对齐问题 13. 硬件编码dxva2/nvenc/cuvid/qsv 14. H265编码原理 15. H264、H265编码互转 注: 13/14/15部分为2022年新增

FFmpeg过滤器

01. FFmpeg过滤chain框架02. 音频过滤器框架03. 视频过滤器框架04. 多路音频混音amix 05. 视频水印watermark06. 视频区域裁剪和翻转07. 视频添加logo

ffplay*放播**器

01. 掌握ffplay.c的意义02. ffplay框架分析03. 解复用线程04. 音频解码线程05. 视频解码线程06. 声音输出回调07. 画面渲染时间间隔08. 音频重采样09. 画面尺寸格式变换10. 音频、视频、外部时钟同步区别11. 以视频为基准时音频重采样补偿 12. 音量静音、调节大小的本质13. 音视频packet队列大小限制14. 音视频packet队列线程安全15. 音视频frame队列大小限制16. 音视频frame队列线程安全17. 暂停、*放播**实现机制18. seek*放播**导致的画面卡住问题19. seek*放播**数据队列、同步时钟处理20. 如何做到逐帧*放播**21. *放播**器退出的流程要点 注: ffplay.c是ffplay命令的源码,掌握ffplay对于我们自己开发*放播**器有事半功倍的效果。

ffmpeg多媒体视频处理工具

01. 掌握ffmpeg.c的意义02. ffmpeg框架分析03. 音视频编码04. 封装格式转换05. 提取音频06. 提取视频07. logo叠加 08. 音视频文件拼接09. filter机制10. 命令行解析流程11. MP4转FLV不重新编码逻辑12. MP4转FLV重新编码逻辑13. MP4转FLV timebase14. MP4转FLV scale 注: ffmpeg.c是ffmpeg命令的源码,掌握ffmpeg.c的大体框架对于我们要实现一些不知道怎么编写代码的功能(用ffmepg命令行可以但不知道怎么调用ffmpeg api时可以参考ffmepg.c的逻辑)有极大的帮助,比如要裁剪视频长度。

FFmpeg+QT QMplay2*放播**器(2022新增)

01. QMplay2开源*放播**器讲解02. QMplay2框架分析03. *放播**器模块划分04. 解复用模块05. 音视频解码06. *放播**器控制07. 音视频同步 08. CUVID/D3D11VA硬解09. 音量频谱展示10. 音频均衡器11. 画面旋转、翻转12. 画面亮度、饱和度调节13. 画面4:3 16:9切换14. 码流信息分析注: 该项目难度较大,供深入学习*放播**器的学员参考,老师以提供课后技术支持为主,附加少量视频。

做音视频开发要掌握哪些知识?

OBS推流录制源码分析(2022新增)

01. OBS vs2019+QT5.15.2编译02. 音频配置和初始化分析03. 音频线程模块采集和编码分析04. 视频配置和初始化分析05. 视频线程模块采集和编码分析06. OBS初始化过程分析 07. 录制流程分析08. 麦克风采集分析09. 桌面采集分析10. X264编码分析11. 系统声音+麦克风混音12. 推流模块分析注: 该项目难度较大,供深入推流项目的学员参考,老师以提供课后技术支持为主,附加少量视频。

第三阶段 流媒体客户端

RTMP推拉流项目实战

01. RTMP协议分析02. wireshark抓包分析03. H264 RTMP封装04. AAC RTMP封装05. RTMP拉流实战06. H264 RTMP解析07. AAC RTMP解析08. RTMP推流实战09. 没有MetaData能否*放播** 10. RTMP推流是否会导致延迟11. RTMP推流如何动态调整码率12. RTMP推流如何动态调整帧率13. RTMP拉流是否会导致延迟14. 如何检测RTMP拉流延迟15. 如何解决RTMP*放播**延迟16. ffplay、vlc能否用来测试*放播**延迟17. RTMP拉流*放播**变速策略设置注: RTMP推拉流是我们进入音视频流媒体领域的第一个项目,从数据采集->编码->推流->流媒体服务器转发->拉流->解码->*放播**等整个逻辑我们必须掌握。

HLS拉流分析

01. HLS协议分析02. HTTP协议分析03. TS格式分析04. m3u8文件解析05. wireshark抓包分析 06. HLS拉流实战07. FFmpeg HLS源码分析08. HLS多码率机制09. 如何解决HLS延迟高的问题注: 理解HLS的拉流机制,有助于我们解决HLS*放播**延迟较高的问题

RTSP流媒体实战

01. RTSP协议分析02. RTP协议分析03. H264 RTP封装04. H264 RTP解析05. AAC RTP封装06. AAC RTP解析07. RTCP协议分析08. RTSP流媒体服务器搭建09. RTSP推流实战 10. RTSP拉流实战11. wireshark抓包分析12. RTP头部序号的作用13. RTCP的NTP和RTP的TS的区别14. RTSP交互过程15. 花屏可能的原因16. SPS PPS如何发送17. SDP封装音视频信息注:RTSP涉及的技术不但只适用于安防领域,其中的RTCP RTP SDP等协议在WebRTC也有应用。

第四阶段 流媒体服务器

SRS 3.0源码剖析 协程

01. 整体框架分析02. RTMP推流分析03. RTMP拉流分析04. HLS拉流分析05. HTTP-FLV拉流分析06. FFmpeg转码分析07. 首屏秒开技术分析08. forward集群源码分析09. edge集群源码分析10. 负载均衡部署方式 11. 连接和协程的关系11. 如何更快速掌握SRS源码12. 流媒体服务器是否导致延迟13. 如何降低流媒体服务器的延迟14. 怎么获取流媒体服务器推流信息15. 怎么获取流媒体服务器拉流信息16. 首屏秒开能降低延迟吗17. 推流->服务器转发->拉流延迟分析注:对于SRS流媒体服务器,我们长期更新,从3.0->4.0->5.0。

ZLMediaKit源码剖析(2022年新增) 多线程

01. 整体框架分析02. 线程模块划分03. RTSP推流连接处理04. RTSP拉流连接处理 05. 数据转发模型06. SDP解析07. RTP H264解析08. RTP AAC解析注:ZLMediaKit主要讲解RTSP流媒体服务器相关的模块,其他模块RTMP/HLS等参考SRS。

第五阶段 WebRTC项目实战

WebRTC中级开发 手把手写代码

01. WebRTC通话原理分析02. WebRTC开发环境搭建03. coturn最佳搭建方法04. 如何采集音视频数据05. 一对一通话时序分析06. 信令服务器设计07. SDP分析08. Candidate类型分析09. Web一对一通话 10. Web和Android通话11. AppRTC快速演示12. 如何设置编码器优先级13. 如何限制最大码率14. 信令服务器的本质是什么15. 为什么从接口获取SDP后还要再次设置16. Web和Android的SDP差异17. A要和B通话,A怎么知道B的存在注:学习WebRTC建议从web端入手,可以直接调用js接口(千万别刚接触WebRTC就忙着去编译WebRTC源码),对WebRTC通话流程有清晰的理解再考虑其他端。

WebRTC高级开发-MESH模型多人通话

01. 自定义摄像头分辨率02. 码率限制03. 调整编码器顺序04. Mesh模型多方通话分析 05. 多人通话信令服务器开发06. 动态分配stun/turn服务器07. Web客户端源码08. Android客户端源码注:该项目

WebRTC高级开发-Janus SFU模型多人通话

01. Janus框架分析02. Janus信令设计03. 基于Janus实现会议系统04. Janus Web客户端源码分析05. Janus Android客户端源码分析06. Janus Windows客户端源码分析07. 基于Full ICE的部署08. 基于Lite ICE的部署09. Full ICE和Lite ICE的区别10. 发布订阅模型注:Janus是一个非常出名的SFU WebRTC服务器,不少企业基于该开源项目做二次开发,比如学霸君。

WebRTC高级开发-SRS 4.0源码分析

01. RTMP转发WebRTC逻辑02. WebRTC转发RTMP逻辑03. WebRTC音视频一对一通话04. WebRTC多人通话05. WebRTC SFU模型分析06. SRTP分析07. RTCP分析08. SDP分析09. NACK分析10. turn分析11. stun分析12. 拥塞控制算法13. FEC14. jitter buffer注:srs著名的流媒体服务器,社区非常活跃。红色为2022年新增内容

第六阶段 Android NDK

Android NDK开发基础

01. So库适配总结02. GDB调试技巧03. Makefile工程组织04. CMake工程组织 05. 生成指定CPU平台的so库06. JNI基础和接口生成07. JNI Native层构建 Java 对象08. JNI异常处理注:供往移动开发的朋友,红色部分为2022年新增。

Android FFmpeg编译和应用

01. 编译x26402. 编译x26503. 编译mp304. 编译fdk-aac 05. 编译FFmpeg06. 使用ffmpeg实现mp4转格式07. 使用FFmpeg开发*放播**器

Android RTMP推拉流

01. RTMP推流协议实现02. RTMP拉流协议实现03. RTMP拉流音视频同步04. MediaCodec硬件编码 05. MediaCodec硬件解码06. OpenSL ES*放播**音频数据07. MediaCodec硬件解码08. OpenGL ES Shader显示视频

Android Ijkplayer源码分析

01. 编译ijkplayer和实践02. 项目框架分析03. *放播**状态转换04. 拉流分析05. 解码分析06. 音频*放播**流程07. 视频渲染流程 08. OpenSL ES*放播**音频数据09. MediaCodec硬件解码10. OpenGL ES Shader显示视频11. 变速*放播**实现原理12. 低延迟*放播**实现13. 缓存队列设计机制分析

原文链接:https://zhuanlan.zhihu.com/p/590053299