音频编码1.1为什么需要采样位数,采样频率的主要作用

一、音频编码1.1为何须要音频编码

音频编码的主要作用是将音频取样数据(PCM等)压缩成为音频码率,进而增加音频的数据量,偏于储存和传输,跟视频编码的作用类似。

1.2音频基本概念取样频度

单位时间内对模拟讯号的取样次数。取样频度越高,声音的还原就越真实越自然,其实数据量就越大。取样率按照使用类型不同大约有以下几种:

8khz:电话等使用,对于记录人声早已足够使用。

22.05khz:广播使用频度。

44.1khz:音频CD。

48khz:DVD、数字电视中使用。

96khz-192khz:DVD-Audio、蓝光高清等使用。

取样精度常用范围为8bit-32bit,而CD中通常都使用16bit。

取样位数

取样位数,也称量化级、样本规格、量化数据位数,指每位取样点才能表示的数据范围栅格数据主要编码方法,它以位(Bit)为单位。取样位数一般有8bits或16bits两种,取样位数越大,所能记录声音的变化度就越醇厚,相应的数据量就越大。8位字长量化(低品质)和16位字长量化(高品质),16bit是最常见的取样精度。

声道数

声道数是指支持能不同发声的音箱的个数,它是评判音箱设备的重要指标之一。

量化

将取样后离散讯号的幅度用二补码数表示下来的过程称为量化。(日常生活所说的量化,就是设定一个范围或则区间,之后看获取到的数据在这个条件内的搜集下来)。

编码

取样和量化后的讯号还不是数字讯号,须要将它转化为数字编码脉冲,这一过程称为编码。模拟音频进取样、量化和编码后产生的二补码序列就是数字音频讯号。

PCM

PCM(PulseCodeModulation),即脉冲编码调制,对声音进行取样、量化过程,未经过任何编码和压缩处理。

比特率

比特率(亦称位速、比特率),是指在一个数据流中每秒钟能通过的信息量,代表了压缩质量。例如MP3常用分辨率有128kbit/s、160kbit/s、320kbit/s等等,越高代表着声音音效越好。

比特率=取样率×采样深度×通道数。例如取样率=44100,取样深度=16,通道=2的音频的的比特率就是44100*16*2=1411200bps。

有损压缩和无损压缩

有损压缩就是通过删掉一些已有数据中不太重要的数据来达到压缩目的。

无损压缩就是通过优化排列方法来达到压缩目的。

大约可以这样去看:有损压缩如同我们在一篇文章中删掉一些不重要的代词,达到目的,解压缩后,已删掉的内容难以恢复;而无损则是通过排版方法达到的,解压缩以后,能够获得完整的PCM数据。

常用音频编码格式二、视频编码2.1H264压缩技术

帧内压缩:

解决的是空域数据冗余问题。当压缩一帧图象时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,这实际上与静态图象压缩类似。帧内通常采用有损压缩算法,因为帧内压缩是编码一个完整的图象,所以可以独立的解码、显示。帧内压缩通常达不到很高的压缩,跟编码jpeg差不多。

帧间压缩

(运动恐怕与补偿),解决的是频域数据冗徐问题。相邻几帧的数据有很大的相关性,或则说前后两帧信息变化很小的特征。也即连续的视频其相邻帧之间具有冗余信息,按照这一特点,压缩相邻帧之间的冗余量就可以进一步提升压缩量,降低压缩比。帧间压缩亦称为时间压缩(Temporalcompression),它通过比较时间轴上不同帧之间的数据进行压缩。帧间压缩通常是无损的。帧差值(Framedifferencing)算法是一种典型的时间压缩法,它通过比较本帧与相邻帧之间的差别,仅记录本帧与其相邻帧的差值,这样可以大大降低数据量。

I帧:关键帧,采用帧内压缩技术。

P帧:往前参考帧,在压缩时,只参考上面早已处理的帧。采用帧音压缩技术。

B帧:单向参考帧,在压缩时,它即参考前而的帧,又参考它前面的帧。采用帧间压缩技术。

2.2GOP(画面组)

GOP我个人也理解为跟序列差不多意思,就是一段时间内变化不大的图象集。GOP结构通常有两个数字,如M=3,N=12。M指定I帧和P帧之间的距离,N指定两个I帧之间的距离。里面的M=3,N=12,GOP结构为:IBBPBBPBBPBBI。在一个GOP内Iframe解码不依赖任何的其它帧,pframe解码则依赖上面的Iframe或Pframe,Bframe解码依赖前近来的一个Iframe或Pframe及其后近来的一个Pframe。

图片[1]-音频编码1.1为什么需要采样位数,采样频率的主要作用-唐朝资源网

所以在分辨率不变的前提下,GOP值越大,P、B帧的数目会越多栅格数据主要编码方法,画面细节更多,也就更容易获取较好的图象质量;Reference越大,B帧的数目越多,同理也更容易获得较好的图象质量。

须要说明的是,通过提升GOP值来提升图象质量是有限度的,在遇见场景切换的情况时,H.264编码器会手动强制插入一个I帧,此时实际的GOP值被减短了。另一方面,在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图象质量比较差时,会影响到一个GOP中后续P、B帧的图象质量,直至下一个GOP开始才有可能得以恢复,所以GOP值也不宜设置过大。

