而如今音视频的知识纷繁复杂,自己学习非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验;而音视频从业者基本上有两个层面:一个层面是搞音视频算法,这类人非常少,需要有深的数学能力和算法背景,这类人一般都会选择去大公司,薪水百万是最low的。
还不熟悉的朋友,这里可以先领取一份音视频开发新手学习资料包(入坑不亏)
什么是音视频开发
音视频开发是指涉及音频和视频处理、编解码、传输、存储等方面的软件开发领域。它包括了实时音视频通信、流媒体服务、多媒体应用程序等内容。
在音视频开发中,常见的任务包括音频采集与录制、音频编解码、音频处理与增强(如降噪、消除回声等)、视频采集与录制、视频编解码、图像处理与分析等。此外,还需要关注实时传输和流媒体协议(如RTP/RTCP, RTMP, HLS)的使用,以及存储和播放相关技术。
在这个领域中,开发者通常会使用各种语言和框架来实现不同功能,例如C/C++、Java、Python以及相关库和工具,如FFmpeg, GStreamer, WebRTC等。通过掌握相关技术和工具,可以开发出高质量的音视频应用程序或服务。
音视频开源项目
部分音视频开源项目发布时间,每个开源项目之所以能成功都是经过了开发者长期的时间投入。
- 1.2001年FFmpeg多媒体视频处理开源项目
- 2.2009年WebRTC开源项目发布
- 3.2013年SRS流媒体服务器(Simple-RTMP-Server) 发布版本
- 4.2013年ijkplayer手机播放器发布
- 5.2014年OBS开源项目(支持WebRTC, 早期支持的是RTMP)(GitHub可查最 早时间)
- 6.2015年Janus WebRTC流媒体服务器发布版本
- 7.2015年QMPlay2 PC QT (调用FFmpeg的接口,硬解接口, OpenGL)播放器发布
- 8.2017年ZLMediaKit流媒体服务器发布版本
音视频应用领域
各类活动场景都在不断加深线上开展业务的方式,有人的业务场景基本.上都需要音视频技术。
FFMpeg+SDL实现播放器
- 1、FFMpeg+SDL开发环境搭建
- 2、播放器框架和解复用模块开发
- 3、包队列帧队列模块设计
- 4、解码线程模块实现
- 5、声音输出模块实现
- 6、视频画面渲染
- 7、音视频同步和作业讲解
FFmpeg零基础入门:如何快速入门,需要哪些知识点?
- windows ffmpeg命令行环境搭建
- FFMPEG如何查询命令帮助文档
- ffmpeg音视频处理流程
- ffmpeg命令分类查询
- ffplay播放控制
- ffplay命令选项
- ffplay命令播放媒体
- ffplay简单过滤器
- ffmpeg命令参数说明
- ffmpeg命令提取音视频数据
- ffmpeg命令提取像素格式和PCM数据
- ffmpeg命令转封装
- fmpeg命令裁剪和合并视频
- fmpeg命令图片与视频互转
- ffmpeg命令视频录制
- ffmpeg命令直播
- ffmpeg过滤器-裁剪
- ffmpeg过滤器-文字水印
- ffmpeg过滤器-图片水印
- ffmpeg过滤器-画中画
- ffmpeg过滤器-多宫格
这里给大家推荐零声教育全网独家的【音视频流媒体高级开发】课程体系,通过原理技术+源码分析+案例分析+项目实战,全面解析音视频开发技术:
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的逻辑)有极大的帮助,比如要裁剪视频长度。
(九)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秒的低延迟直播
以上是系统学习课程内容,需要系统学习请扫码添加秋香老师vx:2207032995(备注911)领取专属大额优惠券。
帮助大家全面掌握FFmpeg的核心技术点:
- 本课程为音视频全栈开发技术提升体系
- 原理,源码分析,案例分析,项目实战全包含
- 详细技术点参考音视频第6代课程大纲
- 全新升级FFmpeg6.0-全网唯一
9、适宜工程师人群(本课程涵盖最主流的音视频全栈开发技术,适合各类技术人员)
- 从事音视频岗位开发,但没有时间系统学习的在职工程师
- 从事嵌入式方向开发,想转入音视频开发的在职工程师
- 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
- 从事Android/IOS移动开发,想往音视频方向发展的在职工程师
- 从事C/C+ +后台开发,想往流媒体服务器方向发展的在职工程师
- 自己研究学习速度较慢,不能系统构建音视频知识体系的开发人员
- 计算机相关专业想进入大厂的在校生(本科及以上学历,有c/C+ +基础)
音视频自学难点音视频自学非常困难,网上通俗易懂的难找到。
网上部分资源是对应的开源版本较低,比如雷霄骅(雷神)博客的FFmpeg版本较低
音视频涉及大量的开源库和协议:
- 1、比如ffmpeg的编译,如果不熟悉各种编译报错
- 2、Janus编译涉及各种开源组件编译不通过
- 3.比如WebRTC涉及的RTP、RTCP、SDP、STUN等协议
部分嵌入式音视频的朋友技术面窄, 技术不深入。比如有同学做了2年的音视频驱动, 一帧音频能持续播放多久都不明白。
至于学习效果怎么样?👇
精品文章推荐阅读: