CABAC流程
基于android的智能手机视频监控系统的设计与实现.

基于android的手机视频监控系统的设计移动流媒体技术就是把连续的声音影像信息经过压缩处理后传送到网络服务器上,让终端用户能够在下载的同时观看收听,而不需要等到全部的多媒体文件下载完成就可以即时观看的技术。
移动流媒体技术的出现是伴随这移动通信技术的发展和网络音视频技术的进步,其只要是关于流媒体数据从采集到播放整个过程中所需要的核心技术。
移动流媒体数据流具有三个特点:连续性、实时性、时序性。
所以流媒体数据流具有严格的前后时序关系。
流媒体传输技术实在FTP/TCP的基础上发展而来的。
服务器按照一定的顺序将文件分割成若干个数据分段,然后封装到分组中依次进行传输,客户端接收到分组后重新将其组装起来,最终形成一个与原来一样的完整文件。
流媒体播放技术有优点也有缺点。
优点是能够及时传送随时播放,虽然在开始阶段需要一定的时间进行缓冲,但依然能够在实时性要求高的领域具有无可比拟的优势;缺点是由于网络的速率不稳定性,当播放速率大于传输速率时,视频播放将出现停滞,时断时续的现象。
基于android的视频监控系统分为四个模块:依次为采集模块、编码模块、视频传输模块、解码模块、显示模块。
如下图所示:一视频采集模块Android摄像头采集的到的视频格式为YUV420格式的视频流。
采集模块的实现可以在android的应用层中通过编写代码来实现。
二编码模块数字视频编码标准主要由两个标准化组织制定。
一个是由国际标准化组织(ISO)和国际电工委员会(IEC)组建的活动图像专家组(MPGE),另一个是国际电信联盟电信标准局(ITU-T)的视频编码专家组(VCEG)。
MPEG制定的视频编码标准有MPEG-1,MPEG-2,MPEG-4。
ITU一T制定的视频编码标准有H.261和H.263。
为了促进下一代多媒体通信的应用, MPEG和VCEG共同成立了联合视频工作组(JVT),共同开发了视频编码标准H.264。
目前,H.264是最先进的视频编码标准。
多媒体简答题

1、多媒体对数据库设计的影响主要表现在哪些方面?数据量巨大且媒体之间量的差异也极大,从而影响数据库的组织和存储方法;媒体种类的增多增加了数据处理的困难;数据库的多解查询,非精确匹配和相似性查询将占相当大的比重;用户接口的支持;多媒体信息的分布对多媒体数据库体系带来了巨大的影响;短事务处理与长事务处理;服务质量的要求;多媒体数据管理还有考虑版本控制的问题。
2、MPEG图像的三种类型:I帧、P帧、B帧,若显示顺序为:1 2 3 4 5 6 7I B B P B B P那么、传输的顺序应如何?依据是什么?(1)传输的顺序应如下:1 423 7 5 6I P B B P B B(2)理由:MPEG图像有三种类型:I帧、P帧、B帧;I帧为帧内图,P帧为前项预测图可根据I帧进行预测,B帧为双项预测图可根据l帧或P帧进行预测。
3、说明MPEG4和MPEG2标准的根据区别,MPEG4具有什么特点?MPEG4和MPEG2标准的根本区别是:MPEG4是基于内容的压缩编码方法。
MPEG4具有高校压缩、基于内容交互(操作、编辑、访问等)以及基于内容分级扩展(空域扩展、时域扩展)等特点。
4、超文本和超媒体具有哪些特点?超媒体=超文本+多媒体. 超媒体在本质上和超文本是一样的,只不过超文本技术在诞生的初期管理的对象是纯文本,所以叫做超文本。
随着多媒体技术的兴起和发展,超文本技术的管理对象从纯文本扩展到多媒体,为强调管理对象的变化,就产生了超媒体这个词。
种媒体信息;网络结构形式;交互特性。
5、H.264标准采用了哪些关键技术?其采用的熵编码方案是什么方案?H.264标准采用的关键技术有帧内预测、帧间预测、整数DCT变换、熵编码(CAVLC和CABAC)。
在H。
264中采用了两种不同的熵编码方法:通用可变长编码(UVLC)和基于文本的自适应二进制算术编码(CABAC)6、论述视频会议系统的组成以及各部分的主要功能。
①答:视频会议终端;视频会议终端的主要功能是:完成视频音频信号的采集、编辑处理及输出、视频音频数字信号的压缩编码和解码,最后将符合国际标准的压缩码流经线路接口送到信道,或从信道上将标准压缩码流经线路接口送到终端。
高清视屏hd知识介绍

