视频数据的打包、编解码方法及装置及系统的制作方法

文档序号:7744862阅读:179来源:国知局
专利名称:视频数据的打包、编解码方法及装置及系统的制作方法
技术领域
本发明涉及视频通信技术领域,尤其涉及一种视频数据传输技术。
背景技术
在视频编解码系统中,可以将图像划分成若干图像块或者宏块,并以块或宏块为 单位进行运动估计,将运动估计后的残差进行变换、量化,最后对量化系数进行熵编码,将 熵编码后得到的信息写入码流中。在码流中包含了连续图像编码信息,并可称其为视频流。为将所述视频流发送给 解码端,则在编码端还需要对所得到的视频流经过数据分组、归类等打包处理将其分成若 干含有编码数据的数据包,以便通过数据包经特定网络将相应的视频流传输至解码端。其 中,打包处理的目的在于将视频流进行分割以便其可以适合在相应网络中传输。在视频编解码系统中,解码端在接收到编码端发来的视频流对应的数据包之后会 以一定规则将数据包中的内容以一定方式组合起来,并经反量化、反变换、运动补偿处理后 得到重建图像。在视频编码过程中,在将图像分割成宏块后还可以将宏块以一定组织方式组合在 一起称之为slice (条带),且相应的条带可以组合为相应的条带集。此时,若可以针对相应 的条带或条带集采用合理的打包处理方式,则将有效处理网络丢包及误差扩散的现象。目前,在H. 264标准,针对条带及条带集采用的打包方式包括将编码条带数据得 到的码流将被封装在一个NAL(网络提取层)单元中,并将单个NAL单元打成一个数据包。 在AVS标准中,采用的打包方式包括首先将码流中每两个相邻的起始码前缀(0x000001) 之间的数据转换为一个NAL单元,然后,再将单个NAL单元打成一个数据包。在实现本发明过程中,发明人发现现有技术中至少存在如下问题在上述针对视频流的打包方式中,未考虑条带的划分方式及图像中条带的组合关 系等因素,使得相应的打包方式处理网络丢包及抗误差的能力大大降低,进而导致视频传 输性能下降。

发明内容
本发明的实施例提供了一种视频流传输的方法及装置,以有效提高抗网络丢包及 抗误差的能力,及解码性能,改善视频传输效果。本发明实施例提供了一种视频数据的打包方法,包括获取待发送的条带集,所述的条带集包括一个或多个条带;根据条带集中的各条带之间的编码方式对条带集中包含的一个或多个条带进行 打包操作。本发明实施例提供了一种视频数据的打包装置,包括条带集获取单元,用于获取待发送的条带集,所述的条带集包括一个或多个条 带;
打包操作单元,用于根据所述条带集获取单元获取的条带集中的各条带之间的编 码方式对条带集中包含的一个或多个条带进行打包操作。一种视频编码的方法,包括在编码条带过程中,在宏块数据编码结束后写入熵编码填充符号,所述宏块包含 条带中的最后一个宏块及最后一个宏块之前的至少一个宏块。一种视频编码装置,包括条带编码单元,用于对当前条带进行编码操作;熵编码填充符号写入单元,用于在所述条带编码单元编码条带过程中,在宏块数 据编码结束后写入熵编码填充符号,所述宏块包含条带中的最后一个宏块及最后一个宏块 之前的至少一个宏块。 一种视频解码的方法,包括在解码条带过程中,在宏块数据解码结束后读取熵编码填充符号,所述宏块包含 条带中的最后一个宏块及最后一个宏块之前的至少一个宏块;读取熵编码填充符号后,检测条带解码是否结束。一种视频解码装置,包括熵编码填充符号读取单元,用于在解码条带过程中,在宏块数据解码结束后读取 熵编码填充符号,所述宏块包含条带中的最后一个宏块及最后一个宏块之前的至少一个宏 块;判断单元,用于在所述熵编码填充符号读取单元读取到的熵编码填充符号后,检 测条带解码是否结束。一种视频编码的方法,包括在条带熵编码结束后,根据条带熵编码结束时熵编码可能写入码流的最大比特数 目进行条带数据码流的填充操作。一种视频编码装置,包括条带编码单元,用于对当前条带进行编码操作;码流填充单元,用于在所述条带编码单元结束针对条带的熵编码后,根据条带熵 编码结束时熵编码可能写入码流的最大比特数目进行条带数据码流的填充操作。一种视频解码的方法,包括在解码条带过程中,在宏块数据解码结束后,在比特流指针在比特流指针当前位 置后指定位置检测条带解码是否结束,所述指定位置根据编码端在条带熵编码结束时熵编 码可能写入码流的最大比特数目确定。一种视频解码装置,包括解码单元,用于对当前条带进行解码操作;解码判断单元,用于在所述解码单元在完成宏块数据解码结束后,在比特流指针 在比特流指针当前位置后指定位置检测条带解码是否结束,其中,所述指定位置根据编码 端在条带熵编码结束时熵编码可能写入码流的最大比特数目确定。由上述本发明的实施例提供的技术方案可以看出,本发明实施例由于采用了根据 条带之间的编码方式对视频流进行打包处理的实现方案,从而可以保证在通过对打包后的 数据包进行视频流传输的过程中,可以有效处理网络丢包及误差扩散的现象,提高视频编解码系统的性能。本发明实施例中,由于在编码条带过程中,向码流中写入了相应的结束参 数信息,从而使得在解码端可以快速、准确识别出条带结束点,从而提高解码的准确性,进 一步提高了视频编解码系统的性能。


