音视频开发--音视频基础
音视频基础
一、音视频录制原理
视频录制流程
1、准备摄像头
2、图像帧阶段
从摄像头采集视频数据(图像帧),采集数据格式:YUV或者RGB,YUV和RGB细分的话还包括YUV 4:4:4、YUV 4:2:2、YUV 4:2:0等,RGB细分的话还包括RGB565、RGB555、RGB24、RGB32、ARGB32等格式.
3、图像处理阶段
我们采集完数据之后,就可以对采集到的数据进行处理了。例如:曝光、色度、温和度、色差等等。都可以在这个阶段做。
4、图像帧队列阶段
处理后的图像帧,会暂存放到图像帧队列中,等待视频编码器来对数据进行编码;
5、视频编码阶段
如果图像帧队列中有数据的话,视频编码器就会进行处理。如果不做编码的话,视频的体积是非常大的,而此阶段的技术也是非常多的,还可以称之为压缩。
6、视频包队列阶段
将压缩完的数据,暂存到视频包队列;
7、复用器
复用器进行音视频封装(例如:封装成mp4等)
8、写入到文件。
音频录制流程
1、准备麦克风
2、采样帧阶段
从麦克风采集的音频数据,采集的音频数据又称为PCM,采样帧的概念:采多少数据作为一帧去做编码压缩
3、音频处理阶段
为什么要做音频处理,有时候你要对你这个声音,如果你要想做一些变音,比如你这个声音比较尖锐,那你想把它把它压的稍微低沉一点,那这个时候就是可以做这个音频处理。
4、采样帧队列阶段
处理后的采样帧,会暂存放到采样帧队列中,等待采样编码器来对数据进行编码;
5、音频编码阶段
音频编码器从采样帧队列读取处理好的采样帧进行压缩。
6、音频包队列
将压缩完的数据,暂存到音频包队列;
复用器(音视频封装)
将音频包队列中的数据和视频包的数据进行封装,按照一定的规则写到文件中。
时钟
为了音视频同步,在采集采样帧和图像帧同时加上一个时间戳。
二、音视频播放原理
音视频播放原理:实际上是音视频录制的逆向过程。,如果你是按照MP4的格式写到文件里面去,那你现在在播放的时候,那你就按照MP4的规则把这个音频跟视频分离出来,那我们再往下面去看,你可以看到也是同样存在这种队列,存在这种队列有什么用呢,这实际上他这队列就是先把数据放到队列里面去,然后等待,我们解码线程去从队列里面去获取数据的音频跟视频都是一样的,然后我们解码后,那我们也会去继续放到帧队列里面去呢,帧队列为什么还放在帧队列里面,因为我们后面还要做一个音视频同步控制,所以我们要先把数据稍微缓存一下,缓存一下,然后再去通过音视频同步的时候,我们才真正的把它拨到这个喇叭或者这个显示器里面来,但是还有一点要注意的是,比如我这边音频,你是可以做音频处理,就可以做一些音效处理,比如你可以调这个重低音呢,那就可以做这个音频的,做音频的一个算法处理,那比如你要把这个图像这个亮度,把这种色彩给调一下,那你就可以用这个图像处理这样子的一个模块,还有一个点就是这个音视频同步这一块,有的时候是在音频处理和图像处理后进行时间同步。
三、图像基础概念
像素:像素是一个图片的基本单位,例如2500×2000的照片就是指横向有2500个像素点,竖向有2000个像素点,总共是500万个像素,也俗称500万像素照片。
分辨率:是指图像的大小或尺寸。
常见的分辨率:
360P(640x360)、720P(1280x720)、1080P(1920x1080)、4K(3840x2160)、8K(7680x4320)
位深:我们看到的彩色图片,都有三个通道,分别为红(R)、绿(G)、蓝(B)通道。(如果需要透明度则还有alpha分量)通常每个通道用8bit表示,8bit能表示256种颜色,所以可以组成256256256=16,777,216 = 1677万种颜色。这里的8bit就是我们讲的位深。每个通道的位深越大,能够表示的颜色值就越大,比如现在高端电视说的10bit色彩,即是每个通道用10bit表示,每个通道有1024种颜色。102410241024约为10,7374万色=10亿色, 是8bit的64倍。常见的颜色还是8bit居多。
帧率:在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。比如25fps表示一秒有25张图片。
常用帧率:
电影帧率一般是 24fps(帧每秒);
电视剧一般是25fps;
监控行业常用 25fps;
音视频通话常用15fps;
帧率越高,画面越流畅,需要的设备性能也越高。
码率:视频文件在单位时间内使用的数据流量。比如1Mbps。对于同一个原始图像源的时候,同样的编码算法,则码率越高,图像的失真就会越小,视频画面就会越清晰。但是在外在因素(例如光线不足)作用下,分辨率小的视频有可能比分辨率大的视频清晰。
Stride跨距:
YUV
YUV:“Y”表示明亮度,也就是灰阶值,“U”和“V”表示的则是色度。
YUV排列方式
YUV是一个比较笼统地说法,针对它的具体排列方式,可以分为很多种具体的格式:
打包(packed)格式:将每个像素点的Y、U、V分量交叉排列并以像素点为单元连续的存放在同一数组中,通常几个相邻的像素组成一个宏像素(macro-pixel)
平面(planar)格式:使用三个数组分开连续的存放Y、U、V三个分量,即Y、U、V分别存放在各自的数组中。
YUV采样表示法
YUV采用A:B:C表示法来描述Y,U,V采样频率比例,下图中黑点表示采样像素点Y分量,空心圆表示采样像素点的UV分量。主要分为 YUV 4:4:4、YUV 4:2:2、YUV 4:2:0 这几种常用的类型。
YUV4:4:4采样法:4:4:4 表示色度频道没有下采样,即一个Y分量对应着一个U分量和一个V分量。
YUV4:2:2采样法:4:2:2 表示 2:1 的水平下采样,没有垂直下采样,即每两个Y分量共用一个U分量和一个V分量。
YUV4:2:0采样法:4:2:0 表示 2:1 的水平下采样,2:1 的垂直下采样,即每四个Y分量共用一个U分量和一个V分量。
YUV数据存储
I444(YUV444P)格式, 对应Ffmpeg像素表示AV_PIX_FMT_YUV444P///< planar YUV
4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples),该类型为planar(平面)格式
I422(YUV422P)格式:对应Ffmpeg像素表示AV_PIX_FMT_YUV422P///< planar YUV 4:2:2, 16bpp, (1 Cr
& Cb sample per 2x1 Y samples),该类型为planar(平面)格式。
I420(YUV420P)格式:对应Ffmpeg像素表示AV_PIX_FMT_YUV420P///< planar YUV 4:2:0, 12bpp(1.5字节:(4个Y + 一个U + 一个V) / 4 = 1.5字节 ), (1 Cr& Cb sample per 2x2 Y samples),该类型为planar(平面)格式。
NV12格式:对应Ffmpeg像素表示AV_PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane
for Y and 1 plane for the UV components, which are interleaved (first byte U and
the following byte V)
RGB和YUV的转换
YUV Stride对齐问题
四、视频主要概念l
I帧:帧内编码帧(intra picture),又称全帧压缩编码帧。I帧通常是每个GOP(MPEG所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,作为随机访问的参考点,可以当成静态图像。I帧不需要参考其他画面而生成,解码时仅靠自己就重构完整图像
- I帧图像采用帧内编码方式;
- I帧所占数据的信息量比较大;
- I帧图像是周期性出现在图像序列中的,出现频率可由编码器选择;
- I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
- I帧是帧组GOP的基础帧(第一帧),在一组中只有一个帧;
- I帧不需要考虑运动矢量;
P帧:前向预测编码帧(predictive-frame),通常将图像序列中前面已经编码帧的时间冗余信息充分去除来压缩传输数据量的编码图像,也称为预测帧。*
B帧:双向预测内插编码帧(bi-directional interpolated prediction frame),既考虑源图像序列前面的已编码帧,又顾及源图像序列后面的已编码帧之间的时间冗余信息,来压缩传输数据量的编码图像,也称为双向预测帧。
基于以上对IPB帧的定义,以下从解码的角度来理解IPB帧:
I帧:自身可以通过视频解压算法解压成一张单独的完整视频画面,所以I帧去掉的是视频帧在空间维度上的冗余信息。
P帧:需要参考前面的I帧或者P帧来解码成一张完整的视频画面。
B帧:需要参考前一个I帧或者P帧及其后面的一个P帧来生成一张完整的视频画面,所以P帧与B帧去掉的是视频帧在时间维度上的冗余信息。
五、封装格式+音视频同步
封装格式(也叫容器):就是将已经编码压缩好的视频流、音频流及字幕流按照一定的格式放到一个文件中,便于播放软件播放。视频文件的后缀就是它的封装格式。
常见的封装格式:
音视频同步概念:
DTS:即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
PTS:既显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧数据。
音视频同步方式:
Audio Master:同步视频到音频
Video Master:同步音频到视频
External Clock Master:同步音频和视频到外部时钟
一般情况同步优先级为:Audio Maste > External Clock Master > Video Master
音视频开发--音视频基础相关推荐
- 音视频开发-音视频面试必问的直播延迟分析丨FFmpeg|SRS流媒体服务器|webrtc|Android NDK开发|HTTP-FLV|RTSP
音视频面试必问的直播延迟分析 1.直播延迟500ms是极限吗,加上WebRTC能做到多少 2.推流的延迟分析 3.流媒体服务器延迟分析 4.拉流的延迟分析 视频讲解如下,点击观看: 音视频开发-音视频 ...
- FFMpeg视频开发与应用基础——使用FFMpeg工具与SDK-殷汶杰-专题视频课程
FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK-41668人已学习 课程介绍 FFMpeg是当今为的面向音视频开发的开源工程,广泛应用于多种音视频的客户端.播放器和流媒 ...
- 音视频开发必备基本基础知识(1)
最近收到了朋友邮寄过来的一本书,刚拿回来就趁机学习了一波音视频开发的知识.现就音视频开发的一些基本知识做一个总结.如下: 1.视频编码 通过特定的压缩技术,将视频格式文件转换成另一种视频格式文件的方法 ...
- 音视频开发中常见基础问题总结
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/54962205 前言:音视频中一些 ...
- 【Android 音视频开发-音视频硬解码篇】1.音视频基础知识
这是一个入门系列,涉及的知识也仅限于够用. 最后,写文章过程中,会借鉴参考其他人分享的文章,会在文章最后列出,感谢这些作者的分享. 本文你可以了解到 作为开篇的文章,我们先来看看音视频由什么构成的,以 ...
- Moviepy音视频开发:视频转gif动画或jpg图片exe图形化工具开发案例
☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿之所以学习和研究Moviepy的使用,是因为需要一个将视频转成动画的工具,当时在网上到处搜索查找免费使用工具,结果找了很多自称免费的工具,但转完 ...
- 音视频开发——音视频学习资料
目录 1.为什么要学习音视频? 2.如何学习系统性音视频? 3.音视频相关的资料 最近有朋友问想学习音视频,应该怎么学,有什么资料吗? 这个问题也困扰我很久,几年前就想开始音视频相关的学习,但是一直找 ...
- 音视频开发---音视频同步算法
目录 ffplay简介 为什么要做音视频同步 音视频同步算法 参考 本文是对音视频同步算法的总结,以阅读ffplay.c源码为基础,结合各位博主的分析, 逐渐深入理解同步算法原理, 并根据自身理解, ...
- Qt/C++音视频开发45-音视频类结构体参数的设计
一.前言 视频监控内核组件重构和完善花了一年多时间,整个组件个人认为设计的最好的部分就是各种结构体参数的设计,而且分门别类,有枚举值,也有窗体相关的结构体参数,解码相关的结构体参数,同时将部分常用的结 ...
最新文章
- 刚刚,arXiv论文数破200万!没有arXiv,就没有21世纪的科研突破
- 算法--无重复字符的最长字串(详细)
- linux gcc 与 glibc 的关系 glibc版本查看
- 网页设计制作必须知道的10个秘诀
- 《Java 核心技术卷1 第10版》学习笔记------ 接口(Interface)
- 远程图片保存到服务器 php,保存远程图片到本地服务器几种方法[php,asp]网
- 基于Response的将数据导出到Excel
- 程序员在群询问破解软件
- Android解析SVG
- 微服务主见传递ID还是json_Feign实现微服务间文件传递
- 中国双层超级电容器市场趋势报告、技术动态创新及市场预测
- 如何在 macOS 中将用户帐户拆分为两个单独的帐户?
- 多态_python的小窝_百度空间
- 我的车辆过户办理经历分享(深圳市内过户)
- Docker 错误 “port is already allocated” 解决方法
- 腾讯Bugly的前世今生
- 【前端测试与集成】使用mocha和sinon进行单元测试
- 《深度学习入门 基于Python的理论与实现》书中代码笔记
- 技术人在互联网如何变现
- 《小王子》精彩章节——Chapter 21