音视频知识小结

前言

总的一对音视频相关的学问,文末总结出传送门。

概念

  • 协议层(Protocol
    Layer):该层处理的数额吧契合一定流媒体协议正式的多寡,例如http,rtmp,file等;
  • 封装层(Format
    Layer):该层处理的数目吧符合一定封装格式规范之数码,例如mkv,mp4,flv,mpegts,avi等;
  • 编码层(Codec
    Layer):该层处理的数据也顺应一定编码标准规范的数量,例如h264,h265,mpeg2,mpeg4相当于;
  • 诸如素层(Pixel
    Layer):该层处理的多少也顺应一定像素格式规范的多寡,例如yuv420p,yuv422p,yuv444p,rgb24等;

其一分类与图纸来自雷神的博客,这里是链接。

博多媒体数据流需要而含有音频数据与视频数据,这时便会参加一些用于音频和视频数据并的冠数据,例如字幕。这三种植数据流可能会见给不同的次第,进程要硬件处理,但是当它传或者存储的上,这三栽多少一般是给查封装在共的。通常这种封装是经过视频文件格
式来贯彻的,例如常见的.mpg, .avi, .mov, .mp4, .rm, .ogg or .tta
这些格式中约略只能采用一些编解码器,而再度多足坐容器的点子使用各种编解码器。

视频压缩原理

1、压缩的势头

数字化后的视频信号具有十分怪之数冗余,压缩的真相就是是错过丢这些冗余。

  • 空中冗余,视频的背景与总体颜色相近并且平稳变化,可以采取帧内编码进行压缩;(无损)
  • 时刻冗余,两独相频帧之间有着高相关性,利用挪估计动上进展帧间压缩;(无损)
  • 布局冗余,图像里在相似性,通过这种干可以展开分形编码;
  • 编码冗余,出现概率大之颜色编码长度短,概率小之颜料编码长度长;(可易长编码)
  • 视觉冗余,利用人眼对亮度和色度的敏感度不同,在编码时进行数据压缩;(有损压缩)

2、变换

空间域描述的图像相关性不顶明朗,需要换到频率域。常用的正交变换有偏离散傅里叶变换,离散余弦变换等等。数字视频压缩过程遭到采取广泛的凡离散余弦变换。

  • 空间域(spatial domain),又如图像空间(image
    space)。由图像像长成的空间。在图像空间被因长(距离)为打变量直接针对诸如元值进行处理称为空间域处理。
  • 频率域(spatial frequency
    domain),以空间频率为自变量描述图像的特性,可以拿平轴图像像元值在上空达到的变迁说明为有着不同振幅、空间频率和相位的简振函数的线性叠加,图像被各种空间频率成分的做和遍布称为空中频谱。这种针对图像的空间频率特征进行诠释、处理和分析称频率域处理或者波数域处理。

图像处理中的空间域就是如素域,在空间域的拍卖就是当如素级的处理,如以比如素级的图像叠加。通过傅立叶变换后,得到的凡图像的频谱。表示图像的能梯度。

假雷神blog的老三摆放图来阐述效果:

一个实在8*8图像块

图像块经过DCT变换后底系数

量化后的DCT系数

H.264格式

H.264是音视频知识中,必须深刻摸底的片段。

优先介绍部分基本的定义

  • I帧是根本帧,解码时单待本帧数据;

  • P帧是参考帧,表示马上同幅与前一个最主要帧(或P帧)的歧异;

  • B帧是双向参考帧,表示本帧与上下帧的反差;(B帧压缩率高,解码复杂,直播中于少用)

  • IDR帧是首先只I帧,为之凡暨其余I帧区别开,方便控制编码和解码;

IDR会导致DPB(DecodedPictureBuffer 参考帧列表)清空,而I不会见。

  • GOP(Group Of
    Picture)是图像组,是同样组连的画面;(直播实现秒开,关键就是CDN节点缓存GOP,编码器拿到第一个GOP后马上解码播放)

  • 帧内压缩:当压缩一轴图像时,仅考虑本帧的数量要无考虑相邻帧之间的冗余信息;(帧内压缩一般达到不顶异常高之减,跟编码jpeg差不多)

  • 帧间缩减:利用相邻帧的相关性提高压缩量,减少冗余;(运动上与运动估计是常用的技巧)

编码顺序

简而言之描述下编码的长河,假而我们处理的首先幅是DIR帧:

  1. 编码IDR帧

  2. 因scenecut 和 min-keyint的安装,向后走 min-keyint的偏离,开始判定是否为scenechange,直到判定满足,或者到keyint设置值的离开下停止。同时记录判定条件不完全满足时候的职。

  3. 编码找到的为指针,亦也IDR帧,GOP形成。

  4. 因2步遭到收获的判定条件不了满足的职务,将针对应帧按日各个用I编码。

  5. 找到最头上IDR和距离那个近来底I帧形成的Sub-GOP(严格意义上说这里并非GOP因为GOP之间莫可知交换信息,)结合bframes的设定大小,推断P帧出现的岗位。具体而言,按日各个走各一样帧比较该帧用P编码和B编码时之视觉误差和复杂度何者更要命,根据某些公式推导出这里应该为此何种帧类型,再为后更换一帧;如果直到bframes规定之值都不出现P,则强制插入一帧P。这样即便控制了每个sub-GOP内P帧的位置。

  6. 最终一步,根据I/IDR/P形成的子区间,按时间各个编码各帧为B帧。

比方:100-120帧这样的等同段视频
第一步结束晚编码完成 100幅
次步结束后或编码完成 120幅和110帧 (IDR帧)同时搜寻有了104,108,
115帧应当编码为I
季步结束后编码完成104 108 115 帧为I
第五步对 100-104 104- 108 108-110 110 – 115
115-120五独子区间,判断P帧出现的职位并编码有或判断出102 113 118
为p帧
说到底一步于编码之间的一对也B帧
于是乎解码过程的输出帧顺序其实是
100 110 104 108 102 101 103 105 106 109….

