首页> 中国专利> 在比特流中插入水印辅助数据的方法和包括水印辅助数据的比特流

在比特流中插入水印辅助数据的方法和包括水印辅助数据的比特流

摘要

本发明涉及一种用于在编码数据比特流(F)中插入水印辅助数据(WSM)的方法,包括步骤:在比特流中插入(12)对要替换的编码数据进行标识的标识数据、以及针对要替换的每个编码数据插入至少一个替换数据。该方法还包括步骤:在比特流中插入(14)格式数据,该格式数据定义了用替换数据来替换要替换的编码数据的方式。

著录项

  • 公开/公告号CN101902627A

    专利类型发明专利

  • 公开/公告日2010-12-01

    原文格式PDF

  • 申请/专利权人 汤姆森许可贸易公司;

    申请/专利号CN201010186743.4

  • 申请日2010-05-19

  • 分类号H04N7/24(20060101);H04N7/26(20060101);

  • 代理机构11021 中科专利商标代理有限责任公司;

  • 代理人戎志敏

  • 地址 法国伊西莱穆利诺

  • 入库时间 2023-12-18 01:18:04

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-08-31

    专利权的转移 IPC(主分类):H04N19/467 登记生效日:20160812 变更前: 变更后: 申请日:20100519

    专利申请权、专利权的转移

  • 2014-07-09

    授权

    授权

  • 2012-05-09

    实质审查的生效 IPC(主分类):H04N7/24 申请日:20100519

    实质审查的生效

  • 2010-12-01

    公开

    公开

说明书

技术领域

本发明涉及编码技术领域。更具体地,本发明涉及一种用于在编码数据比特流中插入水印辅助数据的方法、涉及一种使用插入的水印辅助数据来水印化编码数据比特流的方法、以及涉及一种实现水印化方法的设备。本发明还涉及一种包括由插入方法插入的水印辅助数据在内的编码数据比特流。

背景技术

为了保护数字内容(例如,视频、音频或3D数据等),已知将数字编码形式产生的唯一水印插入到所分发的每个流中,以便识别在没有授权的情况下个人或团体具有授权的内容的传输。作为示例,在影片的宣传期间,向选定的人交付借助于不同水印的水印化DVD。在泄露的情况下,能够通过重构水印来标识泄露源。其他应用是可能的:插入水印使得能够标识作品或受益人,或者另外经由水印传送辅助数据(元数据)。

为此,已知消费设备使用视频水印来使得代表视频/图像序列的编码数据比特流个人化。通过在编码数据中插入代表“用户ID”(作为示例)的数字码或可能的时间戳来实现“个人化”,或者甚至插入一些其他类型的信息(例如,版权)。因此,在本文中,术语“水印”、“数字码”和“用户ID”可交换用于表示插入到编码的比特流中的数字码。为了降低消费设备中执行这种个人化所需的计算量,已知使用“借助于”诸如水印替换图(称作WSM)等水印辅助数据的“水印替换”技术。该辅助替换技术实现了3步骤的水印过程。

第一步骤在广播头端设备中进行,在该广播头端设备中,使用图像序列或更一般地使用要广播的数字内容来产生水印辅助数据。然后,在第二步骤期间,将那些水印辅助数据嵌入在编码数据比特流中,并发送至进行第三步骤的消费侧。在第三步骤期间,在消费设备中水印辅助数据用于通过插入水印来辅助接收到的编码数据比特流的个人化。第一步骤的目的在于:确保替换将不会破坏编码数据比特流,在重构图像序列之后,确保水印(即,个人化)对于消费者而言不可见/不可听,以及确保水印对于一些相关攻击而言是足够鲁棒的。因此,第一步骤包括标识编码数据比特流中要被替换的数据,并确定替换数据。第一步骤还保证鲁棒性和保真度。从该第一步骤中产生水印辅助数据。

在第二步骤期间,然后将水印辅助数据嵌入到要发送至消费设备的编码数据比特流。在现有技术中,已知使用MPEG2-TS私有或用户数据(TS代表“传输流”)来嵌入水印辅助数据。在题为″InformationTechnology-Generic Coding of moving images and associated audio:Systems″的文献ITU T Rec.H.222.0|ISO/IEC 13818 1(第二版,2000)中定义了MPEG2-TS传输层。

在第三步骤期间,消费设备在压缩域内应用个人化水印。的确,在编码数据比特流中直接“插入”水印。基于包含在嵌入的水印辅助数据中的信息,通过用一些其他编码数据(所谓的替换数据)来代替(替换)编码数据比特流中的一些编码数据来进行该插入。在压缩域中插入水印,不但能够保护比特流本身,而且还能够保护从对编码数据比特流进行解码中所产生的基带内容。确实,在解压缩期间,水印传送了基带内容。

