首页 / 专利库 / 视听技术与设备 / 视频编码层 / 一种针对安卓设备产生的视频添加水印的方法

一种针对安卓设备产生的视频添加印的方法

阅读:1045发布:2020-06-26

专利汇可以提供一种针对安卓设备产生的视频添加印的方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种针对安卓设备产生的视频添加 水 印的方法,包括以下步骤:S1:安卓设备源生 视频流 的 视频编码 分析;S2:将通用RBG色彩 空间编码 转换为安卓源生视频流编码YUV格式;S3:本机时间校准;S4:自定义水印实时添加;S5:时间戳实时添加;S6:视频校验。本发明的有益效果如下:1、使用限制较少,支持绝大多数拥有摄像头的安卓平台设备;2、可在录制时对任何不超出视频尺寸的自定义水印图片进行实时添加;3、能够利用智能设备的CPU与GPU进行视频添加,不必依赖传统录像设备中专 门 的视频编解码芯片;4、联网情况下精确获取当前时区的时间并进行精准的时间戳水印添加。5、针对视频进行校验,防止数据被篡改及传输中出现错误。,下面是一种针对安卓设备产生的视频添加印的方法专利的具体信息内容。

1.一种针对安卓设备产生的视频添加印的方法,其特征在于包括以下步骤:
S1:安卓设备源生视频流视频编码分析,对安卓原生视频的特殊的YUV结构进行解析;
S2:将通用RBG色彩空间编码转换为安卓源生视频流编码YUV格式;
S3:本机时间校准;
S4:自定义水印实时添加,该步骤有两个分支,一为文字添加,二为图像添加,在对视频帧进行获取并添加水印后,将帧送入视频编码及混合器,进行转码与输出;
S5时间戳实时添加;
S6:在视频提取后进行校验,判断是否正确。
2.根据权利要求1所述的一种针对安卓设备产生的视频添加水印的方法,其特征在于S1的详细步骤如下:
S11:获取源生视频帧,为安卓设备相机加入预览回调,开启相机,并在预览回调中取得视频帧,该帧即为待分析数据;
S12:分离灰度数据与颜色数据;
S13:分析颜色数据,从灰度数据0位置开始,相邻四个像素点为一组,由颜色数据中从0开始的一个或一组数据进行控制;设图片尺寸为WIDTH*HEIGHT,则下标为0、1、WIDTH,WIDTH+1的灰度数据,其颜色中V通道为WIDTH*HEIGHT,U通道则为WIDTH*HEIGHT+1,后续数据以此类推。
3.根据权利要求2所述的一种针对安卓设备产生的视频添加水印的方法,其特征在于S12的详细步骤如下:
S121:设获取到的图片尺寸为WIDTH*HEIGHT像素;
S122:取数组中下标为0到下标为WIDTH*HEIGHT-1的数据,即为灰度数据;
S123:将该灰度数据输出成为图片,则得到无颜色的黑白图片,灰度数据得以证明;
S124:取数组中剩余部分,即为颜色数据。
4.根据权利要求2所述的一种针对安卓设备产生的视频添加水印的方法,其特征在于S2的详细步骤如下:
S21:RBG数据转换为通行YUV420数据;首先将RBG数据读入数组,从第一个像素开始,每三位取一次数据,即为当前像素的RBG数据,使用通行的RBG与YUV420转换算法可得相应YUV420数据;
S22:YUV420转换为安卓源生视频支持的NV21格式,由于YUV420数据与androd源生视频的色彩分量不兼容,因此需要进行格式转换。具体的转换步骤为:
S221:灰度部分原样取值;
S222:提取灰度数据后,首先取V数据一位,置于灰度数据后第一位。再取U数据一位,置于一位V数据之后,此后VU数据均顺序取值并交叉排布,保持V0U0V1U1……VnUn的顺序即可。
5.根据权利要求4所述的一种针对安卓设备产生的视频添加水印的方法,其特征在于S3的具体步骤如下:
S31:定义时间偏移存储位,在Constants文件中定义静态全局变量DATE_OFFSET,用于存储时间偏移量;该偏移量表示本机的时间与网络时间之间的差值;
S32:获取网络时间与时间偏移步骤如下:
S321:调用URLConntection访问国家授时中心服务器,获取数据并解析。这里获取到的数据是以毫秒为单位的时间数据。
S322:计算时间偏移量,使用系统System.currentMillis()获取本机时间,计算本机时间与网络时间的差值,存储至偏移存储位;该值为带符号长整型;
S33:定义真实时间,定义getCurrentDate方法,使用系统当前时间作为基准,与时间偏移值相加,获得当前的真实时间,并使用Data对象将其转换成为YYYY-MM-DD HH:MM:SS形式,返回给调用者。
6.根据权利要求5所述的一种针对安卓设备产生的视频添加水印的方法,其特征在于S4的具体步骤如下:
S41:文字添加,步骤如下:
S411:获得文字点阵编码,使用通行的文字点阵转换算法,将待转换文字转换为描述点阵的数组;该点阵数组即为待添加水印的Y数据,存储成名为preText的byte数组;
S412:定义文字颜色UV值,将待添加的文字颜色从RBG的描述方式转换为UV的描述方式,由于Y数据已经存在,此时只需将待添加的颜色的RBG值转换为YUV值即可;这里将通行的YUV算法进行改进,摈弃计算获得的Y通道,仅留存UV通道的值;最终获得一个U值和一个V值;
S413:获取待添加视频帧并进行添加,详细步骤如下:
S4131:设置从视频帧的x,y位置开始添加水印,为相机添加回调接口,在回调接口的getFrameData方法中实时获取到录制的视频帧,并存成名为src的byte数组;
S4132:将获取到的src数组的内存地址映射到底层的JNI中;
S4133:将指向src的指针p偏移至待添加位置,根据开始添加前指定的偏移x,y,将指针p移至y*WIDTH+x位置,即在p的值上累加y*WIDTH+x;
S4134:从当前p所指偏移位置开始,遍历src数组内存区域中的数据,同时遍历步骤S411中获取到的preText点阵编码;当preText数组遍历到非0x00的数据时,将preText相应位置的数据写入p指针当前位置的内存中,重复上述操作直至preText数组遍历结束;
S4135:在Y通道添加完后,根据S22中获取到的视频帧的排布规律,计算出src数组该位置的UV数据的地址,将S412获取到的U和V数据写到相应位置,V的地址可以根据p+y*WIDTH/
2+x计算,U的地址则为V+1;
步骤S4134和S4135必须同时进行;
S42图像添加,具体步骤如下:
S421:图像编码数组的获取,首先使用通用的方法或工具将待添加图片转换成为bmp格式图像,然后去除获得的bmp图像的头;Bmp图像前56位为头信息,读取从第57位开始的其余数据进入内存,放置在prePic数组中;即可得到待添加的图像的YUV数据;
S422:获取待添加视频帧并进行添加。
7.根据权利要求6所述的一种针对安卓设备产生的视频添加水印的方法,其特征在于所述S422的详细步骤如下:
S4231:设置从视频帧的x,y位置开始添加水印,为相机添加回调接口,在回调接口的getFrameData方法中实时获取到录制的视频帧,并存成名为src的byte数组;
S4232:将获取到的src数组的内存地址映射到底层的JNI中;
S4233:将指向src的指针p偏移至待添加位置,根据开始添加前指定的偏移x,y,将指针p移至y*WIDTH+x位置,即在p的值上累加y*WIDTH+x;
S4234:设待叠加图像尺寸为W*H,若prePic当前位置数据不为0x00或0xff,则将prePic当前位置的数据写入同步递增的p指针所指的src数组的相应位置,直至遍历至prePic的W*H-1位置时结束;
S4235:向src写入数据后,取得prePic当前像素的U和V数据,并将该数据写入src相应位置Y数据所属的UV分量上,然后继续遍历直至完成遍历。
8.根据权利要求6所述的一种针对安卓设备产生的视频添加水印的方法,其特征在于S5的详细步骤如下:
S51:获取校准时间,通过S3中所属方法获得当前的时间,并转换成为字符串,待添加;
S52:构建常用文字点阵映射数组,预先将时间戳添加所需数字和符号转换为编码数组,并以ascii码作为索引,编译成静态常量,供添加过程中检索并直接使用,定义每个字符的点阵大小,这里使用n*n描述其大小;
S53:时间戳水印添加,其详细步骤如下:
S531:将获取到的经校准的时间字符串的地址映射到JNI层;
S532:将字符串中每个字符编码转换为ascii值,并查表获得每个字符的点阵数组;
S533:循环遍历字符串,将点阵数组使用S413所描述的步骤叠加至视频帧中,并将下次叠加的偏移量的x值增加n。直至遍历完成。
9.根据权利要求8所述的一种针对安卓设备产生的视频添加水印的方法,其特征在于S6的详细步骤如下:
S61:完整性视频摘要信息获取;通过MD5或hash256信息摘要算法获得视频校验字符串;记为verify_str;
S62:视频导出过程中分段传输并校验,其步骤如下:
S621:指定byte数组buffer,长度x。从视频文件头部起始位置开始,读取后续的x长度数据到buffer中;
S622:将buffer中的数据使用MD5或HASH256获取这段数据的信息摘要,记作src_verify_str;
S623:将buffer中数据写入目标文件,并从目标文件中获取到该段数据的拷贝,对这段数据进行MD5或HASH256计算,获得其摘要,记作dest_verify_str;
S624:对比src_verify_str与dest_verify_str是否一致,一致则继续下一次读取,否则重新读取该段数据,直至文件被遍历完;
S63:通过MD5或hash256信息摘要算法获得导出后的视频校验信息记为final_verify_str;将该final_verify_str与verify_str做对比,一致则表示该视频完整且可靠,不一致则表示视频不可用。
10.根据权利要求9所述的一种针对安卓设备产生的视频添加水印的方法,其特征在于:为提升校验信息的可靠性和有效性,使用端存储校验信息,并提供校验信息在线获取功能;
1、在S61流程结束后将MD5或HASH256摘要信息存储至云端服务器中,并将视频信息与校验信息做映射;
2、在S63步骤开始前,从云端获取到指定的数据,获取到摘要信息,作为校验信息的对比依据。

