音视频的知识纷繁复杂,自己学习非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验;
音视频从业者基本上有两个层面:一个层面是搞音视频算法,这类人非常少,需要有深的数学能力和算法背景。相对来说,学习成本高,一般企业不需要,也养不起。这类人一般都会选择去大公司,薪水百万是最low 的。这些人一般指专注在一个领域上;另一个层面是搞工程,这类人相对较多,他们有扎实的理论基础,很强的技术功底,对音频、视频都非常熟悉。这些人工资要比一般开发高20%左右;即使搞工程的人,学习成本也是非常高的,在音视频领域没呆个3-5年的,一般公司不敢用,因为啥都做不了。这里的关键点是,音视频有各种各样的规范,而且都是字节码,每一位的变化都代表不同的含义,还有大量的原理要理解,这些都非常花时间;
好在现在有ffmpeg,WebRTC 等开源库,大大降低了研发和学习成本。但即使这样,对于一般的开发同学也难如登天。
随着5G时代的到来,音视频慢慢变成人们日常生活中的必须品。所以,现在有大量的公司开始寻找音视频人才,一个稍好点的音视频人才现在可能会有3-4家公司抢着要。因此,对音视频人才的需求也从小众变成了大众,这更多的是大家对未来市场的预期导致的结果。做个不恰当的比喻,3G/4G的出现,促成了移动互联网10年繁荣。而5G的出现,也会促成至少10年音视频行业的繁荣,因为,音视频在5G时代会给用户带来更好,更丰富的用户体验。
所以,做音视频研发的前景是广阔的,道路是曲折的。对于很多早看出音视频前景的同学来说,已经开始通过各种渠道搜集相关的学习资料,及早的投入音视频研发的队伍,这样才能使自己在未来几年可以在职场上更有作为。
音视频自学的难点
- 音视频自学非常困难,网上通俗易懂的难找到
- 网上部分资源是对应的开源版本较低,比如雷霄骅(雷神)博客的FFmpeg版本较低
- 音视频涉及大量的开源库和协议
- 比如ffmpeg的编译,如果不熟悉各种编译报错
- Janus编译涉及各种开源组件编译不通过
- 比如WebRTC涉及的RTP RTCP SDP STUN等协议
- 部分嵌入式音视频的朋友技术面窄,技术不深入
- 比如有同学做了2年的音视频驱动,一帧音频能持续播放多久都不明白
ffmpeg+sdl播放器项目实战地址:https://xxetb.xet.tech/s/13qR6G
https://xxetb.xet.tech/s/13qR6G
2024全新音视频流媒体高级开发进六大阶段
本路线涵盖最主流的音视频全栈开发技术,适合嵌入式开发、桌面开发、Android/IOS移动开发、后台开发、IT行业人员往音视频领域发展,适合音视频从业人员进一步系统提升音视频技术。学完具备全栈的音视频技术体系思维和视野,能够结合企业实际场景业务,进行播放器、录屏器、推拉流直播、视频监控、音视频通话、流媒体服务器等实际项目的开发。
1、音视频基础
(一)音频基础知识
-
如何采集声音-模数转换原理
-
为什么高品质音频采样率>=44.1 Khz
-
什么是PCM
-
一个采样点用多少位表示
-
采样值用整数还是浮点数表示
-
音量大小和采样值大关系
-
多少个采样点作为一-帧数据
-
左右通道的采样数据如何排列
-
什么是PCM (脉冲编码调制)
-
音频编码原理
(二)视频基础知识
-
RGB彩色原理
-
为什么需要YUV格式
-
什么是像素
-
分辨率、帧率、码率
-
YUV数据存储格式区别
-
YUV内存对齐问题
-
为什么画面显示绿屏
-
H264编码原理
-
H264IPB帧的关系
注:具体H264编码格式见FFmpeg章节
(三)解复用基础知识
-
什么是解复用,比如MP4格式
-
为什么需要不同的复用格式
-
MP4/FLV/TS
-
常见的复用格式MP4/FLV/TS
注:具体复用格式详解见FFmpeg章节
(四)FFmpeg开发环境搭建
-
Windows、Ubuntu、MAC3三大平台
-
QT安装
-
FFmpeg命令行环境
-
FFmpeg API环境
-
FFmpeg编译
-
vs2019安装(win平台)
(五)音视频开发常用工具
-
Medialnfo,分析视频文件
-
mp4box,分析mp4
-
VLC播放器,播放测试
-
audacity,分析音频PCM
-
EasyICE,分析TS流
-
Elecard_ streamEye, 分析H264
-
flvAnalyser,分析FLV
-
海康YUVPlayer,分析YUV
2、FFmpeg实战
(一)FFmpeg命令
-
音频PCM/AAC文件提取
-
视频YUV/H264文件提取
-
解复用、复用
-
音视频录制
-
视频裁剪和合并
-
图片/视频转换
-
直播推流和拉流
-
水印/画中画/九宫格滤镜
注:掌握FFmpeg的目的
-
1.快速掌握FFmpeg能做什么;
-
2.加深对音视频的理解
(二)SDL跨平台
-
多媒体开发库实战
-
SDL环境搭建
-
SDL事件处理
-
SDL线程处理
-
视频YUV画面渲染
-
音频PCM声音输出
注: SDL兼容Win、Ubuntu、Mac三大平台,主要用于后续项目的画面显示和声音输出
(三)FFmpeg基石精讲
-
FFmpeg框架
-
FFmpeg内存引|用计数模型
-
解复用相关AVFormat XXX等
-
编解码相关AVCodec XXX等
-
压缩数据AVPacket
-
未压缩数据AVFrame
-
FFmpeg面向对象思想
-
Packet/Frame数据零拷贝
注:目的熟悉FFmpeg常用结构体和函数接口
(四)FFmpeg过滤器
-
FFmpeg过滤chain框架
-
音频过滤器框架
-
视频过滤器框架
-
多路音频混音amix
-
视频水印watermark
-
视频区域裁剪和翻转
-
视频添加logo
(五)FFmpeg音视频解复用+解码
-
解复用流程
-
音频解码流程
-
视频解码流程
-
FLV封装格式分析
-
MP4封装格式分析
-
FLV和MP4 seek有什么区别
-
为什么FLV格式能用于直播
-
为什么MP4不能用于直播
-
MP4能否用来做点播
-
AAC ADTS分析
-
H264 NALU分析
-
AVIO内存输入模式
-
音频重采样实战
-
重采样后的数据播放时长是否一致
-
重采样后PTS如何表示
-
视频解码后YUV内存对齐问题
-
音频解码后PCM排列格式问题
-
硬件解码dxva2/nvdec/cuvid/qSV
-
硬件gpu数据转移到cpu
-
H265解码
注: FFmpeg API学习:视频解复用->解码->编码->复用合成视频
(六)ffplay播放器
-
掌握ffplay.c的意义
-
ffplay框架分析
-
解复用线程
-
音频解码线程
-
视频解码线程
-
声音输出回调
-
画面渲染时间间隔
-
音频重采样
-
画面尺寸格式变换
-
音频、视频、外部时钟同步区别
-
以视频为基准时音频重采样补偿
-
音量静音、调节大小的本质
-
音视频packet队列大小限制
-
音视频packet队列线程安全
-
音视频frame队列大小限制
-
音视频frame队列线程安全
-
暂停、播放实现机制
-
seek播放导致的画面卡住问题.
-
seek播放数据队列、同步时钟处理
-
如何做到逐帧播放
-
播放器退出的流程要点
注: ffplay.c是ffplay命 令的源码,掌握fplay对于我们自己开发播放器有事半功倍的效果
(七)FFmpeg音视频编码+复用合成视频
-
AAC音频编码
-
H264视频编码
-
PCM+ YUV复用合成MP4/FLV
-
H264编码原理
-
IDR帧和帧区别
-
动态修改编码码率
-
GOP间隔参考值
-
复用合成MP4音视频不同步问题
-
编码、复用timebase问题
-
MP4合成IOS不能播放问题
-
重采样后PTS如何表示
-
视频编码YUV内存对齐问题
-
硬件编码dxva2/nvenc/cuvid/qsv
-
H265编码原理
-
H264、H265编码互转
(八)ffmpeg多媒体
-
视频处理工具
-
掌握fmpeg.c的意义
-
ffmpeg框架分析
-
音视频编码
-
封装格式转换
-
提取音频
-
提取视频.
-
logo叠加
-
音视频文件拼接
-
filter机制
-
命令行解析流程
-
MP4转FLV不重新编码逻辑
-
MP4转FLV重新编码逻辑
-
MP4转FLV scale
注: ffmpeg.c是ffmpeg命令的源码,掌握ffmpeg.c的大体框架对于我们要实现一些不知道怎么编写代码的功能(用ffmepg命令行可以但不知道怎么调用ffmpeg api时可以参考ffmepg.c的逻辑)有极大的帮助,比如要裁剪视频长度。
课程视频、文档领取地址:https://disk.0voice.com/p/nvhttps://disk.0voice.com/p/nv
(九)FFmpeg+ QT播放器
-
常见开源播放器分析
-
CUVID/D3D11VA硬解
-
界面和播放核心分离框架分析
-
音量频谱展示
-
播放器模块划分
-
音频均衡器
-
解复用模块
-
画面旋转、翻转
-
音视频解码
-
画面亮度、饱和度调节
-
播放器控制
-
画面4:3 16:9切换
-
音视频同步
-
码流信息分析
3、流媒体客户端
(一)RTMP推拉流项目实战
-
RTMP协议分析
-
wireshark抓包分析
-
H264 RTMP封装
-
AAC RTMP封装
-
RTMP拉流实战
-
H264 RTMP解析
-
AAC RTMP解析
-
RTMP推流实战
-
0没有MetaData能否播放
-
RTMP推流是否会导致延迟
-
RTMP推流如何动态调整码率
-
RTMP推流如何动态调整帧率
-
RTMP拉流是否会导致延迟
-
如何检测RTMP拉流延迟
-
如何解决RTMP播放延迟
-
ffplay. vlc能否用来测试播放延迟
-
ffplay、vlc能否用来测试播放延迟
-
RTMP拉流播放变速策略设置
(二)RTSP流媒体实战
-
RTSP协议分析
-
RTP协议分析
-
H264 RTP封装
-
H264 RTP解析
-
AAC RTP封装
-
AAC RTP解析
-
RTCP协议分析
-
RTSP流媒体服务器搭建
-
RTSP推流实战
-
RTSP拉流实战
-
wireshark抓包分析
-
RTP头部序号的作用
-
RTCP的NTP和RTP的TS的区别
-
RTP头部序号的作用
-
RTCP的NTP和RTP的TS的区别
-
RTSP交互过程
-
花屏可能的原因
-
SPS PPS如何发送
-
SDP封装音视频信息
(三)HLS拉流分析
-
HLS协议分析
-
HLS拉流实战
-
HTTP协议分析
-
FFmpeg HLS源码分析
-
TS格式分析
-
HLS多码率机制
-
m3u8文件解析
-
如何解决HL S延迟高的问题
-
wireshark抓包分析
注:理解HL .S的拉流机制,有助于我们解决HL .S播放延迟较高的问题
4、流媒体服务器
(一)SRS源码剖析协程
-
整体框架分析
-
连接和协程的关系
-
RTMP推流分析
-
如何更快速掌握SRS源码
-
RTMP拉流分析
-
流媒体服务器是否导致延迟
-
HLS拉流分析
-
如何降低流媒体服务器的延迟
-
HTTP-FLV拉流分析
-
怎么获取流媒体服务器推流信息
-
FFmpeg转码分析
-
怎么获取流媒体服务器拉流信息
-
首屏秒开技术分析
-
首屏秒开能降低延迟吗
-
forward集群源码分析
-
推流->服务器转发->拉流延迟分析
-
edge集群源码分析
-
负载均衡部署方式
注:对于SRS流媒体服务器,我们长期更新,从3.0->4.0->5.0
(二)ZLMediaKit源码剖析
-
整体框架分析
-
数据转发模型
-
线程模块划分
-
SDP解析
-
RTSP推流连接处理
-
RTP H264解析
-
RTSP拉流连接处理
-
RTP AAC解析
注: ZLMediaKit主要讲解RTSP流媒体服务器相关的模块,其他模块RTMP/HLS等参考SRS。
5、WebRTC项目实战
(一)WebRTC中级开发手把手写代码
-
WebRTC通话原理分析
-
WebRTC开发环境搭建
-
coturn最佳搭建方法
-
如何采集音视频数据
-
一对一通话时序分析
-
信令服务器设计
-
SDP分析
-
Candidate类型分析
-
Web-对一通话
-
Web和Android通话
-
AppRTC快速演示
-
如何设置编码器优先级
-
如何限制最大码率
-
信令服务器的本质是什么
-
Web和Android的SDP差异
-
A要和B通话, A怎么知道B的存在
-
新增C++、IOS客户端两大版本
注:学习WebRTC建议从web端入手,可以直接调用js接口(千万别刚接触WebRTC就忙着去编译WebRTC源码) , 对WebRTC通话流程有清晰的理解再考虑其他端。
(二)WebRTC高级开发-SRS 4.0/5.0源码分析
-
RTMP转发WebRTC逻辑
-
WebRTC转发RTMP逻辑
-
WebRTC音视频一对一通话
-
WebRTC多人通话
-
WebRTC SFU模型分析
-
SRTP分析
-
RTCP分析
-
SDP分析
-
NACK分析
-
turn分析
-
stun分析
-
拥塞控制算法
-
FEC
-
jitter buffer
(三)WebRTC高级开发-MESH模型多人通话
-
自定义摄像头分辨率
-
码率限制
-
调整编码器顺序
-
Mesh模型多方通话分析
-
多人通话信令服务器开发
-
动态分配stun/turn服务器
-
Web客户端源码
-
Android客户端源码
(四)WebRTC高级开发-Janus SFU模型多人通话
-
Janus框架分析
-
Janus信令设计
-
基于Janus实现会议系统
-
Janus Web客户端源码分析
-
Janus Android客户端源码分析
-
Janus Windows客户端源码分析
-
基于Full ICE的部署
-
基于Lite ICE的部署
-
Full ICE和Lite ICE的区别
-
发布订阅模型
6、Android NDK
(一)Android NDK开发基础
-
So库适配总结
-
GDB调试技巧
-
Makefile_ I程组织
-
CMake工程组织
-
生成指定CPU平台的so库
-
JNI基础和接口生成
-
JNI Native层构建Java对象
-
JNI异常处理
(二)Android FFmpeg编译和应用
-
编译x264
-
编译x265
-
编译mp3
-
编译fdk-aac
-
编译FFmpeg
-
使用ffmpeg实现mp4转格式
-
使用FFmpeg开发播放器
(三)Android RTMP推拉流
-
RTMP推流协议实现
-
RTMP拉流协议实现
-
RTMP拉流音视频同步
-
MediaCodec硬件编码
-
MediaCodec硬件解码
-
OpenSL ES播放音频数据
-
MediaCodec硬件解码
-
OpenGL ES Shader显示视频
(四)Android Ijkplayer源码分析
-
编译jkplayer和实践
-
项目框架分析
-
播放状态转换
-
拉流分析
-
解码分析
-
音频播放流程
-
视频渲染流程
-
OpenSL ES播放音频数据
-
MediaCodec硬件解码
-
OpenGL ES Shader显示视
-
变速播放实现原理
-
低延迟播放实现
-
缓存队列设计机制分析
7、IOS音视频开发
(一)IOS FFmpeg6.0编译和应用
-
xcode调试FFmpeg
-
IOS调用FFmpeg
-
QT调试FFmpeg
(二)IOS FFmpeg RTMP推拉流
-
AVFoundation视频采集
-
Metal视频渲染
-
Audio Unit音频采集
-
Audio Unit音频播放
-
FFmpeg推流
-
FFmpeg拉流
-
直播延迟和解决方法
(三)VideoToolbox硬件编解码
-
VideoToolbox框架的流程
-
硬件编解码步骤
-
CVPixelBuffer解析
-
如何获取SPS/PPS信息
-
判断是否关键帧
-
编码参数优化
(四)IOS jkplayer编译和应用
-
本地视频播放
-
RTMP拉流播放
-
HTTP点播
-
音频播放流程
-
视频渲染流程
(五)IOS ijkplayer编译和应用
-
基于Mesh一对一通话
-
基于SFU多人通话
8、音视频项目实战
(一)0voice播放器
支持播放/暂停,上一/下一视频,变速播放,文件seek播放进度显示,截屏,调节音量,播放列表,显示缓存时间实现直播低延迟播放
(二)0voice录制推流软件
支持屏幕+麦克风RTMP直播,支持本地文件推送;支持录制保存到本地,支持录制预览功能,支持添加图片水印功能;支持文字水印功能,支持屏幕+摄像头同时捕获,支持降噪功能。
(三)0voice低延迟拉流直播
实现500毫秒~1秒的低延迟直播
帮助大家全面掌握FFmpeg的核心技术点:
-
本课程为音视频全栈开发技术提升体系
-
原理,源码分析,案例分析,项目实战全包含
-
详细技术点参考音视频第6代课程大纲
-
全新升级FFmpeg6.0-全网唯一
9、适宜工程师人群(本课程涵盖最主流的音视频全栈开发技术,适合各类技术人员)
-
从事音视频岗位开发,但没有时间系统学习的在职工程师
-
从事嵌入式方向开发,想转入音视频开发的在职工程师
-
从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
-
从事Android/IOS移动开发,想往音视频方向发展的在职工程师
-
从事C/C+ +后台开发,想往流媒体服务器方向发展的在职工程师
-
自己研究学习速度较慢,不能系统构建音视频知识体系的开发人员
-
计算机相关专业想进入大厂的在校生(本科及以上学历,有c/C+ +基础)