什么是HD:简单来说,通常把物理分辨率达到720p以上的格式则称作为高清,英文表述High Definition,简称HD。
----------------------------------------------------------------------------------------------------------------720P、1080I、1080P说的只是影片的分辨率和扫描方式,P(Progressive)表示―逐行扫描‖I(Interlaced)表示―隔行扫描‖a表示采用了变形技术的纵向分辨率为1080的格式720P720P是美国电影电视工程师协会(SMPTE)制定的高等级高清数字电视的格式标准,有效显示格式为:1280×720.SMPTE(美国电影电视工程协会)将数字高清信号数字电视扫描线的不同分为1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。
720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。
是数字电影成像技术和计算机技术的融合。
1080i1080i 是一种高清晰度电视信号格式,―1080‖表示垂直方向有1080条水平扫描线,―i‖表示采用交错式扫描视频显示方式(interlaced scan)。
1080i 先扫描单数的垂直画面,再扫描双数的垂直画面,故只需要1080p一半的带宽,但是碰到高速移动的物体时,物体周围就有晃动现象。
早期的高清析度电视都是这种规格,因为早期的带宽较小,无法一次送出全部,故用这种方式一次送一半来减少带宽。
1080P1080P是一种视频显示格式,是美国电影电视工程师协会(SMPTE)制定的最高等级高清数字电视的格式标准,是数字电影成像技术和计算机技术的完美融合。
有效显示格式为:1920×1080,像素数达到207.36万。
其数字1080则表示垂直方向有1080条扫描线,字母P意为逐行扫描(Progressive Scan)。
H264熵编码具体算法

CAVLC即基于上下文的自适应变长编码。CAVLC的本 质是变长编码,它的特性主要体现在自适应能力上, CAVLC可以根据已编码句法元素的情况动态的选择编码中 使用的码表,并且随时更新拖尾系数后缀的长度,从而获 得极高的压缩比。H.264标准中使用了CAVLC对4*4模块的 亮度和色度残差数据进行编码。
解析除拖尾系数外的非零系数的幅值level1确定后缀长度suffixlength2根据码流查表96得到前缀levelprefix3根据前缀和后缀得到levelcodelevelprefixsuffixlengthlevelsuffix4levelcode为偶数levellevelcode22levelcode为奇数levellevelcode125根据设定的阈值确定是否updatesuffixlegth6cavlc与uvlc比较在相同码率的情况下用cavlc编码的psnr的值高于用uvlc编码的psnr的值并且随着比特率的增加cavlc的优势更加明显h264avc68cavlc基于上下文自适应的可变长编码69cabac基于上下文的自适应二进制算术熵编码610码率控制611去方块滤波612其余特征cabac1
∴经查表可知码流为0000100 ∴code=0000100
4.3 编码每个拖尾系数的符号 对于每个拖尾系数(±1)只需要指明其符号,
其符号用一个比特表示(0表示+ ,1表示-)。编 码的顺序是按照反向扫描的顺序,从高频数据 开始。 例:设有一个4*4块数据(假定NC=0)
0 3 -1 0
0 -1 1 0
0 3 -1 0 0 -1 1 0
1000
0000 ∴TotalZeros=3 又∵TotalCoeffs(非零系数的数目)=5 ∴查表可得码流为111 ∴code=0000100 011 1 0010 111
CABAC举例

