看了下网上很多关于音视频的教程都写得不行,很多基础概念都没有讲明白,就开始大论怎么开发音视频,因此我今天整理下关于音视频的一些基础知识,帮助需要学习音视频的朋友进步,大家可以一起进步,一起交流,知识只有交流才能有更大的进步,OK,下面进入正题 # 基础知识 ## 为什么需要压缩 ● 未经压缩的数字视频的数据量巨大 ● 存储困难 ● 传输困难 ## 为什么可以压缩 ● 去除冗余信息 空间冗余:图像相邻像素之间有较强的相关性 时间冗余:视频序列的相邻图像之间内容相似 编码冗余:不同像素值出现的概率不同 视觉冗余:人的视觉系统对某些细节不敏感 知识冗余:规律性的结构可由先验知识和背景知识得到 数据压缩分类 ● 无损压缩(Winzip) 压缩前解压缩后图像完全一致 压缩比低 ● 有损压缩(H.264) 压缩前解压缩后图像不一致 压缩比高 利用人的视觉系统的特性(人眼能见的动画频率和图像细节有限制) ## 视频编码格式 | 名称 | 推出机构 | 推出时间 | 目前使用领域 | | ----------- | -------------- | -------- | ------------ | | HEVC(H.265) | MPEG/ITU-T | 2013 | 研发中 | | H.264 | MPEG/ITU-T | 2003 | 各个领域 | | MPEG4 | MPEG | 2001 | 不温不火 | | MPEG2 | MPEG | 1994 | 数字电视 | | VP9 | Google | 2013 | 研发中 | | VP8 | Google | 2008 | 不普及 | | VC-1 | Microsoft Inc. | 2006 | 微软平台 | | ...... | ...... | ...... | ...... | ## 音频编码格式 | 名称 | 推出机构 | 推出时间 | 目前使用领域 | | ------ | -------------- | -------- | -------------- | | AAC | MPEG | 1997 | 各个领域(新) | | AC-3 | Dolby Inc. | 1992 | 电影 | | MP3 | MPEG | 1993 | 各个领域(旧) | | WMA | Microsoft Inc. | 1999 | 微软平台 | | ...... | ...... | ...... | ...... | ## 封装格式 | 名称 | 推出机构 | 流媒体 | 支持的视频编码 | 支持的音频编码 | 目前使用领域 | | ------ | ------------------ | ------ | ------------------------------ | ------------------------------------- | -------------- | | AVI | Microsoft Inc. | 不支持 | 几乎所有格式 | 几乎所有格式 | BT下载影视 | | MP4 | MPEG | 支持 | MPEG-2, MPEG-4, H.264, H.263等 | AAC, MPEG-1 Layers I, II, III, AC-3等 | 互联网视频网站 | | TS | MPEG | 支持 | MPEG-1, MPEG-2, MPEG-4, H.264 | MPEG-1 Layers I, II, III, AAC, | IPTV,数字电视 | | FLV | Adobe Inc. | 支持 | Sorenson, VP6, H.264 | MP3, ADPCM, Linear PCM, AAC等 | 互联网视频网站 | | MKV | CoreCodec Inc. | 支持 | 几乎所有格式 | 几乎所有格式 | 互联网视频网站 | | RMVB | Real Networks Inc. | 支持 | RealVideo 8, 9, 10 | AAC, Cook Codec, RealAudio Lossless | BT下载影视 | | ...... | | | | | | ## 流媒体协议 | 名称 | 推出机构 | 传输层协议 | 客户端 | 目前使用领域 | | --------------------- | -------------- | ---------- | -------- | --------------- | | RTSP+RTP | IETF | TCP+UDP | VLC, WMP | IPTV | | RTMP | Adobe Inc. | TCP | Flash | 互联网直播 | | RTMFP | Adobe Inc. | UDP | Flash | 互联网直播 | | MMS | Microsoft Inc. | TCP/UDP | WMP | 互联网直播+点播 | | HTTP-FLV | WWW+IETF | TCP | Flash | 互联网直播 | | HLS(http live stream) | APPLE | TCP/UDP | Flash | 互联网直播+点播 | ## YUV简介 YUV定义:分为三个分量, “Y”表示明亮度也就是灰度值,而“U”和“V” 表示的则是色度和饱和度,作用是描述影像色彩及饱和度,用于指定像素的颜色。 YUV格式有两大类:(平面格式)planar和(打包格式)packed。 1.planar:先存储Y,然后U,然后V 2.packed:yuv交叉存储 还有我们常说的YUV420sp与YUV420p。 YUV420sp: 一种two-plane模式,即Y和UV分为两个平面,U、V交错排列。 YUV420p: 先把U存放完后,再存放V。UV是连续的。 YUV420的数据大小为: 亮度(行×列) + V(行×列/4) + U(行×列/4)即:W\*H\*3/2, 普遍的编码器都以接受planar的I420数据(YUV420P) 4*4的I420数据排列如下: > y1 y2 y3 y4 > > y5 y6 y7 y8 > > y9 y10 y11 y12 > > y13 y14 y15 y16 > > u1 u2 u3 u4 > > v1 v2 v3 v4 而android摄像头一般默认为NV21(YUV420SP) >y1 y2 y3 y4 > >y5 y6 y7 y8 > >y9 y10 y11 y12 > >y13 y14 y15 y16 > >u1 v1 u2 v2 > >u3 v3 u4 v4 ## H.264 I,P,B帧和PTS,DTS I frame :帧内编码帧 ,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。 P frame: 前向预测编码帧,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧; B frame: 双向预测内插编码帧 ,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧; I frame:自身可以通过视频解压算法解压成一张单独的完整的图片。 P frame:需要参考其前面的一个I frame 或者B frame来生成一张完整的图片。 B frame:则要参考其前一个I或者P帧及其后面的一个P帧来生成一张完整的图片。 PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来 DTS:Decode Time Stamp。DTS主要是标识读入内存中的帧数据在什么时候开始送入解码器中进行解码。 在没有B帧存在的情况下DTS的顺序和PTS的顺序应该是一样的。 DTS主要用于视频的解码,在解码阶段使用。PTS主要用于视频的同步和输出.在显示的时候使用。 ![dts与pts](dts与pts.jpg) 如上图:I frame 的解码不依赖于任何的其它的帧.而p frame的解码则依赖于其前面的I frame或者P frame.B frame的解码则依赖于其前的最近的一个I frame或者P frame 及其后的最近的一个P frame. ## FFmpeg核心模块 `libavformat` 用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;音视频的格式解析协议,为 libavcodec 分析码流提供独立的音频或视频码流源。 `libavcodec` 用于各种类型声音/图像编解码;该库是音视频编解码核心,实现了市面上可见的绝大部分解码器的功能,libavcodec 库被其他各大解码器 ffdshow,Mplayer 等所包含或应用。 `libavfilter` filter(FileIO、FPS、DrawText)音视频滤波器的开发,如水印、倍速播放等。 `libavutil` 包含一些公共的工具函数的使用库,包括算数运算 字符操作; `libswresample` 原始音频格式转码。 `libswscale` (原始视频格式转换)用于视频场景比例缩放、色彩映射转换;图像颜色空间或格式转换,如 rgb565,rgb888 等与 yuv420 等之间转换。 libpostproc+libavcodec
音视频专栏-基础知识总结
于 2023-05-29 11:41:05 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)