说明书全文

一种针对安卓设备产生的视频添加印的方法

技术领域

[0001] 本发明涉及信息安全技术领域,特别涉及一种针对安卓设备产生的视频添加水印的方法。

背景技术

[0002] 在取证或监控等一些需要录制视频并存档的应用场景,通常需要配备专业的视频录制或监控设备。这些设备本身造价比较高,使用和维护成本也比较高。专业的录制设备能够实现高清晰度的视频录制,但体积通常较大,不易随身携带。与此同时,在一些应用场景中,可能需要实时为视频添加时间水印或自定义的图像水印。前者的添加功能通常在一些专业设备中有实现,但后者一般都是通过后期制作添加。这就使得所添加的水印的实时性不够强。与此同时,专业录制或监控设备能够在视频中增加实时时间戳,但样式单一,通常只能使用预定义的单一格式,无法满足多样的需求,也不能在提取视频后针对视频进行校验,判断是否被修改
[0003] 安卓智能手机是现在很容易获得的一种设备,其配备的摄像头像素较高,通常情况下智能设备同样能够支持高清视频的录制。这类设备容易携带,使用方便且使用限制较少,但是安卓智能设备的录像功能没有实现时间戳或其他自定义水印的添加。这就使得在上述应用场景中无法直接使用安卓智能设备进行视频录制。

