2024年C++音视频开发还能冲吗?

本文探讨了音视频领域的学习难度,强调了FFmpeg和WebRTC在降低研发成本中的作用,以及5G时代对音视频人才的推动。文章介绍了音视频全栈开发的六个阶段,包括基础知识、FFmpeg实战、跨平台技术、编码与解码、流媒体客户端与服务器、WebRTC项目实战以及移动平台开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

音视频的知识纷繁复杂,自己学习非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验;

音视频从业者基本上有两个层面:一个层面是搞音视频算法,这类人非常少,需要有深的数学能力和算法背景。相对来说,学习成本高,一般企业不需要,也养不起。这类人一般都会选择去大公司,薪水百万是最low 的。这些人一般指专注在一个领域上;另一个层面是搞工程,这类人相对较多,他们有扎实的理论基础,很强的技术功底,对音频、视频都非常熟悉。这些人工资要比一般开发高20%左右;即使搞工程的人,学习成本也是非常高的,在音视频领域没呆个3-5年的,一般公司不敢用,因为啥都做不了。这里的关键点是,音视频有各种各样的规范,而且都是字节码,每一位的变化都代表不同的含义,还有大量的原理要理解,这些都非常花时间;

好在现在有ffmpeg,WebRTC 等开源库,大大降低了研发和学习成本。但即使这样,对于一般的开发同学也难如登天。

随着5G时代的到来,音视频慢慢变成人们日常生活中的必须品。所以,现在有大量的公司开始寻找音视频人才,一个稍好点的音视频人才现在可能会有3-4家公司抢着要。因此,对音视频人才的需求也从小众变成了大众,这更多的是大家对未来市场的预期导致的结果。做个不恰当的比喻,3G/4G的出现,促成了移动互联网10年繁荣。而5G的出现,也会促成至少10年音视频行业的繁荣,因为,音视频在5G时代会给用户带来更好,更丰富的用户体验。

所以,做音视频研发的前景是广阔的,道路是曲折的。对于很多早看出音视频前景的同学来说,已经开始通过各种渠道搜集相关的学习资料,及早的投入音视频研发的队伍,这样才能使自己在未来几年可以在职场上更有作为。

音视频自学的难点

  1. 音视频自学非常困难,网上通俗易懂的难找到
  2. 网上部分资源是对应的开源版本较低,比如雷霄骅(雷神)博客的FFmpeg版本较低
  3. 音视频涉及大量的开源库和协议
  4. 比如ffmpeg的编译,如果不熟悉各种编译报错
  5. Janus编译涉及各种开源组件编译不通过
  6. 比如WebRTC涉及的RTP RTCP SDP STUN等协议
  7. 部分嵌入式音视频的朋友技术面窄,技术不深入
  8. 比如有同学做了2年的音视频驱动,一帧音频能持续播放多久都不明白

ffmpeg+sdl播放器项目实战地址https://xxetb.xet.tech/s/13qR6Gicon-default.png?t=N7T8https://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/nvicon-default.png?t=N7T8https://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+ +基础)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值