该解决方案的第一缺点在于,MPEG2-TS私有或用户数据是可容易移除的,这表现出该解决方案对于攻击不够鲁棒。其次,MPEG2-TS私有或用户数据是不进行加密的,因此需要特定附加加密机制。此外,MPEG2-TS分组中分配给私有数据的部分的大小在大小上是有限的,这限制了水印辅助数据的大小。此外,水印辅助数据与图像序列的用户数据同步是不直接的。的确,封装了用户数据的MPEG2-TS分组与封装视频的那些分组是不同的,因此,需要各种分组的同步。最后,现有技术中定义的WSM不提供相对于各种应用需求的灵活性。

发明内容

本发明目的在于,消除现有技术的至少一个缺点。为此,本发明涉及一种用于在编码数据比特流中插入水印辅助数据的方法。该方法包括步骤:在编码数据比特流中插入对要替换的编码数据进行标识的标识数据、以及针对每个要替换的编码数据插入至少一个替换数据。该方法还包括:在编码数据比特流中插入格式数据,该格式数据定义了用替换数据来替换要替换的编码数据的方式。该格式数据提供能够最佳匹配各种应用需求的灵活性。

根据特定实施例,该方法还包括步骤:针对要替换的每个编码数据,在编码数据比特流中插入校验数据。

根据特定实施例,校验数据是根据要替换的编码数据计算的循环冗余校验。

根据变型,校验数据是要替换的编码数据。

根据特定特性,标识数据是对要替换的编码数据的开始进行标识的绝对地址。

根据在将编码数据比特流封装到传输分组中时所使用的变型,标识数据包括标识传输分组的数据,传输分组包括要替换的编码数据,以及相对于传输分组的开始标识要替换的编码数据的开始的偏移值。

根据特定特性,以补充增强信息消息的形式将标识数据、替换编码数据以及格式数据插入到编码数据的比特流中。

本发明还涉及编码数据比特流,包括:

-标识数据,对要替换的编码数据进行标识;以及

-针对要替换的每个编码数据的至少一个替换数据;以及

-格式数据,定义了用替换数据来替换要替换的数据的编码数据的方式。

此外,本发明提供了一种通过水印对编码数据比特流进行水印化的方法,包括以下步骤:

-根据编码数据比特流,确定对要替换的编码数据进行标识的标识数据、针对要替换的每个编码数据的至少一个替换数据、以及定义了用替换数据来替换要替换的编码数据的方式的格式数据;

-使用标识数据来对要替换的编码数据进行标识;以及

-基于格式数据和水印数据,通过用一个替换编码数据替换要替换的每个编码数据,来对编码数据比特流进行水印化。

本发明还涉及一种设备,包括:

-输入,用于接收代表数字内容的编码数据比特流;

-水印模块,用于基于与该设备相关联的标识符来将编码数据比特流水印化成水印比特流;

-解码模块,用于根据水印比特流来重构水印数字内容;

-第一输出,用于传输水印比特流;以及

-第二输出,用于发送水印数字内容。

该设备的水印模块包括:

-确定单元,用于根据编码数据比特流来确定对要替换的编码数据进行标识的标识数据、针对要替换的每个编码数据的至少一个替换数据、以及定义了用替换数据来替换要替换的编码数据的方式的格式数据;

-标识单元,用于根据标识数据来标识要替换的编码数据;以及

-水印单元,用于基于格式数据和水印数据,通过用一个替换编码数据来替换要替换的编码数据,以水印化编码数据比特流。

附图说明

根据本发明的一些实施例的以下描述,本发明将变得显而易见,结合附图进行该描述,在附图中:

图1是根据本发明的插入方法的框图;

图2、3和4示出了编码数据比特流和根据本发明定义的各种替换数据;

图5是根据本发明的水印方法的框图;

图6示出了编码数据比特流以及与其关联的、根据本发明的水印方法的水印化比特流;以及

图7示出了根据本发明的设备。

具体实施方式

本发明涉及在编码数据比特流中插入水印辅助数据(例如,WSM)的方法。为了简要起见,以下考虑代表图像序列的编码数据比特流。然而,编码数据比特流代表诸如音频或3D数据等任何类型的数字内容。通常,对作为编码数据比特流的图像序列进行编码包括:根据先前编码图像的图像数据的图像数据预测(时间预测),或者根据同一先前编码图像的图像数据的图像数据预测(空间预测)。对残差数据进行变换(例如,使用离散余弦变换或类似变换)和量化,该残差数据通常是通过从原始数据中减去预测数据而计算的。最后,例如,使用VLC(“可变长度编码”的英文缩写)表,将量化数据编码成数据比特流的熵。作为示例,能够将序列编码为符合题为《Information technology-Coding of audio-visual objects-Part 10:Advanced Video Coding》并出版于2005年12月15日的文献ISO/IEC 14496-10第二版中描述的MPEG-4AVC/H.264标准。根据变型,根据在题为“SERIES H:AUDIOVISUAL AND MULTIMEDIA SYSTEMS-Infrastructure ofaudiovisual services-Coding of moving Video-Video coding for low bitrate communication”的ITU-T推荐标准中描述的H.263标准,对图像序列进行编码。根据另一变型,根据在题为《Information technology-Generic coding of moving picture and associated audio information:Video》并出版于2000年12月15日的文献ISO/IEC 13818-2中描述的MPEG-2标准,对图像序列进行编码。本发明既不受限于标准也不受限于数字内容的类型。