发明内容

[0004] 本发明针对现有技术缺陷,提供了一种针对安卓设备产生的视频添加水印的方法,能有效的解决上述现有技术存在的问题。
[0005] 一种针对安卓设备产生的视频添加水印的方法,包括以下步骤:
[0006] S1:安卓设备源生视频流视频编码分析,对安卓原生视频的特殊的YUV结构进行解析;
[0007] S2:将通用RBG色彩空间编码转换为安卓源生视频流编码YUV格式;
[0008] S3:本机时间校准;
[0009] S4:自定义水印实时添加,该步骤有两个分支,一为文字添加,二为图像添加,在对视频帧进行获取并添加水印后,将帧送入视频编码及混合器,进行转码与输出;
[0010] S5:时间戳实时添加;
[0011] S6:在视频提取后进行校验,判断是否正确。
[0012] 作为优选,S1的详细步骤如下:
[0013] S11:获取源生视频帧,为安卓设备相机加入预览回调,开启相机,并在预览回调中取得视频帧,该帧即为待分析数据;
[0014] S12:分离灰度数据与颜色数据;
[0015] S13:分析颜色数据,从灰度数据0位置开始,相邻四个像素点为一组,由颜色数据中从0开始的一个或一组数据进行控制;设图片尺寸为WIDTH*HEIGHT,则下标为0、1、WIDTH,WIDTH+1的灰度数据,其颜色中V通道为WIDTH*HEIGHT,U通道则为WIDTH*HEIGHT+1,后续数据以此类推。
[0016] 作为优选,S12的详细步骤如下:
[0017] S121:设获取到的图片尺寸为WIDTH*HEIGHT像素;
[0018] S122:取数组中下标为0到下标为WIDTH*HEIGHT-1的数据,即为灰度数据;
[0019] S123:将该灰度数据输出成为图片,则得到无颜色的黑白图片,灰度数据得以证明;
[0020] S124:取数组中剩余部分,即为颜色数据。
[0021] 作为优选,S2的详细步骤如下:
[0022] S21:RBG数据转换为通行YUV420数据;首先将RBG数据读入数组,从第一个像素开始,每三位取一次数据,即为当前像素的RBG数据,使用通行的RBG与YUV420转换算法可得相应YUV420数据;
[0023] S22:YUV420转换为安卓源生视频支持的NV21格式,由于YUV420数据与androd源生视频的色彩分量不兼容,因此需要进行格式转换。具体的转换步骤为:
[0024] S221:灰度部分原样取值;
[0025] S222:提取灰度数据后,首先取V数据一位,置于灰度数据后第一位。再取U数据一位,置于一位V数据之后,此后VU数据均顺序取值并交叉排布,保持V0U0V1U1……VnUn的顺序即可。
[0026] 作为优选,S3的具体步骤如下:
[0027] S31:定义时间偏移存储位,在Constants文件中定义静态全局变量DATE_OFFSET,用于存储时间偏移量;该偏移量表示本机的时间与网络时间之间的差值;
[0028] S32:获取网络时间与时间偏移步骤如下:
[0029] S321:调用URLConntection访问国家授时中心服务器,获取数据并解析。这里获取到的数据是以毫秒为单位的时间数据。
[0030] S322:计算时间偏移量,使用系统System.currentMillis()获取本机时间,计算本机时间与网络时间的差值,存储至偏移存储位;该值为带符号长整型;
[0031] S33:定义真实时间,定义getCurrentDate方法,使用系统当前时间作为基准,与时间偏移值相加,获得当前的真实时间,并使用Data对象将其转换成为YYYY-MM-DD HH:MM:SS形式,返回给调用者。
[0032] 作为优选,S4的具体步骤如下:
[0033] S41:文字添加,步骤如下:
[0034] S411:获得文字点阵编码,使用通行的文字点阵转换算法,将待转换文字转换为描述点阵的数组;该点阵数组即为待添加水印的Y数据,存储成名为preText的byte数组;
[0035] S412:定义文字颜色UV值,将待添加的文字颜色从RBG的描述方式转换为UV的描述方式,由于Y数据已经存在,此时只需将待添加的颜色的RBG值转换为YUV值即可;这里将通行的YUV算法进行改进,摈弃计算获得的Y通道,仅留存UV通道的值;最终获得一个U值和一个V值;
[0036] S413:获取待添加视频帧并进行添加,步骤如下:
[0037] S4131:设置从视频帧的x,y位置开始添加水印,为相机添加回调接口,在回调接口的getFrameData方法中实时获取到录制的视频帧,并存成名为src的byte数组;
[0038] S4132:将获取到的src数组的内存地址映射到底层的JNI中;
[0039] S4133:将指向src的指针p偏移至待添加位置,根据开始添加前指定的偏移x,y,将指针p移至y*WIDTH+x位置,即在p的值上累加y*WIDTH+x;
[0040] S4134:从当前p所指偏移位置开始,遍历src数组内存区域中的数据,同时遍历步骤S411中获取到的preText点阵编码;当preText数组遍历到非0x00的数据时,将preText相应位置的数据写入p指针当前位置的内存中,重复上述操作直至preText数组遍历结束;
[0041] S4135:在Y通道添加完后,根据S22中获取到的视频帧的排布规律,计算出src数组该位置的UV数据的地址,将S412获取到的U和V数据写到相应位置,V的地址可以根据p+y*WIDTH/2+x计算,U的地址则为V+1;
[0042] 需要注意的是步骤S4134和S4135必须同时进行。
[0043] S42图像添加,具体步骤如下:
[0044] S421:图像编码数组的获取,首先使用通用的方法或工具将待添加图片转换成为bmp格式图像,然后去除获得的bmp图像的头;Bmp图像前56位为头信息,读取从第57位开始的其余数据进入内存,放置在prePic数组中;即可得到待添加的图像的YUV数据;
[0045] S422:获取待添加视频帧并进行添加。
[0046] 作为优选,所述S422的详细步骤如下:
[0047] S4231:设置从视频帧的x,y位置开始添加水印,为相机添加回调接口,在回调接口的getFrameData方法中实时获取到录制的视频帧,并存成名为src的byte数组;
[0048] S4232:将获取到的src数组的内存地址映射到底层的JNI中;
[0049] S4233:将指向src的指针p偏移至待添加位置,根据开始添加前指定的偏移x,y,将指针p移至y*WIDTH+x位置,即在p的值上累加y*WIDTH+x;
[0050] S4234:设待叠加图像尺寸为W*H,若prePic当前位置数据不为0x00或0xff,则将prePic当前位置的数据写入同步递增的p指针所指的src数组的相应位置,直至遍历至prePic的W*H-1位置时结束;
[0051] S4235:向src写入数据后,取得prePic当前像素的U和V数据,并将该数据写入src相应位置Y数据所属的UV分量上,然后继续遍历直至完成遍历。
[0052] 作为优选,S5的详细步骤如下:
[0053] S51:获取校准时间,通过S3中所属方法获得当前的时间,并转换成为字符串,待添加;
[0054] S52:构建常用文字点阵映射数组,预先将时间戳添加所需数字和符号转换为编码数组,并以ascii码作为索引,编译成静态常量,供添加过程中检索并直接使用,定义每个字符的点阵大小,这里使用n*n描述其大小;
[0055] S53:时间戳水印添加,其详细步骤如下:
[0056] S531:将获取到的经校准的时间字符串的地址映射到JNI层;
[0057] S532:将字符串中每个字符编码转换为ascii值,并查表获得每个字符的点阵数组;
[0058] S533:循环遍历字符串,将点阵数组使用S413所描述的步骤叠加至视频帧中,并将下次叠加的偏移量的x值增加n。直至遍历完成。
[0059] 作为优选,S6的详细步骤如下:
[0060] S61:完整性视频摘要信息获取;通过MD5或hash256信息摘要算法获得视频校验字符串;记为verify_str;
[0061] S62:视频导出过程中分段传输并校验,其步骤如下:
[0062] S621:指定byte数组buffer,长度x。从视频文件头部起始位置开始,读取后续的x长度数据到buffer中;
[0063] S622:将buffer中的数据使用MD5或HASH256获取这段数据的信息摘要,记作src_verify_str;
[0064] S623:将buffer中数据写入目标文件,并从目标文件中获取到该段数据的拷贝,对这段数据进行MD5或HASH256计算,获得其摘要,记作dest_verify_str;
[0065] S624:对比src_verify_str与dest_verify_str是否一致,一致则继续下一次读取,否则重新读取该段数据,直至文件被遍历完;
[0066] S63:通过MD5或hash256信息摘要算法获得导出后的视频校验信息记为final_verify_str;将该final_verify_str与verify_str做对比,一致则表示该视频完整且可靠,不一致则表示视频不可用。
[0067] 作为优选,为提升校验信息的可靠性和有效性,使用端存储校验信息,并提供校验信息在线获取功能;
[0068] 1、在S61流程结束后将MD5或HASH256摘要信息存储至云端服务器中,并将视频信息与校验信息做映射;
[0069] 2、在S63步骤开始前,从云端获取到指定的数据,获取到摘要信息,作为校验信息的对比依据。
[0070] 与现有技术相比本发明的优点在于:1、使用限制较少,支持绝大多数拥有摄像头的安卓平台设备;2、可在录制时对任何不超出视频尺寸的自定义水印图片进行实时添加;3、能够利用智能设备的CPU与GPU进行视频添加,不必依赖传统录像设备中专的视频编解码芯片;4、联网情况下精确获取当前时区的时间并进行精准的时间戳水印添加;5、能够针对录制完成的视频进行客观性校验,防止数据被篡改及传输中出现错误,保证其客观性和真实有效性。
附图说明
[0071] 图1为本发明实施例的主流程图
[0072] 图2为本发明实施例RBG与YUV420转换后得到的编码图;
[0073] 图3为本发明实施例YUV420转换为android源生视频支持的NV21格式编码图。