同时,因为P、B帧的复杂度小于I帧,所以过多的P、B帧会影响编码效率,使编码效率增加。另外,过长的GOP都会影响Seek操作(找I帧)的响应速率,因为P、B帧是由上面的I或P帧预测得到的,所以Seek操作须要直接定位,解码某一个P或B帧时,须要先解码得到本GOP内的I帧及之前的N个预测帧才可以,GOP值越长,须要解码的预测帧就越多,seek响应的时间也越长。

2.3H264层级

1、网络提取层(NetworkAbstractionLayer,NAL)

2、视讯编码层(VideoCodingLayer,VCL)

H.264的功能分为两层,视频编码层(VCL)和网路提取层(NAL)。

1.VCL数据即被压缩编码后的视频数据序列。

2.在VCL数据要封装到NAL单元中以后,才可以拿来传输或储存。

图片[2]-音频编码1.1为什么需要采样位数,采样频率的主要作用-唐朝资源网

图片[3]-音频编码1.1为什么需要采样位数,采样频率的主要作用-唐朝资源网

SPS:序列参数集,作用于一系列连续的编码图象;

PSS:图象参数集,作用于编码视频序列中一个或多个独立的图象;

图片[4]-音频编码1.1为什么需要采样位数,采样频率的主要作用-唐朝资源网

2.4RTP封包vH264的方法

NALU打包成RTP的方法有三种:

2.5视频的封装格式

视频封装格式,一般我们把它称作为视频格式,它相当于一种容器,例如可乐的杯子,矿泉射手等等。它上面包含了视频的相关信息(视频信息,音频信息,解码方法等等),一种封装格式直接反应了视频的文件格式,封装格式:就是将早已编码压缩好的视频数据和音频数据根据一定的格式放在一个文件中.这个文件可以称为容器.其实可以理解为这只是一个壳体.一般我们不仅仅只储存音频数据和视频数据,就会储存一下视频同步的元数据.诸如字幕.这多种数据会不同的程序来处理,并且它们在传输和储存的时侯,这多种数据都是被绑定在一起的.

图片[5]-音频编码1.1为什么需要采样位数,采样频率的主要作用-唐朝资源网

2.6其他问题强制I帧(IDR帧)

即时解码刷新,虽然就是I帧,不过他是第一个I帧,或则是强制I帧,它的作用就是立刻刷新,使错误不至于传播,从IDR开始,重新算一个新的序列开始编码。IDR会造成DPB(参考序列表)清空,而I帧不会,IDR帧一定是I帧,并且I帧不一定。一个图象序列中可以有好多I帧,一个I帧后的图象可以引用I帧之间的图象做运动参考,并且对于IDR帧来说,IDR帧后的图象不能引用IDR之前的帧内容,由于从IDR帧相当于重新开始。

录象数据解码播放必须从I帧开始,而顾客端录象的时侯开始时间点不一定是I帧,例如分辨率25fps、I帧间隔100帧的情况下,每4秒才一个I帧,录象播放可能存在1~4秒的延时,所以录象的时侯可以强制设备生成一个I帧。

当h264数据在使用udp传输时,丢包是一件很常见的事情,当接收端丢包发生后,应当通知发送端,让发送端立即重新发送一个关键帧。此时就须要编码器无视关键帧间隔立即编出一个关键帧。

视频卡机/卡顿缘由

我们平时在观看视频的时侯,出现视频的蓝屏或则卡顿,第一反应就是我们的网路出现了问题,虽然我们的网路没有问题,是我们在解码的时侯I帧,B/P帧出现了遗失

假如GOP分组中的P帧遗失都会导致解码端的图象发生错误.

为了防止死机问题的发生,通常假如发觉P帧或则I帧遗失.就不显示本GOP内的所有帧.只到下一个I帧来后重新刷新图象.

当这时由于没有刷新屏幕.丢包的这一组帧全部丢弃了.图象都会卡在那里不动.这就是卡顿的诱因.所以总结上去,死机是由于你丢了P帧或则I帧.造成解码错误.而卡顿是由于为了怕死机,将整组错误的GOP数据丢弃了.直达下一组正确的GOP再重新刷屏.而这中间的时间差,就是我们所体会的卡顿.

解码H264视频出现白屏或马赛克的问题_zhoubotong2012的博客-CSDN博客_h264死机

VLC播放h264头几秒死机问题?

看了下h264码率,sps与pps后第一个nalu类型为sei(附加提高信息),也就是0x00000106起始码开头的,不是I帧,所以会出现这个情况。vlc没有对sei信息做处理,造成把sei与前面数据混在一起解码处理,出现丢数据的表象,而造成死机。vlc处理首帧的正确坐姿是:SPS+PPS+Iframe。前面遇到sei类型nalu数据直接扔掉,之后献给vlc播放,就正常了。前面又测了其他mp4文件,发觉这种mp4文件mdatbox储存的第一个nalu类型都为sei。所以可以采取扔掉sei,读取完SPS+PPS后献给vlc后,跳过sei,从I帧开始继续献给vlc播放就可以防止播放出现白屏。

参考

常见音频编码格式解析_houxiaoni01的博客-CSDN博客_常见的音频文件格式有什么

音频编解码介绍(最全)-知乎

H264简介_屁猪仔的博客-CSDN博客_h264

(145条消息)怎样发送和接收RTP封包的H264,用FFmpeg解码_zhoubotong2012的博客-CSDN博客_发送rtp包

© 版权声明
THE END
喜欢就支持一下吧
点赞243赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容