根据本发明,水印辅助数据可以具有若干条目。每个条目包括:

-至少一个标识数据,用于对编码数据比特流中要替换的编码数据进行标识;以及

-至少一个替换数据。

作为示例,标识数据定义为,从编码数据比特流的开始至要替换的编码数据的开始(例如,第一比特或字节)的偏移值。

根据变型,标识数据定义为,从图像的开始至要替换的编码数据的开始的偏移值。

根据变型,如果将水印辅助数据封装到诸如MPEG2-TS分组等传输分组中,该偏移值包括两个部分:

-对包括要替换的编码数据的第一数据(例如,第一比特或字节)在内的分组的引用,以及

-从该分组的开始到要替换的编码数据的第一数据的偏移值。

作为示例,在编码数据比特流中的每“n”个图像中,对高达“m”个要替换的编码数据进行标识,其中,“m”和“n”是整数,例如,16和1。根据变型,根据在2008年10月2日公开的国际专利申请WO2008/118145中公开的方法,对这种要替换的编码数据进行标识。

作为示例,根据在2008年10月2日公开的文献2008/118145中描述的方法,来确定替换数据。

参照图1,描述将水印辅助数据插入到编码数据比特流F中的方法的第一示例实施例。以下考虑代表图像序列但是也可以代表任何类型的数字内容(例如,音频或3D数据)的编码数据比特流。

在步骤12,在编码数据比特流中插入至少一个标识数据以及至少一个替换数据,所述至少一个标识数据对要替换的编码数据进行标识。标识数据和替换数据能够根据编码数据比特流来计算,或者由查找表提供。

在步骤14,在编码数据比特流F中插入格式数据,该格式数据定义了用替换数据来替换要替换的编码数据的方式。

诸如用户接口等外部装置提供格式数据作为参数。根据应用这样的格式数据可以是固定的,或者动态改变。选择格式数据是以下若干方面的折衷:

-已经用于产生编码数据比特流F的压缩方案及其实现替换的能力,

-压缩方案的编码数据比特流语法,

-需要应用于每个图像的替换次数,

-向水印辅助数据分配额外有效载荷的比特率,一些特定格式能够最小化该有效载荷,

-需要避免解压缩错误,

-对攻击的鲁棒性是水印的目标,

-要嵌入的数字码的实际大小,以及

-该压缩方案随时间的重复速率,等。

格式数据提供灵活性使得能够最佳匹配各种应用需求。因此,能够导出许多变型。

作为示例,格式数据定义了替换数据的数目,定义是否对该替换进行纠错。根据在编码数据比特流中编码的格式数据,可以对一些附加数据进行编码,例如,校验数据。

作为示例,根据第一替换格式(格式1),在步骤12插入两个替换数据。在消费设备中,使用替换数据之一D1来代替要替换的编码数据,以便将‘0’嵌入到编码数据比特流中,使用第二替换数据D2来代替要替换的编码数据,以便将‘1’嵌入到编码数据比特流中。在图2的左部分上示意了这种情况。

根据第二替换格式(格式2),在步骤12插入单个替换数据。在消费设备中使用单个替换数据D1来代替要替换的编码数据,以便将‘0’嵌入到编码数据比特流中,而要替换的数据由其本身代替(即,不实现替换),以便将‘1’嵌入在编码数据比特流中。根据变型,单个替换数据用于代替要替换的编码数据,以便将‘1’嵌入编码数据比特流中,而要替换的编码数据由其本身代替(即,不实现替换),以便将‘0’嵌入在编码数据比特流中。在图2的右部分上示意了这种情况。

根据第一和第二替换格式的变型,在步骤12插入校验数据。在图3上示意了这种情况。例如,校验数据是要替换的编码数据或根据要替换的编码数据而计算的CRC(代表“循环冗余校验”)。作为示例,校验数据是对要替换的编码数据的所有字节的XOR(称作异或的逻辑运算)。如果校验数据是要替换的编码数据,则在消费设备中,将校验数据与接收到的要替换编码数据进行比较。如果两个数据匹配,则进行替换,否则,不进行替换,并且可能报告该错误。如果校验数据是CRC,则将校验数据与局部地基于接收到的要替换编码数据计算的CRC进行比较。如果两个数据是相等的,则进行替换,否则不进行替换。的确,如果在发送期间,消费设备接收到的编码数据比特流中要替换的编码数据经历了某些修改,则不进行替换。这样的修改可以是由于图像变换、转码...。有利地,能够使用比插入要替换编码数据所需的比特数少的比特来插入CRC。

