热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

想说一句:真有眼光。

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

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

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


  • 抖音和快手的短视频,需要应用图像处理和视频编码技术,如何在保持高画质的情况下,尽量减少视频文件的大小;

  • 连麦直播需要 RTC 和直播技术,如何能够保证在各种网络状况下实现超低延时、降低卡顿率;

  • 视频会议需要 RTC 和转码合流服务等技术,几十上百人的大型视频会议,如何保证流畅度、卡顿率、画质等指标等;

  • 随着线上体验的增加,人们对互动中的音频体验要求也在提升。除了听得到、听得清,还得好听、音质还原度高等。例如,Facebook 改名 Meta 进军元宇宙,TWS 耳机支持了空间音频渲染和主动降噪等等。

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

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

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

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

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

** **


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

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

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

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

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

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

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

接下来附上详细学习路线:系统学习咨询点击007

 


第一阶段

音频基础知识


01. 如何采集声音-模数转换原理
02. 为什么高品质音频采样率>=44.1Khz
03. 什么是PCM
04. 一个采样点用多少位表示
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,分析mp4
06. audacity,分析音频PCM
07. 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. 压缩数据AVPacket
06. 未压缩数据AVFrame
07. 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/FLV
04. 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. 视频水印watermark
06. 视频区域裁剪和翻转
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 timebase
14. 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. FEC
14. 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. 编译x264
02. 编译x265
03. 编译mp3
04. 编译fdk-aac 05. 编译FFmpeg
06. 使用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. 缓存队列设计机制分析

 


推荐阅读
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 初探性能优化:入门指南与实践技巧
    在编程领域,常有“尚未精通编码便急于优化”的声音。为了从性能优化的角度提升代码质量,本文将带领读者初步探索性能优化的基本概念与实践技巧。即使程序看似运行良好,数据处理效率仍有待提高,通过系统学习性能优化,能够帮助开发者编写更加高效、稳定的代码。文章不仅介绍了性能优化的基础知识,还提供了实用的调优方法和工具,帮助读者在实际项目中应用这些技术。 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 在使用USB接口的二维条码扫描器时,发现其无法正确识别条码中的中文字符。然而,采用串口连接的方式则能够成功识别。目前面临的问题是如何将通过串口获取的数据在网页中进行实时展示,希望各位专家能提供解决方案,不胜感激。 ... [详细]
  • Maven Web项目创建时JSP文件常见错误及解决方案
    Maven Web项目创建时JSP文件常见错误及解决方案 ... [详细]
  • 深入解析Linux内核中的进程上下文切换机制
    在现代操作系统中,进程作为核心概念之一,负责管理和分配系统资源,如CPU和内存。深入了解Linux内核中的进程上下文切换机制,需要首先明确进程与程序的区别。进程是一个动态的执行流,而程序则是静态的数据和指令集合。进程上下文切换涉及保存当前进程的状态信息,并加载下一个进程的状态,以实现多任务处理。这一过程不仅影响系统的性能,还关系到资源的有效利用。通过分析Linux内核中的具体实现,可以更好地理解其背后的原理和技术细节。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 成都服务器租赁适用于哪些网站业务部署——Vecloud专业解析
    成都,作为四川省的省会,不仅是西南地区唯一的副省级城市,也是国家重要的高新技术产业基地和商贸物流中心。Vecloud专业解析指出,成都服务器租赁服务特别适合各类网站业务的部署,尤其是需要高效、稳定和安全的在线应用。无论是电子商务平台、内容管理系统还是大数据分析,成都的服务器租赁都能提供强大的支持,满足不同企业的需求。 ... [详细]
  • 在Android平台上,视频监控系统的优化与应用具有重要意义。尽管已有相关示例(如http:www.open-open.comlibviewopen1346400423609.html)展示了基本的监控功能实现,但若要提升系统的稳定性和性能,仍需进行深入研究和优化。本文探讨了如何通过改进算法、优化网络传输和增强用户界面来提高Android视频监控系统的整体效能,以满足更复杂的应用需求。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
author-avatar
欧泊王_121
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有