核心竞争力:音视频是程序界的皇冠,掌握音视频意味着拿到通往未来的船票,不用担心会被其他人替代。因为音视频是有一定门槛的,也是与其他人拉开差距的分水岭。
高端人才相当缺乏:BOOS直聘中,北上广深很多年薪50W-70W的音视频开发岗位,常年招不到人,月薪2-3万大多是刚从事音视频的入门级开发者
技术迭代慢:H264编码从1995年成为标准至今一直都在使用,属于比较偏底层的技术,而底层技术几十年都不会有太大的改变。
音视频运作流程
音视频生产端:音视频的采集 ->预处理-> 编码 -> 封装 ->网络发送
音视频消费端:网络接收 -> 解封装 -> 解码 -> 渲染
1、音视频采集
Android平台上的音频采集一般就三种:
利用android内置的应用程序
使用MediaRecorder进行音频捕获
使用AudioRecord进行音频捕获。
此3种方式的灵活性逐渐增大,相应的所需要做的工作也逐渐增多。
2、预处理
视频数据的预处理一般包括视频图像的滤镜处理、美颜处理、加字幕,绿幕抠图。
音频的预处理一般包括声音的3A算法和变速变调处理,这个在 WebRTC里面有详细的介绍和实现。
3、编码
4、封装
音视频编码后需要将音视频包以某种容器封装起来,这个步骤成为音视频的封装。常见的封装格
5、传输
常见的音视频的网络传输协议有 rtmp http-flv rtsp srt hls rtcudp ,各有优劣,这里不做详细对比。 感兴趣可以百度 google搜索了解。
6、解封装
解封装是上面介绍的封装的逆操作,从音视频的容器中将音频包、视频包分离出来放到各自的队列,等待各自的解码线程去解码渲染视频,播放音频。
7、解码
编码的逆操作,将视频包解码成原始的视频帧,将音频包解码成原始的pcm音频数据。
8、渲染
视频的渲染 windows 平台下可以使用 Direct3D 技术渲染视频,macOS,Android 和 Linux 可以使用OpenGL 、OpenGLES 技术渲染视频。
拓展知识:FFmpeg进阶
要学习音视频,无论是直播还是音视频处理,ffmpeg和webrtc 基本是绕去的,相对webrtc 来说,ffmpeg应用的更广