根据图4所示的另一变型,在步骤12插入多于两个替换数据。每个替换数据代表要嵌入的数据。在这种情况下,一次可以嵌入多于一个比特。作为图4所示的示例,在步骤12插入4个替换数据。替换数据之一用于将‘00’嵌入在编码数据比特流中,第二替换数据用于将‘11’嵌入在编码数据比特流中,第三替换数据用于将‘01’嵌入在编码数据比特流中,以及第四替换数据用于将‘10’嵌入在编码数据比特流中。该变型可以与校验数据组合使用。

在使用SEI消息(SEI代表“补充增强信息”)的H.264/MPEG4AVC编码标准的框架内,参考图1描述第二示例实施例。在题为《Information technology-Coding of audio-visual objects-Part 10:Advanced Video Coding》并出版于2005年12月15日的文献ISO/IEC1446的附录D中定义了这样的SEI消息。在H.264中定义的SEI消息决不受限于该标准。这样的消息可以与未来标准一起使用。这样的消息也可以与诸如H.263等先前标准一同使用。在文献H.263的补充增强信息(SEI)中定义了H.263(在题为“SERIES H:AUDIOVISUAL ANDMULTIMEDIA SYSTEMS-Infrastructure of audiovisual services-Coding of moving Video-Video coding for low bit rate communication”的ITU-T推荐标准的附录L和W中定义),H.263包括在无需改变解码过程的情况下能够增强编码图像数据的利用的许多特征。

标准定义了语法,任何编码数据比特流必须满足与该标准兼容。语法具体定义了如何对各种信息项(例如,与包括在序列中的图像、运动矢量等有关的数据)进行编码。根据H.264,使用CABAC(“基于上下文的自适应二进制算术编码”)对该信息项进行熵编码。注意,如果解码设备不拥有其使用所需的功能,则忽略该SEI。有利地,该第二示例实施例能够在无需对标准进行修改的情况下发送水印辅助数据。

在步骤12,使用SEI消息将至少一个标识数据和至少一个替换数据插入到编码数据比特流F中。

在步骤14,使用SEI消息将格式数据插入在编码数据比特流F中。

为此,定义了被称为WSM SEI消息的新SEI消息,该新SEI消息封装了水印辅助数据。以下,在伪码形式的阵列中呈现了新语法,具有与如文献ISO/IEC 14496-10中语法相同的约定。具体地,运算符‘==’表示“等于”,‘!=’表示“不等于”。运算符‘!’是“非”逻辑运算符。SEI使用“数据未注册的”SEI有效载荷类型(等于5的SEI_payloadType),并参照ISO/IEC 14496-10的部分7.3.2.3.1定义如下:

  WSM_sei_message(){  描述符     user_data_unregistered_payload_type_byte    /*等于     0x05*/  u(8)     SEI_PayLoadSize=0     while(next_bits(8)==0xFF){           ff_byte/*等于0xFF*/  f(8)           SEI_PayLoadSize+=255           }     last_payload_size_byte  u(8)     SEI_PayLoadSize+=last_payload_size_byte     WSM_user_data_unregistered(SEI_PayLoadSize)  b(v)  }

其中:

-f(n)是,使用以左比特在先写入(从左到右)的n个比特的固定模式比特流;

-u(n)是,使用n个比特的无符号整数;

-b(8)是,具有任何模式的比特串(8比特)的字节

-b(v)是,可变长度的比特字段,以及

-next_bits(n),出于比较目的,在无需增加比特流指针的情况下,在编码数据比特流中提供接下来的比特。因此,其提供对编码数据比特流中的接下来的n个比特的查看,其中,n是其自变量。

ff_byte是,等于0xFF的字节,用于标识所用的语法结构的较长表现的需要。

user_data_unregistered_payload_type_byte是WSM SEI消息的有效载荷类型。作为示例,对于MPEG-4AVC,user_data_unregistered_payload_type_byte等于0x05。

last_payload_size_byte是SEI消息的大小的最后字节。还在文献ISO/IEC 14496-10的部分7.3.2.3.1中定义了这种类型的SEI消息。

WSM_user_data_unregistered()定义如下:

  WSM_user_data_unregistered(SEI_PayLoadSize){  描述符      uuid_iso_iec_11578  u(128)      WSM_Payload(SEI_PayLoadSize-16)  u(v)  }