具体实施方式

[0074] 为使本发明的目的、技术方案及优点更加清楚明白,以下举实施例,对本发明做进一步详细说明。
[0075] 如图1所示,一种针对安卓设备产生的视频添加水印的方法,包括以下步骤:
[0076] S1:安卓设备源生视频流的视频编码分析;
[0077] 摄像头产生的源生视频数据通常为YUV格式。但安卓摄像头产生的数据与其他设备有所不同,通常在对安卓摄像头进行调用时,需要选择NV21格式的视频参数。该参数则表示使用YUV颜色空间描述视频帧。这里需要对安卓原声视频帧的特殊的YUV结构进行解析,其详细步骤如下:
[0078] S11:获取源生视频帧,为安卓设备相机加入预览回调,开启相机,并在预览回调中取得视频帧,该帧即为待分析数据。
[0079] S12:分离灰度数据与颜色数据,其详细步骤如下:
[0080] S121:设获取到的图片尺寸为WIDTH*HEIGHT像素;
[0081] S122:取数组中下标为0到下标为WIDTH*HEIGHT-1的数据,即为灰度数据;
[0082] S123:将该灰度数据输出成为图片,则得到无颜色的黑白图片,灰度数据得以证明;
[0083] S124:取数组中剩余部分,即为颜色数据。
[0084] S13:分析颜色数据;
[0085] 根据标准YUV420数据的存储方式可知,颜色与灰度数据是1对4的关系。即从灰度数据0位置开始,相邻四个像素点为一组,由颜色数据中从0开始的一个或一组数据进行控制。同样设图片尺寸为WIDTH*HEIGHT。则可确定,下标为0、1、WIDTH,WIDTH+1的灰度数据,其颜色中V通道为WIDTH*HEIGHT,U通道则为WIDTH*HEIGHT+1,后续数据以此类推;安卓设备UV分量排布为V0U0,V1U1……VnUn。
[0086] S2:将通用RBG色彩空间编码转换为android源生视频流编码YUV格式;
[0087] 通行色彩空间为RBG,即将图像每个像素使用三个参数红蓝绿进行描述。为方便对YUV格式视频帧进行添加,需要将普通的RGB空间颜色转换为YUV格式。其详细步骤如下:
[0088] S21:RBG数据转换为通行YUV420数据;
[0089] 首先将RBG数据读入数组,从第一个像素开始,每三位取一次数据,即为当前像素的RBG数据。使用通行的RBG与YUV420转换算法可得相应YUV420数据,转换后获得的编码如图2所示。
[0090] S22:YUV420转换为android源生视频支持的NV21格式,由于YUV420数据与androd源生视频的色彩分量不兼容,因此需要进行格式转换。具体的转换算法可以描述为:
[0091] S221:灰度部分原样取值;
[0092] S222:提取灰度数据后,首先取V数据一位,置于灰度数据后第一位。再取U数据一位,置于一位V数据之后,此后VU数据均顺序取值并交叉排布,保持V0U0V1U1……VnUn的顺序即可。
[0093] 对图2所描述的编码使用上述方法进行转换,可以得到图3所描述的android系统支持的YUV(上面说是NV21格式)格式。
[0094] S3:本机时间校准:时间校准是实时录制的基础,准确且真实的时间才能够用于视频的时间戳添加;本方法要求android设备能够访问互联网。通常情况下,应用无法直接设置android系统时间,因此本专利设计了一套简易且有效的时间校准机制;具体步骤如下:
[0095] S31:定义时间偏移存储位,在Constants文件中定义静态全局变量DATE_OFFSET,用于存储时间偏移量;该偏移量表示本机的时间与网络时间之间的差值;
[0096] S32:获取网络时间与时间偏移步骤如下:
[0097] S321:调用URLConntection访问国家授时中心服务器,获取数据并解析。这里获取到的数据是以毫秒为单位的时间数据。
[0098] S322:计算时间偏移量,使用系统System.currentMillis()获取本机时间,计算本机时间与网络时间的差值,存储至偏移存储位;该值为带符号长整型。
[0099] S33:定义真实时间,定义getCurrentDate方法,使用系统当前时间作为基准,与时间偏移值相加,获得当前的真实时间,并使用Data对象将其转换成为YYYY-MM-DD HH:MM:SS形式,返回给调用者。
[0100] S4:自定义水印实时添加
[0101] 水印实时添加需要用到上述S1、S2两大步骤的成果。该步骤有两个分支,一为文字添加,二为图像添加。在对视频帧进行获取并添加水印后,将帧送入视频编码及混合器,进行转码与输出。具体步骤如下:
[0102] S41:文字添加步骤如下:
[0103] S411:获得文字点阵编码,使用通行的文字点阵转换算法,将待转换文字转换为描述点阵的数组;该点阵数组即为待添加水印的Y数据,存储成名为preText的byte数组。
[0104] S412:定义文字颜色UV值,这里需要将待添加的文字颜色从RBG的描述方式转换为UV的描述方式。由于Y数据已经存在,此时只需将待添加的颜色的RBG值转换为YUV值即可。
[0105] 这里将通行的YUV算法进行改进,摈弃计算获得的Y通道,仅留存UV通道的值;最终获得一个U值和一个V值。
[0106] S413:获取待添加视频帧并进行添加,这里设将待添加水印添加至视频的x,y位置,即从视频帧的x,y位置开始添加水印。
[0107] 其步骤如下:
[0108] S4131:为相机添加回调接口,在回调接口的getFrameData方法中实时获取到录制的视频帧,并存成名为src的byte数组;
[0109] S4132:将获取到的src数组的内存地址映射到底层的JNI中;
[0110] S4133:将指向src的指针p偏移至待添加位置,根据开始添加前指定的偏移x,y,将指针p移至y*WIDTH+x位置,即在p的值上累加y*WIDTH+x;
[0111] S4134:从当前p所指偏移位置开始,遍历src数组内存区域中的数据,同时遍历步骤S411中获取到的preText点阵编码;当preText数组遍历到非0x00的数据时,将preText相应位置的数据写入p指针当前位置的内存中,重复上述操作直至preText数组遍历结束。
[0112] S4135:在Y通道添加完后,根据S22中获取到的视频帧的排布规律,计算出src数组该位置的UV数据的地址,将S412获取到的U和V数据写到相应位置,V的地址可以根据p+y*WIDTH/2+x计算,U的地址则为V+1。
[0113] 需要注意的是步骤S4134和S4135必须同时进行。
[0114] S42图像添加,具体步骤如下:
[0115] S421:图像编码数组的获取
[0116] 首先使用通用的方法或工具将待添加图片转换成为bmp格式图像,然后去除获得的bmp图像的头;Bmp图像前56位为头信息,读取从第57位开始的其余数据进入内存,放置在prePic数组中;即可得到待添加的图像的YUV数据。
[0117] S422:获取待添加视频帧并进行添加,其详细步骤如下:
[0118] S4231:为相机添加回调接口,在回调接口的getFrameData方法中实时获取到录制的视频帧,并存成名为src的byte数组;
[0119] S4232:将获取到的src数组的内存地址映射到底层的JNI中;
[0120] S4233:将指向src的指针p偏移至待添加位置,根据开始添加前指定的偏移x,y,将指针p移至y*WIDTH+x位置,即在p的值上累加y*WIDTH+x;
[0121] S4234:设待叠加图像尺寸为W*H,若prePic当前位置数据不为0x00或0xff,则将prePic当前位置的数据写入同步递增的p指针所指的src数组的相应位置,直至遍历至prePic的W*H-1位置时结束;
[0122] S4235:向src写入数据后,取得prePic当前像素的U和V数据,并将该数据写入src相应位置Y数据所属的UV分量上,然后继续遍历直至完成遍历。
[0123] S5时间戳实时添加,详细步骤如下:
[0124] S51:获取校准时间,通过S3中所属方法获得当前的时间,并转换成为字符串,待添加;
[0125] S52:构建常用文字点阵映射数组,为保证实时性,尽量减少水印添加过程中的数据处理时间,提高实时性,预先将时间戳添加所需数字和符号转换为编码数组,并以ascii码作为索引,编译成静态常量,供添加过程中检索并直接使用,这里可以定义每个字符的点阵大小,这里使用n*n描述其大小。
[0126] S53:时间戳水印添加,其详细步骤如下:
[0127] S531:将获取到的经校准的时间字符串的地址映射到JNI层;
[0128] S532:将字符串中每个字符编码转换为ascii值,并查表获得每个字符的点阵数组;
[0129] S533:循环遍历字符串,将点阵数组使用S413所描述的步骤叠加至视频帧中,并将下次叠加的偏移量的x值增加n。直至遍历完成。为增加实时性,可将文字叠加中UV叠加的步骤省略,即仅对Y通道的数据进行叠加,不再计算UV通道的地址,也不对UV通道进行叠加,从而节省时间增加时效性。
[0130] S6:视频校验,详细步骤如下:
[0131] S61:完整性视频摘要信息获取;
[0132] 主要用于完成客观性校验与防篡改检测。这里我们使用两种不同的校验算法,以满足不同严格程度的使用场景。以下两种获取途径,根据具体需要可相互替代。
[0133] 通过MD5信息摘要算法获得校验字符串;
[0134] 如果需要以较快的速度获取文件的校验信息,可以使用MD5算法对文件的校验信息进行获取。以二进制数据流读取的方式,从指定的视频文件中读取数据,使用公开通行的DM5计算方法,获取整个视频文件的MD5值,记为verify_str。
[0135] 通过hash256信息摘要算法获得校验字符串;
[0136] 为进一步提高校验字符串的可靠性,可以选用更为严格但更耗时的HASH256信息摘要算法,对已经生成的文件做校验信息生成。以二进制数据流读取的方式,从指定的视频文件头部开始读取数据,使用公开通行的HASH256计算方法,获取整个视频文件的HASH256值,记为verify_str。
[0137] S62:视频导出过程中分段传输并校验;
[0138] 视频导出时,为防止导出过程中因为数据传输错误导致完整度缺失,本方法在导处过程中对导出数据进行分段校验,以此保证传输数据的完整性和正确性。其步骤如下:
[0139] S621:指定byte数组buffer,长度x。从视频文件头部起始位置开始,读取后续的x长度数据到buffer中;
[0140] S622:将buffer中的数据使用MD5或HASH256获取这段数据的信息摘要,记作src_verify_str;
[0141] S623:将buffer中数据写入目标文件,并从目标文件中获取到该段数据的拷贝,对这段数据进行MD5或HASH256计算,获得其摘要,记作dest_verify_str;
[0142] S624:对比src_verify_str与dest_verify_str是否一致,一致则继续下一次读取,否则重新读取该段数据,直至文件被遍历完。
[0143] S63:导出后视频有效性校验;
[0144] 该步骤主要用于文件转移或传输后验证其可靠性。其步骤与S61所述一致,最终获得该视频的校验信息final_verify_str。然后将该校验信息与S61中获得的verify_str做对比,一致则表示该视频完整且可靠。
[0145] 为提升校验信息的可靠性和有效性,使用云端存储校验信息,并提供校验信息在线获取功能,通过这样的方式保证校验信息不可篡改或删除。
[0146] 1、在S61流程结束后将MD5或HASH256摘要信息存储至云端服务器中,并将视频信息与校验信息做映射。
[0147] 2、在S63步骤开始前,从云端获取到指定的数据,获取到摘要信息,作为校验信息的对比依据。
[0148] 本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