0


音视频开发成长之路与音视频知识总结

音视频涉及语音信号处理、数字图像处理、信息论、封装格式、编解码、流媒体协议、网络传输、渲染、算法等。在现实生活中,音视频扮演着越来越重要的角色,比如视频会议、直播、短视频、播放器、语音聊天等。因此,从事音视频是一件比较有意义的事情,机遇与挑战并存。本文将从几个维度进行介绍:音视频开发基础、音视频进阶成长、音视频工作方向、音视频开源库、流媒体协议与书籍。

一、音视频开发基础

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教程。

相关的开源网站与地址如下:
FFmpeghttps://ffmpeg.org/WebRTChttps://webrtc.org.cn/RTC社区https://rtcdeveloper.agora.io/RFC协议https://www.rfc-editor.org/rfc/OpenGLhttps://learnopengl-cn.github.io/GPUImagehttps://github.com/BradLarson/GPUImageVideoLanhttps://www.videolan.org/projects/AOMediahttps://aomedia.org/xiph.orghttps://gitlab.xiph.org/VP9https://www.encoding.com/vp9/soundtouchhttp://soundtouch.surina.net/soxhttp://sox.sourceforge.net/

五、流媒体协议

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)NATTURNSTUN编码协议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、语言类

关于C/C++相关书籍包括:C语言程序设计、C++编程思想、C++ Primmer Plus、C++程序设计语言、Effective C++。另外推荐的是《程序员的自我修养》。相关书本可参考以前写的博客:那些年曾经看过的书。

C和C++标准文档可以查看:cppreference网站。C语言包括C89、C95、C99、C11、C17、C23,C++语言包括C++98、C++11、C++14、C17、C20、C23。学习API文档,可以快速掌握C/C++语言有哪些头文件,支持哪些库,不同版本的差异。

结束语

希望各位朋友在音视频道路上不断成长,怀着一颗热爱技术的心,延迟满足感,coding自己的梦想。既然选择远方,就得风雨兼程,不畏路途险阻,英雄不问出处,努力终有回报。

视频教程:一起学习音视频​​​​​​​

在Github音视频交流与查看源码:FFmpegAndroid​​​​​​​


本文转载自: https://blog.csdn.net/u011686167/article/details/122464692
版权归原作者 徐福记456 所有, 如有侵权,请联系我们删除。

“音视频开发成长之路与音视频知识总结”的评论:

还没有评论