uuid_iso_iec_11578应当具有根据在文献ISO/IEC 11578:1996附录A中定义的过程的UUID(UUID代表通用唯一标识符)指定的值。使用IETF RFC 4122产生的这种UUID的示例是1dfa52e0-ef8b-11dd-ba2f-0800200c9a66。

包含与水印辅助数据有关的信息在内的WSM_payload的语法以以下方式定义:

WSM_Payload(WSM_PayLoadSize){  描述符   WSM_FormatType  u(8)   WSM_NumberOfEntries  u(4)   WSM_SequenceTag  u(12)   PayLoadIndex=2   if(WSM_FormatType==FT0){       Skip()   }   else if(WSM_FormatType==FT1){          for(i=0;i≤WSM_NumberOfEntries;i++){

    WSM_StringLength[i] u(4)    WSM_StringOffset[i] u(20)    PayLoadIndex+=(20+4)/8    for(j=0;j≤WSM_StringLength[i];j++){         WSM_CurrentValue[i][j] u(8)    }    for(j=0;j≤WSM_StringLength[i];j++){          WSM_OtherValue[i][j] u(8)    }    PayLoadIndex+=2*(WSM_StringLength[i]+    1)  }}else if(WSM_FormatType==FT2){       for(i=0;i≤WSM_NumberOfEntries;i++){            WSM_StringLength[i] u(4)            WSM_StringOffset[i] u(20)            PayLoadIndex+=(20+4)/8            for(j=0;j≤WSM_StringLength[i];j++){                 WSM_CurrentValue[i][j] u(8)            }

            for(j=0;j≤WSM_StringLength[i];j++){                 WSM_OneValue[i][j] u(8)            }            for(j=0;j≤WSM_StringLength[i];j++){                 WSM_ZeroValue[i][j] u(8)            }            PayLoadIndex+=3*(WSM_StringLength[i]+           1)      }  }  else if(WSM_FormatType==FT3){         for(i=0;i≤WSM_NumberOfEntries;i++){              WSM_StringLength[i] u(4)              WSM_StringOffset[i] u(20)              WSM_CurrentValueCRC[i] u(8)              PayLoadIndex+=(20+4)/8+1              for(j=0;j≤WSM_StringLength[i];j++){                   WSM_OtherValue[i][j] u(8)              }              PayLoadIndex+=(WSM_StringLength[i]+1)         }

  }  else if(WSM_FormatType==FT4){         for(i=0;i≤WSM_NumberOfEntries;i++){              WSM_StringLength[i] u(4)              WSM_StringOffset[i] u(20)              WSM_CurrentValueCRC[i] u(8)              PayLoadIndex+=(20+4)/8+1              for(j=0;j≤WSM_StringLength[i];j++){                   WSM_OneValue[i][j] u(8)              }              for(j=0;j≤WSM_StringLength[i];j++){                   WSM_ZeroValue[i][j] u(8)              }              PayLoadIndex+=2*(WSM_StringLength[i]           +1)      }}else if(WSM_FormatType==FT5){      for(i=0;i≤WSM_NumberOfEntries;i++){           WSM_StringLength[i] u(4)           WSM_PacketOffset[i] u(12)

           WSM_StringRelativeOffset[i] u(8)           PayLoadIndex+=(20+4)/8           for(j=0;j≤WSM_StringLength[i];j++){                WSM_CurrentValue[i][j] u(8)           }           for(j=0;j≤WSM_StringLength[i];j++){                WSM_OtherValue[i][j] u(8)           }           PayLoadIndex+=2*(WSM_StringLength[i]+           1)      }}else if(WSM_FormatType==FT6){       for(i=0;i≤WSM_NumberOfEntries;i++){            WSM_StringLength[i] u(4)            WSM_PacketOffset[i] u(12)            WSM_StringRelativeOffset[i] u(8)            PayLoadIndex+=(20+4)/8            for(j=0;j≤WSM_StringLength[i];j++){                 WSM_CurrentValue[i][j] u(8)            }

           for(j=0;j≤WSM_StringLength[i];j++){                WSM_OneValue[i][j]  u(8)           }           for(j=0;j≤WSM_StringLength[i];j++){                WSM_ZeroValue[i][j]  u(8)           }           PayLoadIndex+=3*(WSM_StringLength[i]+           1)       }}else if(WSM_FormatType==FT7){       for(i=0;i≤WSM_NumberOfEntries;i++){            WSM_StringLength[i]  u(4)            WSM_PacketOffset[i]  u(12)            WSM_StringRelativeOffset[i]  u(8)            WSM_CurrentValueCRC[i]  u(8)            PayLoadIndex+=(20+4)/8+1            for(j=0;j≤WSM_StringLength[i];j++){                 WSM_OtherValue[i][j]  u(8)            }            PayLoadIndex+=(WSM_StringLength[i]+1)

       }}else if(WSM_FormatType==FT8){       for(i=0;i≤WSM_NumberOfEntries;i++){            WSM_StringLength[i]  u(4)            WSM_PacketOffset[i]  u(12)            WSM_StringRelativeOffset[i]  u(8)            WSM_CurrentValueCRC[i]  u(8)            PayLoadIndex+=(20+4)/8+1            for(j=0;j≤WSM_StringLength[i];j++){                 WSM_OneValue[i][j]  u(8)            }            for(j=0;j≤WSM_StringLength[i];j++){                 WSM_ZeroValue[i][j]  u(8)            }            PayLoadIndex+=2*(WSM_StringLength[i]            +1)      }  }  else{       Unsupported()

  }  for(i=PayLoadIndex;i<WSM_PayLoadSize;i++){       WSM_Filler[i]  u(8)  }}

