音视频开发风潮 | 聊聊为啥从事音视频开发

发布于:2022-11-01 ⋅ 阅读:(432) ⋅ 点赞:(0)

音视频开发风潮

聊聊为啥从事音视频技术,未来会很赚钱

  • 核心竞争力:音视频是程序界的皇冠,掌握音视频意味着拿到通往未来的船票,不用担心会被其他人替代。因为音视频是有一定门槛的,所以也是与其他人拉开差距的分水岭。
  • 高端人才相当缺乏:BOOS直聘中,北上广深很多年薪50W-70W的音视频开发岗位,常年招不到人,月薪2-3万大多是刚从事音视频的入门级开发者
  • 技术迭代慢:H264编码从1995年成为标准至今一直都在使用,属于比较偏底层的技术,而底层技术几十年都不会有太大的改变。

音视频运作流程

  • 音视频生产端: 音视频的采集 ->预处理-> 编码 -> 封装 -> 网络发送
  • 音视频消费端: 网络接收 -> 解封装 -> 解码 -> 渲染

1、音视频采集

Android平台上的音频采集一般就三种:

  • 利用android内置的应用程序
  • 使用MediaRecorder进行音频捕获
  • 使用AudioRecord进行音频捕获。

此3种方式的灵活性逐渐增大,相应的所需要做的工作也逐渐增多。

2、预处理

视频数据的预处理一般包括视频图像的滤镜处理、美颜处理、加字幕,绿幕抠图

音频的预处理一般包括声音的3A算法和变速变调处理,这个在 WebRTC里面有详细的介绍和实现。

  • AGC:自动增益补偿]功能(Automatic Gain Control)
  • ANS:背景噪音抑制功能](Automatic Noise Suppression)
  • AEC:回声消除器](Acoustic Echo Canceller)

3、编码

音频的编码标准:

  • AAC
  • Opus
  • mp3

视频的编码标准:

  • H264
  • H265
  • VP8
  • VP9
  • AV1

以我目前的工作经验最常用的视频编码是 h264 音频编码是 AAC 编码。

4、封装

音视频编码后需要将音视频包以某种容器封装起来,这个步骤成为音视频的封装。常见的封装格式

  • flv
  • mp4
  • ts
  • rtp

ffmepg支持非常丰富的媒体封装格式。查看 ffmepg 支持的封装格式命令如下

ffmpeg -muxers

5、传输

常见的音视频的网络传输协议有 rtmp http-flv rtsp srt hls rtc udp ,各有优劣,这里不做详细对比。 感兴趣可以百度 google搜索了解。

6、解封装

解封装是上面介绍的封装的逆操作,从音视频的容器中将音频包、视频包分离出来放到各自的队列,等待各自的解码线程去解码渲染视频,播放音频。

7、解码

编码的逆操作,将视频包解码成原始的视频帧,将音频包解码成原始的pcm音频数据。

8、渲染

视频的渲染 windows 平台下可以使用 Direct3D 技术渲染视频,macOS,Android 和 Linux 可以使用 OpenGL 、OpenGLES 技术渲染视频。

拓展知识:FFmpeg进阶

要学习音视频,无论是直播还是音视频处理,ffmpeg和webrtc 基本是绕不过去的,相对webrtc 来说,ffmpeg 应用的更广

音视频自学的难点

音视频自学非常困难,网上通俗易懂的难找到

网上部分资源是对应的开源版本较低,且知识点零散

音视频涉及大量的开源库和协议

◆ 比如 ffmpeg 的编译,如果不熟悉各种编译报错
◆ Janus 编译涉及各种开源组件编译不通过
◆ 比如 WebRTC 涉及的 RTP RTCP SDP STUN 等协议

部分嵌入式音视频的朋友技术面窄,技术不深入

◆ 比如有同学做了 2 年的音视频驱动,一帧音频能持续播放多久都不明白

这里给大家推荐一套学习路线,并附有相关《音视频开发核心知识点及源码解析笔记》,相信可以给大家提供一些帮助,有需要的朋友们也可以拿去查漏补缺。

高级音视频开发学习路线

FFmpeg 编译

H264 编码基础

JNI 编程

文章篇幅有限,文档内容就不一一展示了;文中所有资料都是免费分享给大家的;可以私信发送**“脑图”“音视频”** 即可 免费领取

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下~

你的支持,就是我的动力;祝各位前程似锦

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到