上下文建模为基本的CABAC 编码过程,一种regular coding mode 另一种为 bypass coding mode.只有regular coding mode 应用了上下文模型,而直通模式用于加速编码流程,当概率近似为50%的时候。
这部分主要说明regular coding mode的进程。
这里,先说理论,再讲流程。
理论:1,CABAC 算术编码基础算术编码的复杂度主要体现在概率的估计和更新,CABAC建立了一个基于查表的概率模型,将0~0.5 划分为64个概率量化值,这些概率对应于LPS字符,而MPS的概率为(1-Plps),概率的估计值被限制在查表内,概率的刷新也是依据于查表。
如果当前出现的字符是MPS,则Plps 变小。
划分子区间的乘法运算 R=R x Px对于这里的乘法运算,CABAC首先建立了一个二维表格,存储预先计算好的乘法结果,表格的入口参数一个来自Px( 对应于theta,概率量化值),另一个来自R(R的量化为:p=(R>>6)&3 ),流程图:图中,灰色部分是概率的刷新部分,表TABRangeLPS存储预先计算好的乘法结果,表TransIDxLPS是与对应的概率表。
有三个值是比较特殊的,:theata=0 时,LPS的概率已达到了最大值0.5,如果下一个出现的是LPS,则此时LPS和MPS的字符交换位置.Theta=63对应着LPS的最小概率值,但它并没有纳入CABAC的概率估计和更新的范围,这个值被用做特殊场合,传递特殊信息,比如,当解码器检测到当前区间的划分依据是这个值时,认为表示当前流的结束.Theta=62 ,这是表中的最小值,它对应的刷新值是它自身,当MPS连续出现,LPS 的概率持续减小,到62保持不变。
2 CABAC 上下文模型CABAC将片作为算术编码的生命周期,h.264将一个片内可能出现的数据划分为399个上下文模型,每个模型均有自己的CtxIdx(上下文序号),每个不同的字符依据对应的上下文模型,来索引自身的概率查找表。
急救cab流程

CAB流程是心肺复苏(Cardiopulmonary Resuscitation,CPR)的简化术语,它代表以下三个基本步骤:
1. C(Circulation,循环):进行胸外心脏按压,以恢复患者的血液循环。
按压频率应至少为100次/分钟,按压深度至少为5厘米但不超过6厘米,按压位置在胸骨中下段。
2. A(Airway,气道):打开患者的气道,以确保空气可以自由进入肺部。
这通常通过仰头抬颌法来实现,即将患者的头部向后仰,抬起下颌,使舌根上提,露出喉咙。
3. B(Breathing,呼吸):进行人工呼吸,为患者提供氧气。
首先,确保患者口腔内没有异物,然后进行两次口对口的人工呼吸,每次吹气时间超过1秒。
吹气前,救护者应深吸一口气。
在实施CAB流程时,应根据患者的反应和生命体征适时进行评估和调整。
如果在进行CPR后患者没有恢复自主呼吸或心跳,应该继续进行cycles of CPR(通常为30次按压后进行两次人工呼吸)直到紧急医疗人员到达现场,或者患者被转移到设备齐全的医疗机构。
码率、帧率、分辨率

视频码率,帧率和分辨率到底哪一个影响电影的清晰度码率:影响体积,与体积成正比:码率越大,体积越大;码率越小,体积越小。
码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。
也就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件,但是文件体积与取样率是成正比的,所以几乎所有的编码格式重视的都是如何用最低的码率达到最少的失真,围绕这个核心衍生出来cbr (固定码率)与vbr(可变码率),“码率”就是失真度,码率越高越清晰,反之则画面粗糙而多马赛克帧率:影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。
如果码率为变量,则帧率也会影响体积,帧率越高,每秒钟经过的画面越多,需要的码率也越高,体积也越大。
帧率就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次,分辨率:影响图像大小,与图像大小成正比:分辨率越高,图像越大;分辨率越低,图像越小。
清晰度在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,图像越不清晰,分辨率越低,图像越清晰。
在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;码率越低,图像越不清晰。
带宽、帧率例如在ADSL线路上传输图像,上行带宽只有512Kbps,但要传输4路CIF 分辨率的图像。
按照常规,CIF分辨率建议码率是512Kbps,那么照此计算就只能传一路,降低码率势必会影响图像质量。
那么为了确保图像质量,就必须降低帧率,这样一来,即便降低码率也不会影响图像质量,但在图像的连贯性上会有影响。
H.264H.264是在MPEG-4技术的基础之上建立起来的,其编解码流程主要包括5个部分:帧间和帧内预测(Estimation)、变换(Transform)和反变换、量化(Quantization)和反量化、环路滤波(Loop Filter)、熵编码(Entropy Coding)。
H.264编码原理