图1为本发明实施例中的条带集划分示意图;图2为本发明实施例提供的装置的结构示意图;图3为本发明实施例提供的一种编解码装置及系统的结构示意图;图4为本发明实施例提供的另一种编解码装置及系统的结构示意图。
具体实施例方式本发明实施例中,在获取待发送的包含一个或多个条带的条带集后,可以根据条 带集中的各条带之间的编码方式对条带集中包含的一个或多个条带进行打包操作。其中, 所述的编码方式可以但不限于包括独立编码方式或非独立编号方式等。本发明实施例中,具体可以根据条带集参数的设置情况以及网络传输条件等,以 条带集或者条带集中的若干条带为单位进行打包,所述的条带集中包含一个或多个条带, 所述的条带可以包括按照扫描顺序连续的宏块,例如,按照光栅扫描顺序连续的宏块。其 中,相应的条带集参数可以包括但不仅限于用于标识当前条带是否属于当前条带集的参 数,或者,用于标识当前条带集中条带是否具有编解码独立性的参数(即对条带编码过程 中是否采用了独立编码方式进行编码的参数),以及其它与当前条带集打包相关的参数,等等。本发明实施例中,根据条带集参数对条带集进行打包操作的过程具体可以包括 若条带集中均为采用独立编码方式编码的条带,则将条带集中的各条带分别各自独立封装 于一个数据包中;若条带集中包含至少一个采用非独立编码方式编码的条带,即条带集中 包含未采用独立编码方式编码的条带,则将条带集中的各条带组合封装于一个数据包中。在上述打包处理过程中,当需要在一个数据包中封装一个条带集中的多个条带 时,则还可以根据当前网络带宽情况进行打包处理,具体可以为首先,可以根据当前网络 带宽确定一个数据包中可以封装的条带数目,之后,根据所述可以封装的条带数目,将条带 集中的条带封装于一个或多个符合当前网络带宽传输要求的数据包中。进一步地,本发明实施例中,可以采用的打包方式包括当网络带宽可保证将条带集中所有条带一起打包传输时,则根据当前条带集参数 的设置,可以将条带集中的所有条带作为一个整体进行打包。当网络带宽不能保证将条带 集中所有条带一起打包时,或者,根据当前条带集参数确定不适合将整个条带集一起打包 时,则可以根据网络带宽的情况对条带集进行适当分组,将条带集中的若干条带分开进行 打包,即以条带集中的若干个条带为单位进行打包。其中,在当网络带宽可保证条带集中所有条带一起打包的情况下,若当前条带集 中的至少一个条带与其他条带之间不具有编解码独立性(即未采用独立编码方式进行编 码,而是采用条带之间依赖其他条带的数据的编码方式进行编码),则可以将当前条带集中 的所有条带作为一个整体进行打包。否则,即当前条带集中所有条带之间具有编码独立性,可以将条带集中的各个条带单独进行打包,即在丢掉单个包时也不影响针对条带集中其它 数据包的解码,以保证相应的抗误码性能。本发明实施例中,若需要对条带集中多于一个数目的条带一起打包,则相对于现 有技术中采用的打包处理方式,需要在原有基于单个条带打包模式的基础上进行相应的操 作,以适应新的打包形式的需求;例如,对于基于起始码前缀的码流(如AVS视频流等),可 以不再将条带之间的起始码分割去掉,只去掉第一个条带前的起始码,对于需要封装于同 一数据包中的该条带集中的其他条带,则保留相应的条带起始码,之后,将多个条带映射成 一个NAL单元;或者,对于基于NAL单元的码流,不再将单个条带映射成一个NAL单元,而是 将需要的多个条带一起组合成一个NAL单元。需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部 分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取 存储介质中,该程序在执行时,包括本发明实施例中描述的全部或部分处理步骤,其中,所 述的存储介质可以但不限于为R0M/RAM、磁碟或光盘等。为便于对本发明实施例的理解,下在将结合附图对本发明实施例的具体实施方式
进行详细说明。假设,采用以下两个相关参数标识条带集(Dslicejetjndex参数即条带集序号,用于标识图像内的不同条带集,具有 相同slice_set_index值的条带属于同一条带集;(2)slice_independency参数即条带独立性标志,用于标识当前条带集内各条 带是否具有编解码独立性,例如,可以采用slicejnd印endency值为1时表示当前条带内 宏块编解码时只能使用本条带内的数据,slicejncbpendency值为0时表示当前条带内宏 块编解码时可以使用本幅图像内具有相同slice_set_index的条带数据,即同一条带集中 的其他条带对应的数据。相应的条带集划分的方式可以参照图1所示,其中,A,B0, C,Bi,D,B2, E为各个条 带;Row 0 Row 7为图像中的8个宏块行,0 7为宏块行在图像中的垂直位置;Col 0 Clo 7为图像中8个宏块列,O 7为宏块列在图像中的水平位置。假设A,C,D同属一个条带集,BO, Bi, B2属于另一个条带集,条带E属于第三个条 带集;则可以令 A,C,D 三个条带 slice_set_index 为 0,B0,B1,B2 三条带 slice_set_index 为 1 ;E 的 slice_set_index 为 2 ;各条带对应的slice_independency值可以设置为A,C,D三个条带的slice_independency值分别设置为1,1,1, BO, B1, B2三个条带的slice_independency值分别设 置为0,0,0 ;条带E独自属于一个条带集,故其slice_independency值可以设置为1。根据上述slice_independency值的设置可知A,C,D三个条带中任一条带内宏块 的解码处理不能使用其他两个条带的数据;B0,B1,B2三个条带中任一条带内宏块的解码 处理可以使用其他两个条带的数据;E条带内宏块的解码处理不能使用其它条带的数据。针对图1所示的图像,当网络带宽可保证条带集中所有条带一起打包时,具体可 以采用以下打包处理方式对各条带进行打包(1)针对条带A,C,D的打包方式由于条带集1中的三个条带A,C,D编解码具有独立性,因此可以将A,C,D三个条带任意组合进行打包;若为了保证一定的抗误码性能,则可以将A,C,D分开进行打包,这 样,若其中任意一个包丢失将不会影响针对其它包的解码操作;(2)针对条带B0,Bi, B2的打包方式由于条带集2中的三个条带B0,Bi, B2编解码不具有独立性,因此可以将B0,Bi, B2三个条带整体进行打包;例如,对于AVS的码流,只需将BO条带码流前的起始码前缀去 掉,到B2条带的数据结束为止,映射成一个NAL单元;对于以NAL为单元的H. 264标准中, 则可以将条带B0,Bi,B2的数据组合成一个NAL单元;(3)针对条带E的打包方式由于条带E独自成为一个条带集,且其编码具有独立性,故可以对其单独进行打 包。本发明实施例还提供了一种视频数据的打包装置,其具体实现结构如图2所示, 可以包括以下处理单元(1)条带集获取单元,用于获取待发送的条带集,所述的条带集包括一个或多个 条带,其中,所述的条带可以为按照扫描顺序连续的宏块,如按照光栅扫描顺序连续的宏块 等;(2)打包操作单元,用于根据所述条带集获取单元获取的条带集中的各条带之间 的编码方式对条带集中包含的一个或多个条带进行打包操作;该打包操作单元具体可以包括以下至少一个单元第一打包处理单元,用于在条带集中均为采用独立编码方式编码的条带时,将条 带集中的各条带分别各自独立封装于一个数据包中;第二打包处理单元,用于在条带集中包含至少一个采用非独立编码方式编码的条 带(即条带集中包含未采用独立编码方式编码的条带)时,将条带集中的各条带组合封装 于一个数据包中。可选地,为灵活适应网络带宽对数据传输的要求,相应的第二打包处理单元具体 可以包括以下单元条带数目确定单元,用于根据当前网络带宽确定一个数据包中可以封装的条带数 目,以便于根据该条带数目确定数据包的大小;打包执行单元,用于根据所述条带数据确定单元确定的数据包中可以封装的条带 数目,将条带集中的条带封装于一个或多个数据包中,即以所述条带数目个条带为单位进 行数据包的封装操作。可选地,针对不同的码流,该第二打包处理单元可以包括基于起始码前缀的码流打包单元,用于将多个条带中的第一个条带的起始码前缀 去掉,其他条带的起始码前缀保留,再将多个条带映射称为一个NAL单元;或者,基于NAL单元的码流打包单元,用于将需要组合打包的若干个条带数据组合成一 个NAL单元。另外,在一些视频编解码技术中,在编码过程中,写入码流中的条带数据的比特长 度具有不可预测的特性,从而使得解码端无法准确获知码流中条带数据的长度,使得解码 过程无法可靠地进行解码操作
为此,本发明实施例还提供了一种视频数据的编解码方案,以使得在视频数据处 理过程中,可以在对相应的数据进行编码或解码处理过程中,能够准确确定当前条带是否 编码或解码结束。现有技术中,在CABAC编码条带结束时,需要在条带结尾写入1比特结束当前条带 编码,若只在条带编码结束时写入该比特,解码端只能在条带最后一个宏块解码结束后读 取该比特,但解码端无法获知当前解码宏块是否是当条带的最后一个宏块,故只能在每个 宏块解码结束后读取一比特,然后进行条带解码结束判断。根据CABAC编解码特性,若在错 误的位置读取该比特则可能导致比特流指针偏移错误,从而可能导致条带解码提前(即仍 存在未被解码的宏块的情况)结束。为此,本发明实施例中,在编码端编码条带过程中,可以在宏块数据编码结束后写 入熵编码填充符号,其中,相应的宏块包含条带中的最后一个宏块及最后一个宏块之前的 至少一个宏块,即除了需要在条带的最后一个宏块编码结束后写入熵编码填充符号外,还需要在条带中的最后一个宏块之前的至少一个宏块编码结束后写入相应的熵编码填充符号。在上述写入熵编码填充符号的操作过程中,对于条带中的最后一个宏块之前的至 少一个宏块,具体可以在编码一宏块或一宏块行或指定数目宏块后,写入熵编码填充符号。 其中,若采用指定数目宏块后写入相应的熵编码填充符号,则可以根据在编解码端预先设 置该指定数目宏块的具体数目。在写入熵编码填充符号的操作过程中,对于条带中的最后一个宏块,在在码流中 写入的熵编码填充符号后,若字节不对齐,则还可以进行比特填充处理,并在填充至字节对 齐位置处结束编码。例如,在写入一比特’ 1’后,判断字节是否对齐,若字节不对齐则写入 比特’ 0’至字节对齐为止结束编码,若字节对齐,则结束条带编码。相应的熵编码填充符号可以为一比特填充符号,也可以为多比特填充符号。可选 地,还可以将条带中的最后一个宏块之前的宏块对应的熵编码填充符号的值与条带中的最 后一个宏块对应的熵编码填充符号的值相反;例如,若条带最后一编码宏块(即最后一个 宏块)的熵编码填充符号的值为预先设定好的数值,且为’ 0’或’ 1’ ;则条带非最后一编码 宏块(即最后一个宏块之前的宏块)的所述熵编码填充符号的值为预先设定好的数值与条 带最后一编码宏块的所述熵编码填充符号的值相反,为’ 1’或’ 0’。与上述编码端处理过程对应,本发明实施例中,在解码端解码条带过程中,可以在 宏块数据解码结束后读取熵编码填充符号,同样,相应的宏块包含条带中的最后一个宏块 及最后一个宏块之前的至少一个宏块;并在读取到的熵编码填充符号后,检测条带解码是 否结束,若条带解码未结束,则继续解码条带中的下一个宏块,直到条带解码结束。其中,检测条带解码是否结束的操作过程可以采用以下任一处理方式(1)处理方式一若当前比特流指针位于字节对齐处,则判断比特流指针下一字节对齐处是否为起 始码,若是,则条带解码结束,否则,条带解码未结束;或者,判断比特流指针下一字节对齐 处是否为0x80,并且0x80后是否为起始码,若是,则条带解码结束,否则,条带解码未结束;(2)处理方式二若当前比特流指针位于字节对齐处,则判断当前比特流指针后至字节对齐处的内容是否等于填充模板,所述填充模板为1 << (7-n),其中η为码流指针在当前字节的位置 偏移,若等于填充模板,则条带解码结束,否则,条带解码未结束;(3)处理方式三若当前比特流指针位于字节对齐处,则判断当前比特流指针后至字节对齐处的内 容是否等于填充模板,所述填充模板为1 << (7-n),其中η为码流指针在当前字节的位置 偏移,若等于填充模板,则判断比特流指针下一字节对齐处是否为起始码,若是,则条带解 码结束,否则,条带解码未结束;或者,判断比特流指针下一字节对齐处是否为0x80,并且 0x80后是否为起始码,若是,则条带解码结束,否则,条带解码未结束;若不等于填充模板, 则条带解码未结束。下面将对该实施例的具体实现过程进行详细地说明。(1)编码端在编码端,针对一宏块或一宏块行或指定数目宏块后编码结束之后写入一比特 信息作为CABAC填充比特(即熵编码填充符号),该CABAC填充比特可以记为cabac_mb_ stuffing_bit0在编码端,若条带编码结束,则执行条带编码结束的操作,该条带编码结束的操作 过程记为is_end_0f_sIiceO ;该is_end_0f_sIiceO的具体过程可以包括在条带数据 结尾写入1比特’ 1’,并判断字节是否对齐,若字节已对齐则结束当前条带编码,否则,填充 比特’ 0’至字节对齐为止条带编码结束。其中,编码端在条带中的最后一个宏块编码结束后写入的CABAC填充比特的值为 预先约定好的数值,可以为’ 0’或’ 1’,条带中的其它宏块编码结束时所写入的CABAC填充 比特数值则不做规定,若为提高编码效率,则条带中的其它宏块编码结束时所写入的数值 可以与条带中的最后一个宏块对应的CABAC填充比特数值相反。例如,条带中最后一个宏 块的CABAC填充比特数值为’ 1’,则条带其它宏块的CABAC填充比特的值应为’ 0’。(2)解码端在解码端,解码完一宏块或一宏块行或指定数目宏块后读取所述CABAC填充比特 cabac_mb_stuffing_bit,并执行解码端条带判断操作is_end_0f_slice (),该过程具体可 以包括若当前字节已对齐则判断当前比特流指针后32位是否为0x80000001 (即1个字 节加了 24比特的起始码),若是,则当前条带解码结束,否则,继续解码下一宏块;若当前 字节未对齐,则判断当前比特流指针后至字节对齐处的内容是否等于填充模板stuffing pattern并且从字节对齐处开始的24比特是否为起始码0x000001,若是,则当前条带解码 结束,否则,继续解码下一宏块,其中,所述stuffing pattern为1 << (7_n),其中η为码 流指针在当前字节的位置偏移,数值范围为0 7。通过上述处理过程可以看出,由于编码端在针对一个宏块或一个宏块行或指定数 目的宏块编码结束后写入了相应的CABAC填充比特,使得在解码端执行的针对一个宏块或 一个宏块行或指定数目的宏块解码结束后可以读取相应的CABAC填充比特,因而,不会导 致条带中的最后一个宏块(即条带结束宏块)的编码及解码特殊化。这样,当解码端解码 完一个宏块或一个宏块行或指定数目的宏块且读取完相应的CABAC填充比特后,比特流指 针位置与编码端的一致,故可以使用采用上述iS_end_of_Slice()操作进行条带解码结束 判断,并可以保证判断结果的准确性。
本发明实施例还提供了一种视频编码装置,其具体实现结构如图3所示,可以包 括条带编码单元501,用于对当前条带进行编码操作;熵编码填充符号写入单元502,用于在所述条带编码单元501编码条带过程中,在 宏块数据编码结束后写入熵编码填充符号,所述宏块包含条带中的最后一个宏块及最后一 个宏块之前的至少一个宏块。其中,相应的熵编码填充符号可以但不限于为一比特信息,且 对于条带中的最后一个宏块之前的至少一个宏块,可以在编码一宏块或一宏块行或指定数 目宏块后,写入相应的熵编码填充符号。。本发明实施例还提供了一种视频解码装置,其具体实现结构仍参照图3所示,可 以包括熵编码填充符号读取单元503,用于在解码条带过程中,在宏块数据解码结束后读 取熵编码填充符号,所述宏块包含条带中的最后一个宏块及最后一个宏块之前的至少一个 宏块;判断单元504,用于在所述熵编码填充符号读取单元503读取到的熵编码填充符 号后,检测条带解码是否结束;进一步地,该判断单元具体可以包括第一判断操作单元5041,用于在当前比特流指针位于字节对齐处的情况下,判断 比特流指针下一字节对齐处是否为起始码,若是,则条带解码结束,否则,条带解码未结束; 或者,判断比特流指针下一字节对齐处是否为0x80,并且0x80后是否为起始码,若是,则条 带解码结束,否则,条带解码未结束;第二判断操作单元5042,用于在当前比特流指针位于字节对齐处的情况下,判断 当前比特流指针后至字节对齐处的内容是否等于填充模板,所述填充模板为1 << (7-n), 其中η为码流指针在当前字节的位置偏移,若等于填充模板,则条带解码结束,否则,条带 解码未结束;或者,第三判断操作单元5043,用于在当前比特流指针位于字节对齐处的情 况下,判断当前比特流指针后至字节对齐处的内容是否等于填充模板,所述填充模板为1 << (7-n),其中η为码流指针在当前字节的位置偏移,若等于填充模板,则通知所述第一 判断操作单元;若不等于填充模板,则条带解码未结束。本发明实施例还提供了编解码系统,仍参照图3所示,由相应的的视频编码装置 及相应的视频解码装置组成,且相应的视频编码装置及视频解码装置具体采用的编码及解 码过程在之前的方法实施例中已经详细描述,故在此不再一一详述。本发明实施例中,为使得解码端能够正确解码,还提供了一种视频编解码处理方 案。在该方案中(1)编码端编码端在条带熵编码结束后,根据条带熵编码结束时熵编码可能写入码流的最大 比特数目进行条带数据码流的填充操作。进一步地,在条带数据码流的填充操作过程中,可以先计算上述可能写入码流的 最大比特数目减去条带编码结束操作写入码流中的比特数目后获得的差值,之后,在码流 中填充该差值对应的比特数目;例如,可以使用比特’ 0’或’ 1’进行相应的填充条带数据的 操作。
(2)角军码端解码端在解码条带过程中,在宏块数据解码结束后,在比特流指针在比特流指针 当前位置后指定位置检测条带解码是否结束(即是否已经到达条带结尾处理),其中,相应 的指定位置为比特流指针当前位置之后的若干指定比特位,且相应的若干指定比特位即为 编码端在条带熵编码结束时熵编码可能写入码流的最大比特数目。可选地,在解码端,该若 干指定比特位可以为预先设定好的数值。在完成条带解码是否结束的判断后,便可以根据相应的检测判断结果做进一步地 条带解码操作。以CABAC编码为例,本发明实施例在编码端具体可以根据CABAC编码特性计算出 条带编码结束时写入编码结束符号后可能写入码流的最大比特数目,之后,编码端在针对 条带的各个宏块进行编码过程中,若当前编码宏块为条带的最后一个宏块,则根据上述可 能写入码流的最大比特数目填充码流,其中,填充写入码流的比特数值(“0”或“1”)可由 编码端自行决定,然后进行iS_end_of_Slice()操作。对应的,仍以CABAC解码为例,在解码端解码条带,并解码完一宏块后,在比特流 指针所指当前位置之后若干比特位开始进行iS_end_of_Slice()操作,以判断条带解码是 否结束,相应的若干比特位为上述可能写入码流的最大比特数目。采用上述编解码方案的原理在于CABAC编解码的算术引擎精度是有限的,因此 条带编码结束写入编码结束符号后算术引擎所能写入码流中的比特数目是有限的。根据这 一特性在该实施例中便可以在条带编码结束时写入额外的填充比特,这样,解码端解码完 一个宏块后便可以获知比特流指针需从何处开始进行条带解码结束判断。例如,可能写入 码流的最大比特数目为34,编码端条带编码结束写入结束符号后,算术引擎向码流中写入 了 3比特信息,为此,编码端再此之后再额外写入34-3 = 31比特信息;这样,解码端每解码 完一个宏块后,相应的比特流指针便可以从当前位置34个比特为之后进行条带解码结束 判断,从而可以准确判断当前条带解码是否结束。本发明实施例还提供了 一种视频编码装置,其具体实现结构如图4所示,具体可 以包括条带编码单元601,用于对当前条带进行编码操作;码流填充单元602,用于在所述条带编码单元601结束针对条带的熵编码后,根据 条带熵编码结束时熵编码可能写入码流的最大比特数目进行条带数据码流的填充操作。对应的,本发明实施例还提供了一种视频解码装置,其具体实现结构仍参照图4 所示,具体可以包括解码单元603,用于对当前条带进行解码操作;解码判断单元604,用于在所述解码单元603在完成宏块数据解码结束后,在比特 流指针在比特流指针当前位置后指定位置检测条带解码是否结束,其中,所述指定位置根 据编码端在条带熵编码结束时熵编码可能写入码流的最大比特数目确定。本发明实施例还提供了编解码系统,仍参照图4所示,由相应的视频编码装置及 相应的视频解码装置组成,且相应的视频编码装置及视频解码装置具体采用的编码及解码 过程在之前的方法实施例中已经详细描述,故在此不再一一详述。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储 介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质 可为磁碟、光盘、只读存储记忆体(Read-only Memory, ROM)或随机存储记忆体(Random AccessMemory, RAM)等。综上所述,由于采用了根据条带集参数(即条带集编码方式)对包含一个或多个 条带的条带集进行打包处理,从而可以提高抗网络丢包及抗误差的能力,改善视频传输效 果;例如,当条带集中的各个条带之间采用独立编码方式进行编码时,则可以将条带集中的 各条带分别打包到不同的数据包中,从而可以提高视频传输过程中的抗丢包的能力。进一 步地,在将多个条带打包到一个数据包的过程中还可以根据网络带宽进行打包,从而使得 打包后的数据包可以很好地适应网络传输环境。以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此, 任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换, 都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围 为准。
权利要求
1.一种视频编码的方法,其特征在于,包括在编码条带过程中,在宏块数据编码结束后写入熵编码填充符号,所述宏块包含条带 中的最后一个宏块及最后一个宏块之前的至少一个宏块。
2.根据权利要求1所述方法,其特征在于,所述写入熵编码填充符号的操作包括对于条带中的最后一个宏块之前的至少一个宏块,在编码一宏块或一宏块行或指定数 目宏块后,写入所述熵编码填充符号。
3.根据权利要求1所述方法,其特征在于,所述写入熵编码填充符号的操作包括对于 条带中的最后一个宏块,在在码流中写入的熵编码填充符号后,若字节不对齐,则进行比特 填充至字节对齐为止。
4.根据权利要求1、2或3所述方法,其特征在于,所述熵编码填充符号为一比特填充符号。
5.根据权利要求1、2或3所述方法,其特征在于,所述写入熵编码填充符号的操作包括将条带中的最后一个宏块之前的宏块对应的熵编码填充符号的值与条带中的最后一 个宏块对应的熵编码填充符号的值相反。
6.一种视频编码装置,其特征在于,包括 条带编码单元,用于对当前条带进行编码操作;熵编码填充符号写入单元,用于在所述条带编码单元编码条带过程中,在宏块数据编 码结束后写入熵编码填充符号,所述宏块包含条带中的最后一个宏块及最后一个宏块之前 的至少一个宏块。
7.一种视频解码的方法,其特征在于,包括在解码条带过程中,在宏块数据解码结束后读取熵编码填充符号,所述宏块包含条带 中的最后一个宏块及最后一个宏块之前的至少一个宏块; 读取熵编码填充符号后,检测条带解码是否结束。
8.根据权利要求7所述方法,其特征在于,所述读取熵编码填充符号的操作包括在解 码完一宏块或一宏块行或指定数目宏块后,读取所述熵编码填充符号。
9.根据权利要求7所述方法,其特征在于,所述熵编码填充符号为一比特填充符号。
10.根据权利要求7、8或9所述方法,其特征在于,所述检测条带解码是否结束的操作 包括若当前比特流指针位于字节对齐处,则判断比特流指针后是否为起始码,若是,则条带 解码结束,否则,条带解码未结束;或者,判断比特流指针后是否为0x80,并且0x80后是否 为起始码,若是,则条带解码结束,否则,条带解码未结束; 或者,若当前比特流指针不位于字节对齐处,则判断当前比特流指针后至字节对齐处的内容 是否等于填充模板,所述填充模板为1 << (7-n),其中n为码流指针在当前字节的位置偏 移,<<为左移符号,若等于填充模板,则条带解码结束,否则,条带解码未结束; 或者,若当前比特流指针不位于字节对齐处,则判断当前比特流指针后至字节对齐处的内容 是否等于填充模板,所述填充模板为1 << (7-n),其中n为码流指针在当前字节的位置偏移,并且判断比特流指针下一字节对齐处是否为起始码,若是,则条带解码结束,否则,条带 解码未结束;或者,判断比特流指针下一字节对齐处是否为0x80,并且0x80后是否为起始 码,若是,则条带解码结束,否则,条带解码未结束;若不等于填充模板,则条带解码未结束。
11.一种视频解码装置,其特征在于,包括熵编码填充符号读取单元,用于在解码条带过程中,在宏块数据解码结束后读取熵编 码填充符号,所述宏块包含条带中的最后一个宏块及最后一个宏块之前的至少一个宏块;判断单元,用于在所述熵编码填充符号读取单元读取到的熵编码填充符号后,检测条 带解码是否结束。
12.根据权利要求11所述装置,其特征在于,所述判断单元包括第一判断操作单元,用于在当前比特流指针位于字节对齐处的情况下,判断比特流指 针下一字节对齐处是否为起始码,若是,则条带解码结束,否则,条带解码未结束;或者,判 断比特流指针下一字节对齐处是否为0x80,并且0x80后是否为起始码,若是,则条带解码 结束,否则,条带解码未结束;第二判断操作单元,用于在当前比特流指针位于字节对齐处的情况下,判断当前比特 流指针后至字节对齐处的内容是否等于填充模板,所述填充模板为1 << (7-n),其中n为 码流指针在当前字节的位置偏移,若等于填充模板,则条带解码结束,否则,条带解码未结 束;或者,第三判断操作单元,用于在当前比特流指针位于字节对齐处的情况下,判断当前 比特流指针后至字节对齐处的内容是否等于填充模板,所述填充模板为1 << (7-n),其中 n为码流指针在当前字节的位置偏移,若等于填充模板,则通知所述第一判断操作单元;若 不等于填充模板,则条带解码未结束。
13.—种视频编码的方法,其特征在于,包括在条带熵编码结束后,根据条带熵编码结束时熵编码可能写入码流的最大比特数目进 行条带数据码流的填充操作。
14.根据权利要求13所述方法,其特征在于,所述条带数据码流的填充操作包括计算所述可能写入码流的最大比特数目减去条带编码结束操作写入码流中的比特数目后获得的差值,并在码流中填充该差值对应的比特数目。
15.一种视频编码装置,其特征在于,包括条带编码单元,用于对当前条带进行编码操作;码流填充单元,用于在所述条带编码单元结束针对条带的熵编码后,根据条带熵编码 结束时熵编码可能写入码流的最大比特数目进行条带数据码流的填充操作。
16.一种视频解码的方法,其特征在于,包括在解码条带过程中,在宏块数据解码结束后,在比特流指针在比特流指针当前位置后 指定位置检测条带解码是否结束,所述指定位置根据编码端在条带熵编码结束时熵编码可 能写入码流的最大比特数目确定。
17.—种视频解码装置,其特征在于,包括解码单元,用于对当前条带进行解码操作;解码判断单元,用于在所述解码单元在完成宏块数据解码结束后,在比特流指针在比 特流指针当前位置后指定位置检测条带解码是否结束,其中,所述指定位置根据编码端在 条带熵编码结束时熵编码可能写入码流的最大比特数目确定。
全文摘要
一种视频数据的打包方法及装置,其主要包括首先,获取待发送的条带集,所述的条带集包括一个或多个条带;之后,根据条带集中的各条带之间的编码方式对条带集中包含的一个或多个条带进行打包操作。本发明实施例由于采用了根据条带之间的编码方式对视频流进行打包处理的实现方案,从而可以保证在通过对打包后的数据包进行视频流传输的过程中,可以有效处理网络丢包及误差扩散的现象,提高视频编解码系统的性能。
文档编号H04N7/26GK101998141SQ201010135828
公开日2011年3月30日 申请日期2008年6月19日 优先权日2008年6月19日
发明者何芸, 毛振, 郑建铧, 郑萧桢 申请人:华为技术有限公司;清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1