音视频涉及语音信号处理、数字图像处理、信息论、封装格式、编解码、流媒体协议、网络传输、渲染、算法等。在现实生活中,音视频扮演着越来越重要的角色,比如视频会议、直播、短视频、播放器、语音聊天等。因此,从事音视频是一件比较有意义的事情,机遇与挑战并存。本文将从几个维度进行介绍:音视频开发基础、音视频进阶成长、音视频工作方向、音视频开源库、流媒体协议与书籍。
目录
一、音视频开发基础
1、音频基础
2、通用基础
3、视频基础
二、音视频进阶成长
1、音频进阶
2、通用进阶
3、视频进阶
三、音视频工作方向
四、音视频开源库
1、多媒体处理
2、流媒体传输
3、播放器
4、编解码
5、音频处理
6、流媒体服务器
7、音视频分析
8、视频渲染
五、流媒体协议
1、流媒体传输协议
2、流媒体应用协议
3、WebRTC信令协议
4、音视频编码协议
5、音视频封装格式
六、音视频书籍
1、音频类
2、视频类
3、语言类
一、音视频开发基础
1、音频基础
音频包括:采样率、声道数与声道布局、采样格式、PCM与波形图、音质、音频编码格式、音频封装格式。更详细的音视频概念,
2、通用基础
通用包括:编码原理、C/C++基础、视频分析工具、FFmpeg常用命令、平台相关多媒体API。
3、视频基础
视频包括:帧率、码率、分辨率、像素格式、色彩空间、I帧P帧B帧、DTS与PTS、YUV与RGB、位深与色域、视频编码格式、视频封装格式。具体如下图所示:
二、音视频进阶成长
1、音频进阶
音视频进阶成长也是分为:音频、通用、视频。其中音频包括:录音、麦克风采集、音频编解码、音频播放、音频分析、音效。
2、通用进阶
通用包括:熟悉流媒体协议、音视频传输、音视频同步播放、平台相关多媒体运用、FFmpeg相关API运用、OpenGL渲染、音视频编辑。
3、视频进阶
视频包括:录像、摄像头采集、视频编解码、视频播放、滤镜特效、视频转码。在熟悉音视频基础上深入学习,如下图所示:
三、音视频工作方向
相信很多伙伴在音视频工作方向这个十字路口,有过徘徊、迷茫。个人建议是选择自己喜欢的方向,如果还没找到自己所爱,努力去寻找,借用雷总的话“不要害怕做出选择”。一旦做出选择,就要把工作当做事业,不仅仅是为了工作而工作,借用乔布斯的话“Do what you love, love what you do”。把音视频工作方向总结为9个(可能不够准确,仅是个人观点):直播、传输、算法、视频播放器、流媒体后端、短视频、音频播放、视频编辑、图像处理。具体方向如下:
四、音视频开源库
1、多媒体处理
多媒体处理包括:FFmpeg、libav、Gstreamer。其中FFmpeg是目前最常用的音视频处理库,包括封装格式、编解码、滤镜、图像缩放、音频重采样等模块。
2、流媒体传输
流媒体传输包括WebRTC、live555。其中WebRTC是目前最常用的RTC库,比较著名的模块有JitterBuffer、NetEQ、pacer、网络带宽估计。
3、播放器
播放器包括:ijkplayer、exoplayer、vlc。其中ijkplayer是B站开源的跨平台播放器,exoplayer是Google开源的Android平台播放器,vlc属于VideoLAN非盈利组织所开源。
4、编解码
常用的编解码包括:aac、mp3、opus、vp9、x264、av1。其中aac一般用于点播、短视频,opus用于RTC直播。vp9是Google开源的编码器,VideoLAN有提供x264编码器,av1是AOMedia(开放媒体联盟)开源的新一代视频编码器。
5、音频处理
音频处理的开源库包括:sox、soundtouch、speex。其中sox称为音频处理界的瑞士军刀,可以做各种音效、提供各种滤波器。soundtouch用于变速变调、变速不变调。speex严格意义上讲,它是一个编码器,但是它有丰富的音频处理模块:PLC(丢包隐藏)、VAD(静音检测)、DTX(非连续传输)、AEC(回声消除)、NS(噪声抑制)。
6、流媒体服务器
流媒体服务器主流的有:SRS、janus。其中SRS是一款简单高效的视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT。而janus是MeetEcho公司开源的基于WebRTC的流媒体服务器,严格意义上讲它是一个网关。
7、音视频分析
做音视频开发绕不开分析工具,掌握使用分析工具至关重要。常用的音视频分析工具包括但不限于:Mp4Parser、VideoEye、Audacity。其中Mp4Parser用于分析mp4格式及其结构。VideoEye是雷神开源的基于Windows平台分析视频码流工具(在此致敬雷神的开源精神)。Audacity是一款开源的音频编辑器,可用于添加各种音效、分析音频波形图。
8、视频渲染
视频渲染相关开源库有:GPUImage、Grafika、LearnOpenGL。其中GPUImage可用于添加各种滤镜特效。Grafika是Google一位工程师开源的基于Android平台渲染示例库。LearnOpenGL主要是配套其网站的学习OpenGL教程。
相关的开源网站与地址如下:
FFmpeg | |
WebRTC | |
RTC社区 | |
RFC协议 | |
OpenGL | |
GPUImage | |
VideoLan | |
AOMedia | |
xiph.org | |
VP9 | |
soundtouch | |
sox |
五、流媒体协议
1、流媒体传输协议
常见的流媒体传输协议有:RTP、SRTP、RTMP、RTSP、RTCP等。其中RTP(Real-time Transport Protocol)是实时传输协议,而SRTP是安全实时传输协议,即在RTP基础上加密传输,防止音视频数据被窃取。RTMP(Real Time Messaging Protocol)是Adobe开源的实时消息传输协议,基于TCP,基本协议包括:RTMPE、RTMPS、RTMPT。RTSP(Real Time Streaming Protocol)是实时流传输协议,字段包括:OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN等。RTCP(RTP Control Protocol)是RTP传输控制协议,用于统计丢包、发送延时。
2、流媒体应用协议
流媒体应用协议有:HLS、DASH。其中HLS是Apple公司开源的流媒体传输应用协议,同时涉及m3u8协议和ts流。而DASH是Google在广泛运用的流媒体协议,使用fmp4切片,支持自适应码率、多码率的无缝切换。
3、WebRTC信令协议
WebRTC信令协议有:SDP、ICE、NAT、STUN、TURN。当然,WebRTC的网络传输协议也有用到上面提及的流媒体传输协议。
4、音视频编码协议
常用的音频编码协议有:MP3、AAC、OPUS、FLAC、AC3、EAC3、AMR_NB、PCM_S16LE。视频编码协议有:H264、HEVC、VP9、MPEG4、AV1等。相关的音视频编解码协议,
5、音视频封装格式
常用的视频封装格式有:mp4、mov、mkv、webm、flv、avi、ts、mpg、wmv等。常用的音频封装格式有:mp3、m4a、flac、ogg、wav、wma、amr等。封装格式是多媒体容器,包含多媒体信息、音视频码流。其中多媒体信息包括:时长、分辨率、帧率、码率、采样率、声道数等等,即上面提及的音视频开发基础的相关概念。而音视频码流是原始数据经过编码压缩得到的若干帧组成的stream,字幕码流一般是由特定格式的文本或位图组成。关于封装格式,
以上涉及的协议具体如下:
流媒体传输 | RTP(rfc3550) |
SRTP(rfc3711) | |
RTMP(adobe) | |
RTSP(rfc7826) | |
RTCP(rfc5506) | |
流媒体应用 | HLS(rfc8216) |
DASH(iso23009) | |
WebRTC协议 | SDP(rfc3264) |
ICE(rfc5245) | |
NAT | |
TURN | |
STUN | |
编码协议 | aac、mp3、opus、ac3等 |
h264、h265、vp9、av1等 | |
封装格式 | mp3、m4a、ogg、wav等 |
mp4、mkv、flv、ts、avi等 |
六、音视频书籍
1、音频类
音频书籍包括:The music of theory、DSP noise reduction、Audio Signal Process and Coding、数字音频原理及应用、音频信号处理与编码等。
2、视频类
视频书籍包括:数字图像与视频处理、音视频开发进阶指南、视频编码全角度详解、新一代视频压缩编码标准H.264/AVC、新一代高效视频编码H.265/HEVC、数字图像处理(冈萨雷斯版)、多媒体信号编码与传输、OpenGL编程指南、WebRTC native开发实战、FFmpeg从入门到精通、在线视频技术精要等。
3、语言类
结束语
希望各位朋友在音视频道路上不断成长,怀着一颗热爱技术的心,延迟满足感,coding自己的梦想。既然选择远方,就得风雨兼程,不畏路途险阻,英雄不问出处,努力终有回报。