此例来自360文库,但是原文链接已休克用,欢迎告知发生处于盖备注。

iOS的H.264编解码

使用VideoToolbox硬编码H.264
使用VideoToolbox硬解码H.264

板压缩原理

数字音频压缩编码在保信号在听觉方面未生失真的前提下,对板数据信号进行尽可能大之减少。数字音频压缩编码采取去除声音信号中冗余成分的法来落实。所谓冗余成分因的凡节奏中不可知让人耳感知到的信号,它们对准规定声音之音色,音调等消息并未其余的帮助。
冗余信号包含人口而已听觉范围外之板信号和被埋伏掉的节奏信号等。
人耳听觉的藏效应:当一个强音信号和一个弱音信号同时设有时时,弱音信号将为强音信号所藏而放任自流不展现,这样弱音信号就好说是冗余信号而休用传送。

频谱掩蔽效应

一个效率之响声能小于某个阈值之后,人而已就会放不至,这个阈值称为最小但闻阈。当起另外能量比生之鸣响出现的时候,该声音频率附近的阈值会提高广大,即所谓的潜伏效应。

时域掩蔽效应

当强音信号与弱音信号同时起常常,还存时域掩蔽效应。即双方有时特别接近的时候,也会见生出掩蔽效应。时域掩蔽过程曲线如图所示,分为前躲、同时掩蔽和后掩蔽三部分。

  • PCM是编码格式,经过话筒录音后直接获取的未经压缩的数据流;

数据大小=采样频率*采样员数*声道*秒数/8。
采样定理表明采样频率必须超过被采样信号带宽的星星点点加倍,另外一栽同等的说法是奈奎斯特效率必须高于被采样信号的带富。如果信号的带来富是
100Hz,那么为避免混叠现象采样频率必须过200Hz。换句话说就是是采样频率必须至少是信号中最酷频率分量频率之简单加倍,否则就算无可知打信号采样中平复旧信号。

  • AAC是编解码标准,基于MPEG-2的音频编码技术;

使用AudioToolbox编码AAC
使用AudioToolbox播放AAC
PCM采样率是44100Hz,那么AAC码率可装64000bps;
假如是16K,可设置也32000bps;

  • MP3凡是封装格式,所存放数量利用的编码方式称为MPEG1 Layer-3 ;

  • AMR是封装格式,专用于中地压缩语音频率;

  • WAV是封装格式,里面可以存放多种编码格式的数额,一般是PCM数据;

零星的文化

FLV封装格式是出于一个FLV
Header文件头和一个一个之Tag组成的。Tag中寓了节奏数据以及视频数据。FLV的结构要下图所展示。

FLV(Flash
Video)是Adobe公司计划开的一模一样种植流行的流动媒体格式,由于其视频文件体积轻巧、封装简单等风味,使其异常符合当互联网及进展利用。

RTSP:实时流传输协议,是TCP/IP协议体系中之一个应用层协议;

M4A:.m4a是MPEG-4 音频标准的文书之扩充名,Apple在iTunes以及
iPod中运用“.m4a”以界别MPEG4的视频和音频文件;

音视频同步:时间戳,时间戳即为平幅的募集时间,音视频采取与一个参考时间,给每个帧打上时间穿。

rtmp发送音视频:xcode中编译librtmp库,遵循rtmp协议,将数据发送到指定服务器;

AudioToolbox.framework:提供CoreAudio的吃高级别的API服务,处理电话同任何大优先级语音处理要致的间歇和回复操作等;

AudioUnit.framework:提供DSP数字信号处理相关的插件,包括编解码,混音,音频均衡等;

AVFoundation.framework:提供一个简短的音乐播放类,可以播放所有IOS支持的节奏;

OpenAL.framework:提供3D音效播放;

AVFoundation相关

AVAssetExportSession

AVAssetExportSession类可以将AVAsset对应之源文件,转换成为预先安装的格式。
exportPresetsCompatibleWithAsset 可以导出可配置格式的列表;

Error相关

AVAssetWriter

AVAssetWriter经常报来荒谬

AVAssetWriter startSessionAtSourceTime: Cannot call method when status
is 0

查阅文档,知道status=0表示一无所知,可知应该是不曾初始化成功AVAssetWriter;

typedef NS_ENUM(NSInteger, AVAssetWriterStatus) {
    AVAssetWriterStatusUnknown = 0,
    AVAssetWriterStatusWriting,
    AVAssetWriterStatusCompleted,
    AVAssetWriterStatusFailed,
    AVAssetWriterStatusCancelled
};
EXC_BAD_ACCESS
mTimeStamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);

检查sampleBuffer是否为空或者引用是否发retain;

expectsMediaDataInRealTime = YES导致张频断断续续

即之诠释是:
expectsMediaDataInRealTime=YES不时需interval=20ms左右的音频帧
sdk提供的节奏回调是50ms,expectsMediaDataInRealTime=YES的当儿会导致音频断断续续(帧数不够);

说明:同样的写法expectsMediaDataInRealTime=YES,当音频帧的interval=20ms左右时不时,音频不咬。

总结

是首小结并没有称得了自己于研发直播APP过程中,了解之音视频知识。因为以前的文集蒙,已经零碎介绍了同样片段文化,不思重新赘述。
本身也不是专程举行音视频开发之,只是当研发进程遭到,遇到这些文化,不晓得的即使翻开,作为文化储备。故而总结的情,也生成千上万之局部是自于其它blog,比如说雷神。
想深入学音视频开发,还是基本上到雷神的blog学习,这里是传送门。

相关文章