H.264通信1012 严亮 1020119208 一.原理H.264是一种高性能的视频编解码技术。
目前国际上制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准有H.261、H.263、H.263+等,另一个是“国际标准化组织(ISO)”它制定的标准有MPEG-1、MPEG-2、MPEG-4等。
而H.264则是由两个组织联合组建的联合视频组(JVT)共同制定的新数字视频编码标准,所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高级视频编码(Advanced Video Coding,AVC),而且它将成为MPEG-4标准的第10部分。
因此,不论是MPEG-4 AVC、MPEG-4 Part 10,还是ISO/IEC 14496-10,都是指H.264。
H.264最大的优势是具有很高的数据压缩比率,在同等图像质量的条件下,H.264的压缩比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。
举个例子,原始文件的大小如果为88GB,采用MPEG-2压缩标准压缩后变成3.5GB,压缩比为25∶1,而采用H.264压缩标准压缩后变为879MB,从88GB到879MB,H.264的压缩比达到惊人的102∶1!H.264为什么有那么高的压缩比?低码率(Low Bit Rate)起了重要的作用,和MPEG-2和MPEG-4 ASP等压缩技术相比,H.264压缩技术将大大节省用户的下载时间和数据流量收费。
尤其值得一提的是,H.264在具有高压缩比的同时还拥有高质量流畅的图像,正因为如此,经过H.264压缩的视频数据,在网络传输过程中所需要的带宽更少,也更加经济。
H.264和以前的标准一样,也是DPCM加变换编码的混合编码模式。
但它采用“回归基本”的简洁设计,不用众多的选项,获得比H.263++好得多的压缩性能;加强了对各种信道的适应能力,采用“网络友好”的结构和语法,有利于对误码和丢包的处理;应用目标范围较宽,以满足不同速率、不同解析度以及不同传输(存储)场合的需求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算术编码流程:CABAC编码首先要说明的是CABAC的生命期是SLICE,因此本篇所讲的也是一个SLICE里CABAC的流程,其次对于我们来说场模式几乎用不到,所以本文的编码流程只使用帧模式,因此实际上用到的表只有277个, 当然如果我写成460, 不是说里面所有表都用到的. 这里只是声明一下这个问题, 如果大家实际操作的时候发现模型表序号始终不过276那是很正常的. 本文参考了T264的代码, 应此一帧里只有一个SLICE. 而本文用的变量则采用标准里的变量.本文不会讲CABAC的原理, 想要了解原理请参考FTP上的<<Context-based adaptive binary arithmetic coding in the H.264AVC video compression standard>>片级:即以下步骤在片期间只做1次1.初始化上下文模型先根据SliceQP算出460个模型表里的pStateIdx和valMPS, 构成一张初始表,根据标准9.3.1.1里的公式, 同时可以参考T264_cabac_context_init函数. 这张表不要和模型表弄混,虽然都是399维的, 但我们宏块级编码过程中实际用的只是这张表, 而不是标准里的那张模型表Table 9-23, 9-23这张表是用来算由pStateIdx和valMPS构成的初始表的.2.初始化概率的下限和区间然后就是初始化CABAC的初值, 下界指针,区间范围,可参考T264_cabac_encode_init函数.解:下界指针codILow为0,区间范围codIRange为(0x1FE)510宏块级:以下则是每个宏块都要做一次的, 这一级中会处理很多的语法元素, 这里我只用前2个语法元素做为例子:假设:mb_skip_flag = 1mb_type = 33.语法元素二值化H.264 通过二进制化把多维算术编码转化为二进制算术编码,提高了运算速度。
语法元素二进制化就是把非二进制的符号映射成若干位的二进制串。
CABAC 引入了二进制化预处理过程来减小要编码的语法元素符号集的大小, 对于给定的语法元素用一个惟一的二进制串代替。
CABAC 二进制化方案由基本方案,串接方案(参考标准子条款9.3.2.3,9.3.2.6)以及特别的手工选择方案(参考标准子条款9.3.2.5)组成。
基本方案有一元码、截断一元码、K 阶指数哥伦布码和定长码4 种;串接方案由基本方案串接而成;手工选择方案有5 种,专门针对mb_type 和sub_mb_type 这两种语法元素。
对语法元素的二进制化方案参考标准表9‐25。
经二进制化编码输出的是MPS 概率极高的比特流,这样可以达到极高的压缩效果。
4. CABAC编码处理流程首先mb_skip_flag标志进行CABAC编码, 由于这个元素本身就是2值的,所以直接就可以进行上下文模型选择了:1.求ctxIdx上下文模型索引值1)由标准Table 9-11知道, P帧(这里要注意是slice_type==P, 不是mb_type)的这个元素用9-13号表, B帧用9-14号表.解:假设P帧得到ctxIdxOffset=112)由于这个元素只有1个bit, 因此只要算第一个bit的ctxIdxInc 就可以了, 参考标准Table 9-30,根据9.3.3.1.1子条款可以知道这一位的ctxIdxInc可能是0, 1, 2中的一个, 变量condTermFlagN (N 为A 或 B)的值推导如下:—如果mbAddrN不可用或宏块mbAddrN 的mb_skip_flag等于1,则condTermFlagN被置为0;—否则condTermflagN置为1。
变量ctxIdxInc 为: ctxIdxInc = condTermFlagA + condTermFlagB. 解:如果全是skip模式得到ctxIdx=132. 规则算术编码过程下来就是算术编码部分了, 简单提一下基本原理: 在CABAC中为了减少R LPS= R*p LPS这个区间变换公式的开销, 用128个有限状态(实际可用的为126)代替p LPS , 用rangeTab这张表代替了R LPS, 见标准Table 9-35. 可以参考T264中的T264_cabac_encode_decision函数, 看一下具体流程:1)查表得pStateIdx和valMPS▲获得当前bin的pStateIdx和valMPS(来自片级计算的那张初始表) 假设cabac_init_idc=0查表获得:m=21,n=0假设SliceQP Y=26preCtxState = Clip3( 1, 126, ( ( 21 * Clip3( 0, 51, 26 ) ) >> 4 ) + 0 )preCtxState=34if( preCtxState <= 63 ) {pStateIdx = 63 - preCtxStatevalMPS = 0} else {pStateIdx = preCtxState - 64valMPS = 1}解:pStateIdx=29,valMPS=0;2)求得变换后的区间▲根据标准9.3.3.2.1子条款, 求得qCodIRangeIdx用来索引表rangeTab, 即可以求得变换后的区间了.解:qCodIRangeIdx = (codIRange>>6)&3qCodIRangeIdx = (510>>6)&3 = 2.查表9-35,codIRangeLPS =46▲修正区间codIRange = codIRange – codIRangeLPS解:codIRange =510-46=4643)更新下边界,区间,概率状态索引值▲判断当前的bin是否为最有可能的值, 如果不是(binVal!= valMPS),则更新区间下边界codILow = codILow + codIRange, 同时修正区间codIRange = codIRangeLPS;然后判断当前状态, 如果已经达到状态0, 是则把valMPS的值取反(即0,1互换), 如果还有没达到0, 则进行LPS 的状态迁移,具体参看标准Table 9-36的状态迁移表中的transIdxLPS解:codILow = codILow + codIRange=0+464=464codIRange= codIRangeLPS =46查表9-36,pStateIdx=transIdxLPS[29]=22▲如果当前的binVal值等于valMPS, 就比较简单了, 直接进行状态迁移, MPS的状态迁移也很简单, 直接数据+1就可以了(最大63),具体参考标准Table 9-36的状态迁移表中的transIdxMPS, 状态的转移其实就是修改了460个模型的初始表.解:pStateIdx=min(29+1,62)=304)编码归一化▲区间重整, 如果区间过小则输出一些bit, 这样可以不用把数据全部编码完再输出, 可以编一部分输出一些.编码归一化算法如下:While(R<0x100){if(L<0x100){Put_Bits_Outstanding(0,binsOutStanding);}Else{If(L<0x200){L=L-0x100;bitsOutSanding=bitsOutStanding+1;}Else{L=L-0x200;Put_Bits_Outstanding(1,binsOutStanding);}}R=R<<1;L=L<<1;}算法中,Put_Bits_Outstanding是根据下溢的状态进行输出的。
Put_Bits_Outstanding(bitVal,binsOutStanding){putbit(bitVal);While(bitsOutstanding>0){Putbit(~bitVal);binsOutStanding= binsOutStanding-1;}}解:(1)codILow = codILow-0x100=464-256=208binsOutStanding = binsOutStanding+1=0+1=1 codIRange= codIRange<<1=46*2=92codILow= codILow <<1=208*2=416(2)codILow = codILow-0x100=416-256=160 binsOutStanding = binsOutStanding+1=1+1=2 codIRange= codIRange<<1=92*2=184codILow= codILow <<1=160*2=320(3)codILow = codILow-0x100=320-256=64 binsOutStanding = binsOutStanding+1=2+1=3 codIRange= codIRange<<1=184*2=368 codILow= codILow <<1=64*2=1283旁路编码过程对于概率近似0.5 的符号(在标准表9‐30 中标为na 的符号)则通过旁路编码器进行编码,旁路编码器不需要概率更新以提高计算速度。
在旁路编码器中把区间更新和归一化集成在一起,如图4 所示:4算术编码器的判定编码过程算术编码器的终止流程如图5 所示。
在ctxIdx 等于276 时,语法元素end_of_slice_flag 和语法元素mb_type 指示I_PCM 的二进制码的编码都需使用该流程。
如图5 所示:当要编码的 binVal 值等于 1 时,结束 CABAC 编码,应用图 9-12 所示的流程。
在该流程中,由 WriteBits( B, N )写入的最后一个比特等于1。
当解码end_of_slice_flag 时,最后一个比特为rbsp_stop_one_bit 。
5.下一个语法元素编码下面就是开始编码第二个语法元素了: mb_type1) 不同于上一个语法元素mb_skip_flag, mb_type这个语法元素本身并不是二值化的, 因此编码的第一步是进行二值化, 查阅标准Table 9-25可知mb_type的二值化方法需要参考9.3.2.5子条款, 由该条款可知mb_type的二值化相对简单, 可以直接参考表得到, 例如P片中某宏块mb_type为3, 因此我们就得到了标准中P_8*8的二值化串为001 2) 下来是上下文模型选择, 由Table 9-11可知P的mb_type元素起始表是Table 9-13号表, 然后参考标准表Table 9-30, 计算bin串中每个bin的ctxIdxInc值,由表可知bin0固定是0, bin1固定是1, bin2参考9.3.3.1.2如果bin1=0, ctxIdxInc=2 ,否则bin1=1,ctxIdxInc=3,因为bin1=1所以bin2=3.至此二进制串所有位的表号可以用14+的ctxIdxInc来得到了ctxIdx.3) 下来就是算术编码部分,这个部分于mb_skip_flag的算术编码部分步骤一样.这里要提的是, 第一步获得当前bin的pStateIdx和valMPS 的模型表已经被更新了(是表被更新,但不一定是当前表), 还记得么? 是在上一个语法元素的状态转移的时候更新的.下面的语法元素就是按照标准7.3.5的语法一一编码的, 其过程和上面2个语法元素的编码过程大同小异,就不一一细述了.……如此做完所有的宏块里的语法元素6. 字节填充的过程要处理的图像最后一个条带的最后一个宏块的编码完成并且封装后,还有一个字节填充的过程。