串或CABAC串定义为比特序列。因此,在下文中,词语‘串’是指编码数据比特流中要替换的连续比特。

WSM_FormatType是用于定义执行替换从而格式化水印辅助数据条目的方式的字节。作为示例定义以下格式化:

FT0:条目为空,没有报告错误。

FT1:仅提出一个替换值WSM_OtherValue嵌入“1”,而当前值WSM_CurrentValue用于嵌入“0”。当前值WSM_CurrentValue是必须要替换的CABAC编码字节。也发送当前值(WSM_CurrentValue)作为校验数据,以帮助增强个人化过程的鲁棒性。

FT2:提出两个替换值,WSM_ZeroValue嵌入“0”,而WSM_OneValue嵌入“1”。也发送当前值(WSM_CurrentValue)作为校验数据,以帮助增强个人化过程的鲁棒性。

FT3:与FT1相同,用简单1字节CRC来代替WSM_CurrentValue串,以节省比特率。该WSM_CurrentValueCRC在消费设备中用作校验数据,以使得个人化过程更鲁棒。

FT4:与FT2相同,用简单1字节CRC来代替WSM_CurrentValue串,以节省比特率。该WSM_CurrentValueCRC在消费设备中用作校验数据,以使得个人化过程更鲁棒。

FT5:与FT1相同,但是将WSM_StringOffset拆分成2个子字段:分组地址(WSM_PacketOffset)和所指分组(WSM_StringRelativeOffset)内的字节地址。

FT6:与FT2相同,但是将WSM_StringOffset拆分成2个子字段:分组地址(WSM_PacketOffset)和所指分组(WSM_StringRelativeOffset)内的字节地址。

FT7:与FT3相同,但是将WSM_StringOffset拆分成2个子字段:分组地址(WSM_PacketOffset)和所指分组(WSM_StringRelativeOffset)内的字节地址。

FT8:与FT4相同,但是将WSM_StringOffset拆分成2个子字段:分组地址(WSM_PacketOffset)和所指分组(WSM_StringRelativeOffset)内的字节地址。

其他:保留以供今后使用。错误将被报告。

作为示例,FT0=0x00、FT1=0x01、FT2=0x02、FT3=0x03、FT4=0x04、FT5=0x05、FT6=0x06、FT7=0x07、和FT8=0x08。当然,可以使用其他值。

在格式FT1至FT8的情况下,在步骤12,也在流中对校验数据进行编码,以便使得个人化过程更鲁棒。在消费设备中,在替换WSM_StringOffset所指的字节CABAC串之前,将该CABAC串与WSM_CurrentValue进行比较。在它们不匹配的情况下,不会发生替换,能够报告错误。根据变型,根据WSM_StringOffset所指的字节的CABAC串,在本地计算CRC,并将其与WSM_CurrentValueCRC进行比较。在它们不匹配的情况下,不发生替换,并且能够报告错误。能够引入更多的WSM_FormatType来使得更多比特(例如,8比特而不是4比特)编码WSM_NumberOfEntries,并实现针对WSM_StringLength的24比特地址(或针对WSM_PacketOffset的16比特)。

作为第一示例,新格式类型WSM_FormatType==FT9等同于所定义的FT2(即,除了WSM_CurrentValue之外有两个替换值)。FT9格式类型与FT2的不同之处在于,用8比特(而非4比特)对WSM_NumberOfEntries进行进行编码,以及用24比特(而非4比特)对WSM_StringLength进行编码。这使得能够处理更大访问单元。这样的格式非常适合于高比特率编码。

作为第二示例,定义了另一格式FTn,其中,n是与那些已知使用的有所不同的正整数。根据这种格式,所有替换条目具有相同串长度。因此,为了最小化水印辅助数据有效载荷大小,使得WSM_StringLength[i]对于所有条目是公共的,从而从循环“for(i=0;i≤WSM_NumberOfEntries;i++)”中移除该WSM_StringLength[i],并移至WSM_PayLoad报头(例如,仅在WSM_SequenceTag之后)。从而WSM_StringthLength[i]变成全局WSM_StringLength。

