当前位置:网站首页>音视频开发的正确(学习思路+技术指导)
音视频开发的正确(学习思路+技术指导)
2022-07-30 02:03:00 【程序猿会指北】
音视频技术一句话简单来说就是通过网络将图像和声音从生产端分发给消费端的技术。可以是以点播的方式,也可以是直播的方式,也可以是像视频会议一样互动的方式。现在的网络流量一多半都是在传输音视频的数据,音视频相关的app几乎每个人都在使用,占据了大众娱乐的半壁江山。
音视频运作流程
**音视频生产端:**音视频的采集 ->预处理-> 编码 -> 封装 -> 网络发送
**音视频消费端:**网络接收 -> 解封装 -> 解码 -> 渲染
1、音视频采集
android平台上的音频采集一般就三种:1.利用android内置的应用程序 2.使用MediaRecorder进行音频捕获 3.使用AudioRecord进行音频捕获。此3种方式的灵活性逐渐增大,相应的所需要做的工作也逐渐增多。
2、预处理
视频数据的预处理一般包括视频图像的滤镜处理、美颜处理、加字幕,绿幕抠图。
音频的预处理一般包括声音的3A算法和变速变调处理,这个在 WebRTC里面有详细的介绍和实现。
- AGC:自动增益补偿功能(Automatic Gain Control)
- ANS:背景噪音抑制功能(Automatic Noise Suppression)
- AEC:回声消除器(Acoustic Echo Canceller)
3、编码
视频的编码标准:
- H264
- H265
- VP8
- VP9
- AV1
音频的编码标准:
- AAC
- Opus
- mp3
以我目前的工作经验最常用的视频编码是 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 应用的更广 。
技术参考资料:《全套音视频入门到精通手册》
音视频的知识范围很广,要学的东西很深。文章篇幅有限,我把根据音视频的学习思路,整理出的一套系统性的学习笔记。我把这套学习笔记放在文章链接中,对音视频感兴趣的人,可以借鉴加深学习!


总结
本人在学习音视频开发的过程中,深刻体会到了由于知识的分散、过渡断层带来的种种困惑和痛苦,因此希望通过自己的理解,可以把音视频开发相关的知识总结出来,并形成系列文章,循序渐进,剖析各个环节,一则对自己所学做一个总结和巩固,二则希望可以帮助想入门音视频开发的开发者小伙伴们。
冰冻三尺非一日之寒,滴水石穿非一日之功。
加油!让我们早日成为音视频开发者六边形战士!
边栏推荐
猜你喜欢

自动配置和 thymeleaf模板引擎

力扣刷题训练(二)

The display and hiding of widgets for flutter learning

STM32L4R9ZIY6PTR STM32L4高性能嵌入式—MCU

Is it difficult for AI to land?Cloud native helps enterprises quickly apply machine learning MLOps

Unity便携式 VR 的实现

JS develops 3D modeling software

CVPR 2022 Best Paper -- Learning to Solve Hard Minimal Problems

记一次搭建conda虚拟环境

Typora transparent background image
随机推荐
超详细的MySQL基本操作
ufw set firewall rules
OSPF shamlink 解决后门链路问题
05.script_setup中的私有属性
Performance Testing Theory 1 | Sorting out difficult problems in performance testing
躲避雪糕刺客?通过爬虫爬取雪糕价格
App测试需要测什么
LeetCode 2348. Number of all-zero subarrays
How Junior Testers Grow Fast
go 双向流模式
sublime 背景透明度以及列编辑
el-table sum total
【微服务~Nacos】Nacos服务提供者和服务消费者
Teach you how to achieve a flowing gradient border
Oracle 迁移至Mysql
English grammar_indefinite pronouns -some & any
flutter学习之widget的显示和隐藏
Google浏览器打开axure产品原型的解决方案
Linux Jenkins查找缓存文件及删除 (2022-07测试可用)
LeetCode 2342. Digital and equal number of one of the biggest and