C++音视频开发前景如何?从入门到就业的完整学习路线
随着5G时代的全面到来,音视频已经成为我们日常生活和工作中不可或缺的一部分。从短视频平台的火爆,到在线教育的兴起,再到远程会议、直播、拍摄剪辑等领域的广泛应用,音视频的应用场景越来越丰富,需求也随之急剧增加。
然而,尽管市场需求如此旺盛,但合格的音视频开发人才却供不应求。这一现状无疑为那些对音视频开发充满热情、渴望在这一领域大展拳脚的人才们提供了前所未有的机遇。
今天,我们就来分享《2024音视频技术发展报告》的精华内容,一起探讨音视频开发的就业前景。
一、音视频就业人员现状
1. 技术人员基本画像
音视频行业从业者主要集中在技术岗位,其画像呈现出如下特点:
性别与年龄:男性占比显著,年龄分布集中于31~40岁,这反映出行业对中生代技术人员的依赖。
地理分布:人才多集中在一线城市如北京、上海、广州,主要得益于这些地区优越的产业环境和技术资源。
教育背景:本科及以上学历占绝大多数,表明行业对高素质人才的需求强烈。
从业经验:超六成从业者具备5年以上工作经验,其中尤以5~9年经验者为主,显示出行业对专业积累的重视。
开发工具使用情况:
- 编程语言:C++和C语言为主流,具备高性能计算能力和硬件贴近性的特点。
- 技术工具:FFmpeg作为音视频领域的首选框架,因其强大的多媒体处理功能而备受欢迎。
2. 公司规模与职位分布
- 公司规模:从业人员多数集中于千人以上的大型企业,行业龙头效应明显。
- 职位分布:高级工程师为主力,此外还包括技术负责人及高管等关键角色,体现出行业对技术领导力的需求。
二、就业与招聘现状
1. 就业稳定性
- 整体就业市场稳定,大部分技术人员在过去24个月内不存在无固定收入现象,但存在个别人员工作变动情况。
2. 薪酬水平
- 大多数技术者薪水达到30万以上,甚至担任公司重要职位者可达百万以上。
3. 招聘趋势
- 知识复杂性高,对人才综合能力要求增加。
- AI与音视频技术双领域人才稀缺。
三、音视频行业产业链分析
1. 产业链分析
音视频行业的生态体系主要分为三部分:
- 上游:基础资源提供商
包括软硬件提供商、音视频编解码和流媒体技术提供商、云计算服务提供商以及网络传输服务提供商。这些企业为音视频行业提供必要的支持和基础设施。
- 中游:音视频解决方案提供商
涵盖SaaS(软件即服务)和PaaS(平台即服务),提供音视频技术的软件平台、应用服务以及平台和工具,帮助开发者快速构建和扩展音视频应用。
- 下游:应用场景
音视频技术的应用场景非常广泛,包括社交娱乐、在线教育、金融、医疗、政企服务、在线零售和企业办公等。
2. 产业链头部企业图示
四、音视频项目
现在市场上音视频工资并不低,但是还是有大量缺口。因为音视频开发涉及的知识体系比较复杂,学习成本高,互联网上关于音视频开发的资料较少,且很多资料存在错误信息,这使得初学者在学习过程中容易遇到困难,导致很多人难以坚持学习。尤其对于缺乏项目经验的校招生来说,短期内靠自己独立学习完成一个音视频项目难度是相当之大。
这里给大家推荐几个音视频项目,项目来自B站程序员老廖(大家可以自行搜索,也可以点击下面的视频地址观看),项目都有视频讲解,还有详细的文档说明和源码。
C++音视频项目推荐(可写简历)-RTMP流媒体服务器-附保姆级音视频学习路线
音视频开发完整学习路线
1.音视频基础
1.1音频基础知识
- 01.如何采集声音-模数转换原理
- 02.为什么高品质音频采样率>=44.1Khz
- 03.什么是PCM
- 04.一个采样点用多少位表示
- 05.采样值用整数还是浮点数表示
- 06.音量大小和采样值大关系
- 07.多少个采样点作为一帧数据
- 08.左右通道的采样数据如何排列
- 09.什么是PCM(脉冲编码调制)
- 10.音频编码原理
1.2 视频基础知识
- 01.RGB彩色原理
- 02.为什么需要YUV格式
- 03.什么是像素
- 04.分辨率、帧率、码率
- 05.YUV数据存储格式区别
- 06.YUV内存对齐问题
- 07.为什么画面显示绿屏
- 08.H264编码原理
- 09.H264IPB帧的关系
1.3 解复用基础知识
- 01.什么是解复用,比如MP4格式
- 02.为什么需要不同的复用格式MP4/FLV/TS
- 03.常见的复用格式MP4/FLV/TS
1.4 FFmpeg开发环境搭建
- O1. Windows、Ubuntu、MAC三大平台
- 02.QT安装
- 03.FFmpeg命令行环境
- 04.FFmpeg API环境
- 05. FFmpeg编译
- 06.vs2019安装(win平台)
1.5 音视频开发常用工具
- 01.MediaInfo,分析视频文件
- 02.VLC播放器,播放测试
- 03.EasyICE,分析TS流
- 04. flvAnalyser,分析FLV
- 05.mp4box,分析mp4
- 06.audacity ,分析音频PCM
- 07.Elecard_streamEye,分析H264
- 08.海康YUVPlayer ,分析YUV
2.FFmpeg实战
2.1 FFmpeg命令
- 01.音频PCM/AAC文件提取
- 02.视频YUV/H264文件提取
- 03.解复用、复用
- 04.音视频录制
- 05.视频裁剪和合并
- 06.图片/视频转换
- 07.直播推流和拉流
- 08.水印/画中画/九宫格滤镜
注:掌握FFmpeg命令的目的:
- 1.快速掌握FFmpeg能做什么;
- 2.加深对音视频的理解。
2.2 SDL跨平台多媒体开发库实战
- 01.SDL环境搭建
- 02.SDL事件处理
- 03.SDL线程处理
- 04.视频YUV画面渲染
- 05.音频PCM声音输出
注:SDL美容Win,Ubuntu、Mac三大平台,主要用于后续项目的画面显示和声音输出
2.3 FFmpeg基石精讲
- 01.FFmpeg框架
- 02.FFmpeg内存引用计数模型
- 03.解复用相关AVFormat XXX等
- 04.编解码相关AVCodec XXX等
- 05.压缩数据AVPacket
- 06.未压缩数据AVFrame
- 07.FFmpeg面向对象思想
- 08.Packet/Frame数据零拷贝
注:目的熟悉FFmpeg常用结构体和函数接口
2.4 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学习:视频解复用->解码->编码-> 复用合成视频
2.5 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编码互转
2.6 FFmpeg过滤器
- 01.FFmpeg过滤chain框架
- 02.音频过滤器框架
- 03.视频过滤器框架
- 04.多路音频混音amix
- 05.视频水印watermark
- 06.视频区域裁剪和翻转
- 07.视频添加logo
注:filter在视频剪辑领域应用广泛。
2.7 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命令的源码,b站播放器也是基于这个源码二次开发。
2.8 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的目的:遇到命令行会但不会写代码时可以debug ffmpeg命令行跟踪学习
2.9 FFmpeg+QT播放器(自研项目实战)
- 01.播放器讲解
- 02.播放器框架分析
- 03.播放器模块划分
- 04.解复用模块
- 05.音视频解码
- 06.播放器控制
- 07.音视频同步
- 08.dxva2硬解
- 09.音量频谱展示
- 10.音频均衡器
- 11.画面旋转、翻转
- 12.画面亮度、饱和度调节
- 13.画面4:3 16:9切换
- 14.码流信息分析
注:该项目难度较大:
- 1.手把手实现大部分功能;
- 2.少部分功能老师提供技术支持。
2.10 OBS二次开发-录制推流项目(自研项目实战)
- 01.OBS vs2019+QT5.15.2编译
- 02.音频配置和初始化分析
- 03.音频线程模块采集和编码分析
- 04.视频配置和初始化分析
- 05.视频线程模块采集和编码分析
- 06.OBS初始化过程分析
- 07.录制流程分析
- 08.麦克风采集分析
- 09.桌面采集分析
- 10.X264编码分析
- 11.系统声音+麦克风混音
- 12.推流模块分析
注:该项目难度较大:
- 1.供深入推流项目的学员参考;
- 2.提供编译视频以及基本应用的视频。
3.流媒体客户端
3.1 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拉流播放变速策略设置
- 18.音频降噪
- 19.本地保存
注:RTMP推拉流流媒体必学项目。
3.2 HLS拉流分析
- 01.HLS协议分析
- 02.HTTP协议分析
- 03.TS格式分析
- 04.m3u8文件解析
- 05.wireshark抓包分析
- 06.HLS拉流实战
- 07.FFmpeg HLS源码分析
- 08.HLS多码率机制
- 09.如何解决HLS延迟高的问题
注:理解HLS的拉流机制,有助解决HLS播放延迟较高的问题
3.3 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也有应用。
4.流媒体服务器
4.1 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。
4.2 ZLMediaKit源码剖析
- 01.整体框架分析
- 02.线程模块划分
- 03.RTSP推流连接处理
- 04.RTSP拉流连接处理
- 05.数据转发模型
- 06.SDP解析
- 07.RTP H264解析
- 08.RTP AAC解析
注:ZLMediaKiti讲解RTSP,其他模块RTMP/HLS等参考SRS。
5.WebRTC项目实战
5.1 WebRTC中级一对一音视频通话(自研项目实战)
- 01.WebRTC通话原理分析
- 02.WebRTC开发环境搭建
- 03.cotum最佳搭建方法
- 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建议:
- 1.从web端入手,可以直接调用js接口;
- 2.对WebRTC通话流程有清晰的理解再考虑其他端。
5.2 WebRTC高级-MESH模型多人通话(自研项目实战)
- 01.自定义摄像头分辨率
- 02.码率限制
- 03.调整编码器顺序
- 04.Mesh模型多方通话分析
- 05.多人通话信令服务器开发
- 06.动态分配stun/turn服务器
- 07.Web客户端源码
- 08.Android客户端源码
5.3 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服务器,不少企业基于该开源项目做二次开发,比如学霸君。
5.4 WebRTC高级开发-SRS 4.0/5.0源码分析
- 01.RTMP转发WebRTC逻辑
- 02.WebRTC转发RTMP逻辑
- 03.WebRTC音视频一对一通话
- 04.WebRTC多人通话
- 05.WebRTC SFU模型分析
- 06.SRTP分析
- 07.RTCP分析
- 08.SDP分析
- 09.NACK分析
- 10.stun分析
注:SRS著名的流媒体服务器,社区非常活跃。
6.Android NDK开发
6.1 Android NDK开发基础
- 01.So库适配总结
- 02.GDB调试技巧
- 03.Makefile工程组织
- 04.CMake工程组织
- 05.生成指定CPU平台的so库
- 06.JNI基础和接口生成
- 07.JNI Native层构建 Java对象
- 08.JNI异常处理
6.2 Android FFmpeg编译和应用
- 01.编译x264
- 02.编译x265
- 03.编译mp3
- 04.编译fdk-aac
- 05.编译FFmpeg
- 06.使用ffmpeg实现mp4转格式
- 07.使用FFmpeq开发播放器
6.3 Android RTMP推拉流(自研项目实战)
- 01.RTMP推流协议实现
- 02.RTMP拉流协议实现
- 03.RTMP拉流音视频同步
- 04.MediaCodec硬件编码
- 05.MediaCodec硬件解码
- 06. OpenSL ES播放音频数据
- 08.OpenGL ES Shader显示视频
6.4 Android Ijkplayer源码分析(开源项目实战)
- 01.编译ijkplayer和实践
- 02.项目框架分析
- 03.播放状态转换
- 04.拉流分析
- 05.解码分析
- 06.音频播放流程
- 07.视频渲染流程
- 08.OpenSL ES播放音频数据
- 09.MediaCodec硬件解码
- 10.OpenGL ES Shader显示视频
- 11.变速播放实现原理
- 12.低延迟播放实现
- 13.缓存队列设计机制分析
7.IOS音视频开发
7.1 FFmpeg 6.0 MAC编译
- 01.xcode调试FFmpeg
- 02.QT调试FFmpeg,通用的FFmpeg知识学习在Mac平台
- 03.IOS调用FFmpeg
7.2 IOS FFmpeg RTMP推拉流
- 01.AVFoundation视频采集
- 02.Metal视频渲染
- 03.Audio Unit 音频采集
- 04.Audio Unit 音频播放
- 05.FFmpeg推流
- 0.6 FFmpeg拉流
- 07.直播延迟和解决方法
7.3 Videooolbox硬件编解码
- 01.VideoToolbox框架的流程
- 02.硬件编解码步骤
- 03.CVPixelBuffer解析
- 04.如何获取SPS/PPS信息
- 05.判断是否关键帧
- 06.编码参数优化
7.4 IOS ijkplayer编译和应用
- 01.本地视频播放
- 02.RTMP拉流播放
- 03.HTTP点播
- 04.音频播放流程
- 05.视频渲染流程
7.5 IOS WebRTC音视频通话
- 01.一对一通话
- 02.多人通话