WSM_NumberOfEntries指定当前水印辅助数据中出现的减一的条目数目。然后每条目详细说明替换。

根据变型,WSM_NumberOfEntries指定条目数目。

WSM_SequenceTag指示在水印辅助数据的第一条目中,应当插入数字编码有效载荷中的哪个比特(即,第一比特、第二比特、第三比特等等)。有效载荷包括“用户ID”,并还可以包括“时间戳”、其他信息(例如,版权)、保护比特、冗余。

WSM_StringLength定义替换串的减一的长度(例如,以字节数目)。

根据变型,WSM_StringLength定义替换串的长度。

WSM_StringOffset是当前访问单元中要替换的第一字节的字节绝对地址。如果WSM_StringOffset等于0,则其标识当前访问单元的第一片的第一字节。访问单元定义为“始终包含一个主要编码画面的NAL单元集合”。NAL单元是“包含要遵循的数据类型以及包含该数据的字节的指示的语法结构”。访问单元和NAL单元是MPEG-4AVC/H.264标准的一部分。

根据具体特性,条目由升序偏移组织。

根据变型,将WSM_StringOffset拆分成2个子字段,第一个子字段为WSM_PacketOffset,是TS分组地址,第二个子字段为WSM_StringRelativeOffset,是从TS分组的开始的字节的偏移值。这可以减轻在消费装置中的处理。在这种情况下,对以下字段进行编码:

如果WSM_PacketOffset等于0,则其标识TS分组,TS分组包括WSM_PayLoad的第一字节。

WSM_StringRelativeOffset是在由WSM_PacketOffset所指的TS分组中要替换的第一字节的相对地址。如果WSM_StringRelativeOffset等于0,则其标识TS分组有效载荷的第一字节。

WSM_Filler是滤波器字节。作为示例,WSM_Filler[i]等于0xFF。

WSM_Filler在如果WSM_PayLoadSize太大的情况下能够用于填充。

在H.264中,使用NAL单元(“网络适应层”的英文缩写)在编码数据比特流中嵌入这样的私有SEI消息,该NAL单元为图像提供精确的时间参考,从而便于水印辅助数据与图像编码数据之间的同步。的确,SEI消息被“附着”至访问单元。根据MPEG1/AVC编码模式(字段、帧、MBAFF),访问单元包含一个全字段或一个全帧。因此,如下将NALWSM SEI消息封装在NAL单元中:

nal_unit{  描述符     forbidden_zero_bit /*应当为0*/  f(1)     nal_ref_idc               /*对于SEI消息应当     等于0*/  u(2)     nal_unit_type            /*对于SEI消息应当     等于0x06*/  u(5)     Other SEI messages() /*可选*/  b(v)     WSM_sei_message()  b(v)     Other SEI messages() /*可选*/  b(v)     rbsp_trailing_bits()}

forbidden_zero_bit,根据H.264应当等于0。

nal_ref_idc,针对所有NAL单元应当等于0,根据H.264,所有NAL单元具有等于6、9、10、11、或12的nal_unit_type。

nal_unit_type,如ISO/IEC 14496-10的表格7-1所指定的,指定包含在NAL单元中的RBSP(代表“原始字节序列有效载荷”)数据结构的类型。VCL NAL单元(VCL是“视频编码层”的英文缩写)指定为,那些具有等于1至5(包括1和5)的nal_unit_type的NAL单元。所有剩余的NAL单元被称作非VCL NAL单元。等于6的Nal_unit_type表示SEI消息。

rbsp_trailing_bits()是特定可变长度编码的比特串。实际上,其通常返回0x00之前的序列0x80。

在使用SEI消息的H.264/MPEG4AVC编码标准的框架内提出第三示例实施例。根据该第三示例实施例,定义信息SEI的新类型,以便对与WSM有关的附加信息进行编码。出于此目的,根据还没有使用的值,定义针对字段payloadType的新值(例如,payloadType等于22)。具体地,payloadType的前22个值(从0至21)已经用于对特定信息进行编码,例如,影片(与等于19的payloadType相对应)的粒度的特性。以下,在具有与文献ISO/IEC 14496-10相同约定的伪码形式的阵列中呈现新语法。以如下方式扩展SEI数据(即,sei_payload)的语法,其中,WSM_payload与第二实施例的WSM_payload相同。

  sei_payload(payloadType,payloadSize){  C  描述符    if(payloadType==0)      buffering_period(payloadSize)  5    .....    else if(payloadType==21)      stereo_video_info(payloadSize)  5    else if(payloadType==22)      WSM_payload(WSM_payloadSize)  5    Else      reserved_sei_message(payloadSize)  5    if(!byte_aligned()){      bit_equal_to_one/*等于1*/  5  f(1)      while(!byte_aligned())       bit_equal_to_zero/*等于0*/  5  f(1)    }  }

