音视频开发--音视频基础

2023-05-16

音视频基础

一、音视频录制原理

在这里插入图片描述
视频录制流程
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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

音视频开发--音视频基础 的相关文章

  • 音视频基础

    音视频基础 写在前面基础概念音视频直播推流和拉流什么是推流什么是拉流推流和拉流的区别 协议层 封装格式层 编解码层 像素层RTP RTCP RTMP RTSP区别RTP Real time Transport Protocol 实时传输协议
  • 【C++音视频开发】视频篇 | RGB与YUV

    前言 本专栏将不间断更新有关C 43 43 音视频开发的内容 xff0c 其中有初级章 中级章与高级章的内容 xff0c 包括但不限于音视频基础 FFmpeg实战 QT 流媒体客户端 流媒体服务器 WebRTC实战 Android NDK等
  • 在阿里云Ubuntu中使用coturn创建和配置您自己的STUN/TURN服务

    1 前言 此前rtsp转webRTC的本地服务运行的不错 但是使用的某个免费stun服务突然被关停了 造成一些rtspToWebRTC的服务受到影响 因此 目前打算在我闲置的阿里云服务器上搭建stun turn服务 我的域名xiaoyaoy
  • FFmpeg音频处理——音频混合、拼接、剪切、转码

    接触FFmpeg有一段时间了 它是音视频开发的开源库 几乎其他所有播放器 直播平台都基于FFmpeg进行二次开发 本篇文章来总结下采用FFmpeg进行音频处理 音频混合 音频剪切 音频拼接与音频转码 采用android studio进行开发
  • 海思his35xx安防芯片音视频媒控驱动基础篇MIPI RX模块(一)

    先给自己打个广告 本人的微信公众号正式上线了 搜索 张笑生的地盘 主要关注嵌入式软件开发 股票基金定投 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 二维码如下 一 背景介绍 海思芯片的应用方向大致分为如下
  • 音视频开发(13)---视频监控系统必须知道的一些基础知识

    视频监控系统必须知道的一些基础知识 前言 在视频监控系统中 视频文件的传输带宽很重要 那视频文件的传输带宽怎么计算呢 首先给大家介绍几个名词 正文 1 比特率 比特率是指每秒传送的比特 bit 数 单位为bps BitPerSecond 比
  • 《FFmpeg Basics》中文版-09-overlay-画中画

    正文 overlay视频技术经常被使用 常见的例子是放置在电视屏幕上的电视频道标志 通常位于右上角 以标识特定的频道 另一个例子是画中画功能 可以在主屏幕的其中一个角落显示小窗口 小窗口包含选定的电视频道或其他内容 同时在主屏幕上观看节目
  • FFplay文档解读-18-音频过滤器三

    26 21 anequalizer 每个通道的高阶参数多频带均衡器 它接受以下参数 params 此选项字符串的格式为 cchn f cf w w g g t f 每个均衡器带由 分隔 均衡器 解释 chn 设置要应用均衡的通道编号 如果输
  • iOS 中集成 FFmpeg

    FFmpeg是一套可以用来记录 转换数字音频 视频 并能将其转化为流的开源计算机程序 它提供了录制 转换以及流化音视频的完整解决方案 ffmpeg的代码是包括两部分的 一部分是library 一部分是tool api都是在library里面
  • FFmpeg从入门到入魔(2):保存流到本地MP4

    1 FFmpeg裁剪移植 之前我们简单地讲解了下如何在Linux系统中编译FFmpeg 但是编译出来的so体积太大 而且得到的多个so不便于使用 本节在此基础上 将详细讲解在编译FFmpeg时如何对相关模块作裁剪以精简so的体积 并且编译只
  • Python音视频开发:消除抖音短视频Logo的图形化工具实现过程详解

    前往老猿Python博文目录 一 引言 在 Python音视频开发 消除抖音短视频Logo和去电视台标的实现详解 节介绍了怎么通过Python Moviepy OpenCV实现消除视频Logo的四种方法 并提供了详细的实现思路和实现代码 但
  • 浏览器播放rtsp视频流:1、开源方案

    浏览器播放rtsp视频流 1 开源方案 文章目录 浏览器播放rtsp视频流 1 开源方案 1 方案一 html5 websocket rtsp proxy 实现视频流直播 1 1 实现原理 1 2 实现步骤 1 3 优缺点 1 4 参考链接
  • Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放

    概述 本文介绍通过Nginx FFmpeg实现rtsp流转hls流 在WEB通过H5 video标签实现视频播放功能 此方法可用于网络摄像头RTSP视频流WEB端实时播放 一 FFmpeg Nginx转流hls 1 FFmpeg安装 官网
  • 视频码率(Bitrate),帧率(FPS)和分辨率的联系与区别

    一 视频码率 码率就是数据传输时单位时间传送的数据位数 一般我们用的单位是kbps即千位每秒 也就是取样率 并不等同与采样率 采样率的单位是Hz 表示每秒采样的次数 单位时间内取样率越大 精度就越高 处理出来的文件就越接近原始文件 但是文件
  • 流媒体协议部分开源库简单比对

    流媒体协议部分开源库简单比对 版本说明 版本 作者 日期 备注 0 1 ZY 2019 2 14 初稿 目录 文章目录 流媒体协议部分开源库简单比对 版本说明 目录 目前找到的比较中意的开源库 live555 media server JR
  • 浏览器访问.m3u8文件

    浏览器播放m3u8文件
  • moviepy音视频剪辑:视频半自动追踪人脸打马赛克

    一 引言 在 moviepy1 03音视频剪辑 使用manual tracking和headblur实现追踪人脸打马赛克 介绍了使用手动跟踪跟踪人脸移动轨迹和使用headblur对人脸进行打马赛克 实际上 moviepy除了使用manual
  • 浏览器播放rtsp视频流:3、rtsp转webrtc播放

    浏览器播放rtsp视频流 3 rtsp转webrtc播放 文章目录 浏览器播放rtsp视频流 3 rtsp转webrtc播放 1 前言 2 rtsp转webRTC 3 初步测试结果 4 结合我们之前的onvif gSoap cgo的方案做修
  • 【音视频 | AAC】AAC音频编码详解

    博客主页 https blog csdn net wkd 007 博客内容 嵌入式开发 Linux C语言 C 数据结构 音视频 本文内容 介绍AAC音频编码 金句分享 你不能选择最好的 但最好的会来选择你 泰戈尔 本文未经允许 不得转发
  • 【音视频 | AAC】AAC音频编码详解

    博客主页 https blog csdn net wkd 007 博客内容 嵌入式开发 Linux C语言 C 数据结构 音视频 本文内容 介绍AAC音频编码 金句分享 你不能选择最好的 但最好的会来选择你 泰戈尔 本文未经允许 不得转发

随机推荐