以下内容是对网上多个博主以及音视频大佬发布的内容进行的总结。
1.音视频开发
1.1音视频开发是做什么的
音视频开发就是将我们摄像机、麦克风采集到的画面(视频像素数据,YUV格式)和声音(音频采用数据,PCM格式),通过编码算法进行压缩后(视频压缩为H.264\MPEG4,音频压AAC/MP3),再进行封装为固定格式(FLV,MP4,AVI),通过网络传输到用户端(rtmp,RTSP),在用户端对封装的数据(FLV,MP4,AVI)进行解封为音频数据AAC/MP3和视频数H.264\MPEG4,再通过解码算法恢复为采集到的格式(PCM,YUV),再通过音频和视频的同步,交给视频驱动(显卡->显示器)和音频驱动(扬声器)后就可以听到了。
说白了,音视频开发,就是要掌握图像、音频、视频的基础知识,并且学会如何对它们进行采集、处理、传输、渲染等一系列的开发和应用。
音视频开发主要有以下步骤:
采集:数据从哪里来(摄像头、麦克风)
处理:数据怎么加工(视频裁剪、缩放、旋转、叠加,音频充采样、去噪、回声消除、混音),编解码
传输:数据怎么共享,直播实时音视频
渲染:数据怎么展现,播放器
1.2音视频开发行业的现状与前景
开发薪水:在BOOS直聘公开统计中,音视频行业的工资10k-20k占12%,20k-30k占45%,30k-k占35%,35k以上占13%。主要分布在20k-35k之间,想要取得一个不错的薪资,如果只是简简单单开发四大组件是不可能拿到这么高薪资的。音视频开发薪资这么高主要就是因为音视频技术人才非常稀缺,很少有人会完整的音视频开发。
就业机会:就业场景分布广。之前学习了音视频高手课的200多位学员就职于全国各大公司。从事音视频相关产品开发,方向主要是直播,短视频,教育直播,AR,VR,云游戏,视频会议等一些场景,方向上没多少变化,只是应用场景上多了一些包装,毕竟随5G带宽硬件加速,以及人们对视频交互的需求日盛,音视频的使用场景应该会越来越多;
开发前景:随着5G落地,音视频在互联网中的比重越来越高,5G宽带的提速,必然加速整个音视频领域的应用,未来音视频人才缺口达30万,音视频高端领域严重短缺
像前几年,我们70%-80%的应用都是在网络请求、UI界面、文字、图片上;在以后,95%的应用场景主要是来自于计算机视觉领域,计算机视觉领域又是跟音视频相关性非常大的领域。所以,未来音视频开发领域绝对是一个风口,是一片蓝海
音视频开发行业的现状
核心竞争力:音视频是程序界的皇冠,掌握音视频意味着拿到通往未来的船票,不用担心会被其他人替代。因为音视频是有一定门槛的,所以也是与其他人拉开差距的分水岭。
高端人才相当缺乏:BOOS直聘中,北上广深很多年薪50W-70W的音视频开发岗位,常年招不到人,月薪2-3万大多是刚从事音视频的入门级开发者
技术迭代慢:H264编码从1995年成为标准至今一直都在使用,属于比较偏底层的技术,而底层技术几十年都不会有太大的改变。
如果大家再仅仅是停留在简简单单的四大组件、UI、网络这一块,那么可替代性是非常高的,不利于打造自身技术护城河
1.3学习音视频开发所需要的基础知识
计算机基础知识:c/c++语言;计算机系统的底层工作原理;操作系统原理;程序的编译、链接和加载机制;C/C++语言特性背后蕴含的思想,底层工作原理,适用场景,存在什么样的问题;软件设计原则和设计模式;数据结构和算法;多线程并发编程原理;网络编程;跨平台;操作系统API;软件调试
音视频的一些基础原理:视频、音频的基础知识(码率、帧率、颜色空间、声道、刷新率、画质);音视频编解码技术(H.264\MPEG\MP3\AAC);封装格式(avi\flv)
音视频各个步骤需要掌握的知识
采集:音、视频怎么采集(各系统(windows等)采集接口、采集参数的含义以及怎么配置,摄像头、麦克风输出视频像素数据格式)
处理:做哪些处理(美颜、水印、贴纸、滤镜、连麦,混音、降噪、声音特效、自定义处理等),这些手段的原理、以及怎么实现、实现方法、实现的第三方库(视频:OpenGL,OpenCV,libyuv,ffmpeg\音频speexdsp,ffmpeg)、第三方库的原理和使用方法。编解码的原理,编解码采用的第三方库,第三方库的原理和使用方法(视频:x264,OpenH264,ffmpeg,音频libfaac,opus,speex,ffmpeg )
传输:传输分类、传输过程(推流、拉流、)、研究音视频传输的协议(推流RTMP,RSTP;拉流:RTMP,HLS,HDL,RTSP; UDP 的协议RTP/RTCP,QUIC )、协议的工作原理。
渲染:数据怎么展现的(图像视频绘制到视图上、音频输出到扬声器);系统提供了哪些 API 可以绘制一张图片或者一帧 YUV 图像数据的 ?(Windows:DirectDraw, Direct3D, GDI,OpenGL 等Linux: GDI, OpenGL 等Android:ImageView,SurfaceView,TextureView,OpenGL 等iOS: CoreGraphics,OpenGL 等)系统提供了哪些 API 可以播放一个 mp3 或者 pcm 数(Windows:DirectSound 等Linux:ALSA & OSS 等Android:AudioTrack 等iOS: AudioQueue 等)
1.4常见的音视频开源库
Ffmpeg:可以直接使用ffmpeg的命令行实现转码、切片等常见功能
可以基于FFmpeg API封装开发自己的音视频模块
live555:比较完善的RTSP库
x264:比较常用的H.264编码库
Fdkaac:比较常用的AAC编解码库
Librtmp:支持rtmp协议,产品化时需要自己进一步完善
Pjsip:支持sip协议
Webrtc:google开源的webrtc库,有比较好的音/视频引擎,对网络状态的实时评估可以借鉴,回声消除模块也是比较有名的
SDL:比较有名的音视频渲染库
SRS:国内比较知名的RTMP流媒体服务器,支持HLS、HTTP+FLV,4.0版本开始支持WebRTC
OWT:Intel开源的WebRTC套件,支持了WebRTC客户端SDK和分布式的WebRTC MCU服务器
OpenCV:著名的视频算法库
另外,视频的编码和解码可以基于Intel Media SDK和NVIDIA的NVENC来实现(利用硬件编解码)。
1.5相关书籍推荐
《音视频开发进阶指南》--展晓凯
《FFmpeg从入门到精通》
《新一代视频压缩编码标准 H.264/AVC(第二版)》(白皮书,有难度)
《新一代高效视频编码H.265/HEVC:原理、标准与实现》
《WebRTC权威指南(原书第3版)》
《WebRTC技术详解:从0到1构建多人视频会议系统》
1.6实战演练
一阶段:
FFMPEG命令实战
a.命令分类查询;b视频录制命令;c多媒体文件的分解/复用命令;d裁剪与合并命令;e图片/视频互转命令;e直播相关命令;g各种滤镜命令;h音视频文件提取
SDL音视频渲染实战
SDL开发环境搭建;SDL窗口显示;SDL事件处理;SDL线程处理;YUV视频播放实战;PCM声音播放实战
FFMpeg解封装解码实战
FLV封装格式剖析;FLV封装实战;MP4封装格式剖析;MP4解封装实战;AAC ADTS分析;音频解码实战;H.264 NALU分析;视频解码实战;
FFMPEG编码封装实战
视频编码实战;音频编码实战;音视频FLV合成实战;音视频MP4合成实战;MP4转FLV实战;MP4转FLV重编码实战
FFMPEG过滤器实战
FFMPEG过滤器架构分析;音频过滤器实战;视频过滤器实战
播放器实战
播放器框架分析;音频输出模块;视频输出模块;音频解码模块;视频解码实战;音视频同步模块;音视频控制
FFPLAY播放器剖析
a.掌握ffplay.c的意义b.ffplay框架分析c.ffplay数据结构d.ffplay音频输出e.ffplay视频输出f.ffplay音视频同步g.ffplay图像格式转换h.ffplay音频重采样iffplay播放控制
FFMPEG多媒体转换器剖析
a.掌握ffmpeg.c的意义b.ffmpeg框架分析c.转封装流程分析d.转码流程分析e.提取音视频流程分析f.MP4转FLV实战g.FLV转TS实战h.H264转H265实战i.AAC转MP3实战j.H264提取实战k.AAC提取实战
二阶段:
RTMP流媒体实战
a.RTMP框架分析b.RTMP流媒体服务器搭c.RTMP协议详解d.H264封装e.AAC封装f.RTMP推流实战g.RTMP拉流实战h.RTMP抓包分析
HLS流媒体实战
A.HLS框架分析B.HLS流媒体服务器搭建C.HTTP协议分析Dm3u8协议详解E.TS协议解析F.hls拉流实战G.hls抓包分析i.hls多码率机制手
HTTP-FLV流媒体实战
a.HTTP-FLV框架分析b.HTTP-FLV流媒体服务器搭建c.HTTP-FLV拉流实战d.HTTP-FLV抓包分析
SRS流媒体服务器分析
a.整体框架分析b.rtmp拉流分析c.rtmp推流分析d.hls拉流分析e.hls推流分析f.http-flv拉流分析g.http-flv推流分析h.FFmpeg转码分析i.首屏秒开技术分析j.forward集群源码分析k.edge集群源码分析l.负载均衡部署方式
RTSP流媒体实战
a.HTTP-FLV框架分析b.RTP协议分析C.RTCP协议分析d.RTSP流媒体服务器搭建e.RTSP推流实战f.RTSP拉流实战g.wireshark抓包分析h.RTSP流媒体服务器分析
WEBRTC中级实战
a.WebRTC通话原理分析b.WebRTC开发环境搭建c.coturn最佳搭建方法d.如何采集音视频数据e.- -对一通话时序分析f.信令服务器设计g.Web- -对一-通话h.Web和Android通话i.AppRTC快速演示
WEBRTC高级开发
自定义摄像头分辨率b.码率限制C.调整编码器顺序d.Mesh模型多方通话eJanus框架分析f.Janus Web客户端源码分析g.Janus Android客户端源码分析h.基于Janus实现会议系统i.Janus Windows客户端源码分析j.Janus信令设计k.WebRTC源码编译l.拥塞控制算法m.FECnijitter buffer
Janus服务器源码分析
.a源码结构f.sdp分析k.turn分析b.插件机制g.rtp分析c.线程分析h.srtp分析d.信令交互过程i.rtcp分析e.videoroom分析j.stun分析
三阶段
1.7音视频开发的学习计划
(1)音视频系统入门阶段:巩固C/C++知识,学习音视频基础知识(各种编码格式、封装格式)、学习ffmpeg的命令行工具(用时7~10天),了解安卓、windows的一些接口和SDK调用,最后制作一个视频播放器(编解码与封装),对应实战的第一阶段
(2)学习webRTC入门,了解实时互动直播产品学习相关网络协议协议,并了解相关安卓开发。(用时20天),对应实战的二阶段
(3)学习opengl做一些渲染,然后基于安卓完成整个流程。(采集、处理、传输、渲染)
1.8相关知识
Android多媒体原理(第1章 三种方式绘制图片第2章 AudioRecord录制PCM音频第3章 AudioTrack播放PCM音频第4章 Camera视频采集第5章 MediaExtractor MediaMuxer 实现视频的解封装与合成第6章 MediaCodec硬编解流程与实践)、windos多媒体原理
OPENGLES
JNI&NDK( JNI与NDK的学习和使用第18章 JNI - 引用类型、异常处理、函数注册第19章 NDK构建方式 ndk-build与cmake第20章 指针、内存模型、引用第21章 运算符重载、继承、多态、模版第22章 STL 之 容器)
FFMPEG +OPENSL ES实现音频解码和播放、FFMPEG + OPENGLES 边解码边播放视频、VLC