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

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 实时传输协议
  • 音视频基础(1)音视频处理流程

    文章目录 音视频基础 1 音视频处理流程 1 概要 2 音频处理流程 3 视频处理流程 4 直播客户端处理流程 5 音频数据流转 音视频基础 1 音视频处理流程 理解音频处理流程对我们做音视频开发至关重要 因为理解了这个处理流程之后 我们就
  • FFmpeg音频处理——音频混合、拼接、剪切、转码

    接触FFmpeg有一段时间了 它是音视频开发的开源库 几乎其他所有播放器 直播平台都基于FFmpeg进行二次开发 本篇文章来总结下采用FFmpeg进行音频处理 音频混合 音频剪切 音频拼接与音频转码 采用android studio进行开发
  • 企业级音视频会议实战之webrtc服务器janus品尝实战

    1 前言 之前写过单纯用webrtc和springboot实现单人 多人 屏幕分享等功能的一系列文章了 心疼各位giegie 已将例子放在下面 不麻烦你们去找了 webrtc实现视频群聊系列文章 一 之基础入门 webrtc实现视频群聊系列
  • 音视频&流媒体的原理以及基础入门知识

    流媒体背景 当下 音视频 流媒体已经无处不在 直播已经火了几年 在后续的时间里面 人们聊天已经不仅仅满足与文字 而是更多的在于 类面对面 交流 能够实时感知对方的表情 动作 为此 有必要跟紧时代潮流 好好梳理梳理流媒体这门功课 流媒体是什么
  • 音视频开发--基础知识

    目录 音视频基础知识 1 相关术语 1 1 帧 1 2 分辨率 1 3 刷新率 1 4 码率 1 5 画质 1 6 采样率 1 7 量化精度 1 8 视频帧 I帧 P帧 B帧 1 9 音频帧 1 10 声道 1 11 PTS DTS 1 1
  • Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放

    概述 本文介绍通过Nginx FFmpeg实现rtsp流转hls流 在WEB通过H5 video标签实现视频播放功能 此方法可用于网络摄像头RTSP视频流WEB端实时播放 一 FFmpeg Nginx转流hls 1 FFmpeg安装 官网
  • Linux车机平台pulseaudio多alsasink配置

    https www freedesktop org wiki Software PulseAudio 官网上的介绍是这样的 pulseaudio 是一个POSIX操作系统上的声音系统 是音频应用的代理 它允许你对音频数据 在从应用传递到硬件
  • 云直播SDK核心功能对比|腾讯云、阿里云、声网、即构等SDK厂商对比

    直播业务概述 大家所熟知的直播平台虎牙 斗鱼 快手 抖音 B站 直播功能看似普遍 但从零到一开发却不简单 直播中运用到的技术难点非常之多 音频视频处理 编解码 前后处理 直播分发 即时通讯等技术 学好任何一项都需要比较高的成本 将它们融合到
  • m3u8 文件格式详解

    简介 M3U8 是 Unicode 版本的 M3U 用 UTF 8 编码 M3U 和 M3U8 文件都是苹果公司使用的 HTTP Live Streaming HLS 协议格式的基础 这种协议格式可以在 iPhone 和 Macbook 等
  • 视频码率(Bitrate),帧率(FPS)和分辨率的联系与区别

    一 视频码率 码率就是数据传输时单位时间传送的数据位数 一般我们用的单位是kbps即千位每秒 也就是取样率 并不等同与采样率 采样率的单位是Hz 表示每秒采样的次数 单位时间内取样率越大 精度就越高 处理出来的文件就越接近原始文件 但是文件
  • 音视频开发(40)---麦克风阵列声源定位 GCC-PHAT

    麦克风阵列声源定位 GCC PHAT 版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net u010592995 article details 79735198 麦克风阵列声源定位 一 利用麦克风阵列
  • Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解

    前往老猿Python博文目录 一 引言 对于带Logo 如抖音Logo 电视台标 的视频 有三种方案进行Logo消除 直接将对应区域用对应图像替换 直接将对应区域模糊化 通过变换将要去除部分进行填充 其中 方法1又可以使用三种方法 一是使用
  • 视频编解码(一):ffmpeg编码H.264帧类型判断

    本文主要讲述ffmpeg编码过程中是如何设置I帧 B帧及P帧的 以及如何通过代码判断帧类型 之前看过很多网上的文章 讲述如何判断I帧 B帧 P帧 然而都是停留在H 264官方文档中的定义 如果不结合ffmpeg 就仿佛纸上谈兵 有点不切实际
  • 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的方案做修
  • Ffmpeg视频开发教程(七)——基于ffmpeg4.0生成模拟yuv数据和模拟音频数据再合成为mp4文件

    本文主要实现使用最新版的ffmpeg生成模拟yuv数据和模拟音频数据再合成为mp4文件 重要代码都是来自官方 稳定性可靠 本文程序的环境搭建参考我的第一篇FFMPEG教程 https blog csdn net zhangamxqun ar
  • 基于google升级版c++代码规范指南

    有些团队所有成员写的代码都一致 10个人写的代码像1个人写的 正因为有代码规范 使得代码可读性强 方便代码review 利于后期维护 这体现了代码规范的重要性 接下来 在参考google的代码规范基础上 详细列举代码规范细节 1 文件描述
  • 封装一个OpenH264 编解码H264视频文件的类

    下面是一个更新后的代码 增加了 H 264 编码的支持 在这个示例中 我使用了 OpenH264 的 ISVCEncoder 接口进行编码 请确保在项目中正确链接 OpenH264 库 并根据你的项目需要调整代码 include
  • 【音视频 | AAC】AAC音频编码详解

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

随机推荐