byte_aligned()用于检查编码数据比特流是否在字节边界对准。

本发明涉及参照图5和6描述的水印方法。更精确地,本发明涉及对包括格式数据、标识数据和替换数据在内的编码数据的比特流F+WSM进行水印化的方法。

在步骤20,格式数据定义用替换数据来替换要替换的编码数据的方式,标识数据标识要替换的编码数据,以及通过对编码数据比特流F的一部分进行解码来确定针对要替换的每个编码数据的至少一个替换数据。作为示例,根据第二和第三示例实施例,对封装了WSM的SEI消息进行解码。

在步骤22,标识数据标识要替换的编码数据。

在步骤24,通过替换,将编码数据比特流F水印化成水印化的比特流F’,其中,在编码数据比特流F中,用适当的替换数据来替换每个标识的编码数据。基于替换数据并还基于要嵌入在编码数据比特流F中的水印W的值,根据格式数据来确定适当替换数据。

作为示例,在图6上,在步骤22,根据在步骤20恢复的标识数据来标识要替换的三个编码数据C1、C2和C3。

在步骤24,根据要嵌入的数字码W,来替换这三个编码数据中的每一个。作为示例,W等于001。因此,为了将比特0嵌入到C1中,用E0来替换C1,而E1用于嵌入比特1。然后为了将比特0嵌入到C2中,用F0替换C2,而F1用于嵌入比特1。最后,为了将比特1嵌入到C3中,用G1替换C3,而G0用于嵌入比特0。

根据变型,在步骤20期间,还可以确定校验数据,并仅当校验数据与要替换的接收到的数据相匹配时,才在步骤24进行替换。

本发明还涉及一种编码数据比特流F,该比特流F代表图像、音频数据、3D数据或任何类型的数字内容的序列。根据本发明的编码数据比特流包括水印辅助数据,并更具体地:

-标识数据,对要替换的数据进行标识;

-针对要替换的每个编码数据的至少一个替换数据;以及

-格式数据,定义用替换数据来替换要替换的编码数据的方式。

本发明还涉及参照图7描述的设备3。设备3包括用于接收编码数据比特流F的入口30,该比特流F代表包括水印辅助数据在内的图像、任何数字内容的序列。有利地,通过根据三个示例实施例之一的插入方法来产生编码数据比特流F。入口30的输出链接至水印模块32的输入。水印模块32的输出链接至设备3的第一输出36,并链接至解码模块34的输入。解码模块34的输出链接至设备3的第二输出38。

水印模块32适合于实现根据本发明的水印方法的步骤20、22、24。为此,水印模块32包括:

-确定单元,用于根据编码数据比特流,确定标识要替换的编码数据的标识数据、针对要替换的每个编码数据的至少一个替换数据、以及定义用替换数据来替换要替换的编码数据的方式格式数据;

-标识单元,利用标识数据来标识要替换的编码数据;以及

-水印单元,用于基于格式数据和水印数据,用一个替换编码数据来替换要替换的图像编码数据,来水印化编码数据比特流。

要嵌入到F中的水印W至少包括用户ID/使其能够标识设备3的标识符。第一输出36输出可以被发送至诸如WLAN(“无线局域网”的英文缩写)等网络R的水印化比特流F’。解码模块34适用于对水印化的流F’进行解码,以便重构水印化的数字内容S’,例如,水印化的图像序列。可以将S’发送至电视机以用于显示。

根据有利实施例,在已经应用于避免盗版者缓冲器拷贝从而恢复水印辅助数据之后,从编码数据比特流中擦除(ERASE)水印辅助数据。

作为与编码方法的第二示例实数有关的示例,可以应用以下过程来擦除水印辅助数据:

Set WSM_FormatType=0

Set WSM_NumberOfEntries=0

利用WSM_Filler填充有效载荷的剩余部分。

使用NAL(“网络适应层”的英文缩写)单元将SEI消息嵌入在编码数据比特流中,该NAL单元为图像提供精确的时间参考,因此便于水印辅助数据与图像编码数据之间的同步。此外,利用与压缩图像序列相同的加密系统对SEI消息进行加密,并该SEI消息与压缩图像序列深入合并。从而,为了移除水印辅助数据,需要破坏加密系统。最后,SEI消息不限于有效载荷方面。

当然,本发明不限于上述实施例。更精确地,本发明不限于将数据插入到图像编码数据比特流中。的确,其中插入了数据的编码数据比特流可以表示任何类型的数字内容,例如,音频或3D数据。

此外,本发明不仅限于MPEG-4AVC视频编码标准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号