论文阅读 | 基于流模型和可逆噪声层的鲁棒水印框架(AAAI 2023)

  • Flow-based Robust Watermarking with Invertible Noise Layer for Black-box Distortions
  • AAAI, 2023,新加坡国立大学&中国科学技术大学
  • 本论文提出一种基于流的鲁棒数字水印框架,该框架采用了可逆噪声层来抵御黑盒失真。


 一、问题

基于深度神经网络的水印算法已被广泛研究,大多数的算法都使用了一种“编码器-噪声层-解码器”(Encoder-NoiseLayer-Decoder)的框架,但这样的框架可能会产生一个潜在的问题,就是编码器和解码器耦合不够好的问题。而这一问题可能会使编码器嵌入解码无关的信号,从而限制算法在不可见性与鲁棒性上的整体性能

二、所提的方法

1、概述

a.提出了一种基于可逆流模型的鲁棒水印框架

为更好地实现编码器与解码器的耦合,论文提出了一种基于可逆流模型的鲁棒水印框架,有效使用了相同的网络参数同时执行嵌入过程和提取过程。该框架的核心是一系列可逆网络单元,能有效实现输入信号和输出信号的无损转换。这样,网络的前向传输过程就能有效作为编码器实现消息的嵌入过程,而反向传输过程就能作为解码器实现消息的提取过程。从而保证了编码器和解码器的高度耦合。 

b.提出了一个可逆噪声层的结构来应对黑盒失真

可逆噪声层的主体是一个可逆流网络,其目的是使用前向传输过程模拟黑盒失真。模拟完成的可逆噪声层的前向过程能有效的作为黑盒失真层加入到整个框架中进行训练。同时由于可逆性的存在,可逆噪声层的反向过程也能有效的当作一种提取前的去噪过程,有效去除部分噪声的影响并提升了鲁棒性。

图1. 水印训练和测试的框架图。算法的主要架构是基于流的编码器和解码器,由多个可逆神经块组成,可用于前向编码过程和反向解码过程。在编码器和解码器之间,执行包含白盒和黑盒扭曲的噪声层,以将水印图像扭曲为解码器训练的扭曲版本。

2、如何理解“可逆”?

在这篇论文中,可逆性主要体现在所提出的流式编码器/解码器(Flow-based Encoder/Decoder,简称 FED)架构上。FED利用了可逆神经网络(Invertible Neural Networks,简称 INN)的特性来实现编码和解码过程的可逆性。具体来说,可逆性体现在以下几个方面:

a.共享参数的编码器和解码器

  • 在传统的“编码器-噪声层-解码器”(END)架构中,编码器和解码器是分开训练的,可能导致它们之间耦合不紧密。

  • 流式架构通过使用可逆的神经网络块,使得编码器和解码器共享相同的网络参数和结构,这意味着它们在前向编码和反向解码过程中共享相同的网络权重。从而在前向编码和反向解码过程中实现紧密耦合:

b.可逆的神经块

FED由多个可逆的“上-下采样”神经块组成。这些神经块在前向传播时用于嵌入水印信息,在反向传播时用于提取水印信息。每个神经块都设计为可逆的,即它们能够通过相同的网络结构和参数实现前向和反向操作。

c.前向编码和反向解码

在前向编码过程中,可逆神经块接收水印信息和宿主图像作为输入,并输出带水印的图像和冗余信息。在反向解码过程中,使用相同的神经块结构,但信息流的方向相反,从而从失真图像中恢复出水印信息。

(1)在前向编码过程中,我们有图像信息 x_{i}和水印信息 m_{i}作为输入。我们的目标是将水印信息嵌入到图像中,生成新的图像信息x_{i+1}和更新后的水印信息m_{i+1}​。

  1. 上采样操作 U_i:将水印信息m_i上采样到与图像信息x_{i}相同的尺寸。
  2. 下采样操作 D_{i}^{1}D_{i}^{2}:这两个操作将上采样后的图像信息 x_{i+1}进行下采样,得到两个不同的表示,用于更新水印信息。
  3. 前向编码公式如下:

这里,⊗表示点积操作,exp 表示指数函数。 

在正向编码过程中使用的加号(+)表示的是将两个信号或特征图进行逐元素相加的操作。这种操作在神经网络中非常常见,尤其是在处理图像数据时。公式中,加号用于将上采样后的水印信息与原始图像信息相结合。原因和作用:

1. 合并信息

加法操作用于合并两个不同的信息源。在正向编码的情况下,这包括:

  • 原始图像信息x_{i}:这是未经修改的输入图像。
  • 上采样的水印信息U_i{(m_i)}:这是将水印信息上采样到与图像相同的尺寸后的结果。

通过将这两个信息源相加,我们可以将水印信息直接嵌入到图像中,而不显著改变图像的视觉特性。

2. 保持图像质量

加法是一种简单且有效的信息融合方法,因为它不会引入额外的复杂性或计算负担在图像处理中,保持原始图像的视觉质量是非常重要的,尤其是在水印或隐写术应用中。加法操作因其简单性,通常不会对图像质量产生负面影响。

3. 可逆性

在可逆神经网络中,加法操作是可逆的,这意味着可以通过反向操作(减法)来恢复原始的图像信息。这种可逆性对于后续的解码过程至关重要,因为它允许从带水印的图像中准确地提取出水印信息。

(2)在反向解码过程中,我们希望从带水印的图像中提取出水印信息。我们使用与前向编码相同的网络块,但是以相反的顺序应用它们。

  1. 反向操作:首先对冗余信息r_{i+1}进行操作,以生成r_{i}
  2. 下采样的逆操作:使用U_i的逆操作从r_{i}中恢复图像信息x_{i}
  3. 反向解码公式如下:

这里,x_{i+1}'是失真图像,r_{i+1}是从x_{i+1}'中提取的冗余信息 

在反向解码过程中使用的负号(-)和指数函数(exp⁡)是可逆神经网络中常见的操作,它们用于确保网络的可逆性和信息的准确恢复。这些操作的具体作用如下:

  1. 负号(-):在反向操作中,负号用于逆转前向过程中某些操作的效果。在许多可逆网络设计中,正向操作和反向操作是对称的,负号确保了这种对称性,使得网络可以准确地反向追踪其操作。例如,如果在前向传播中进行了加法操作x=y+z,那么在反向传播中,我们可能需要执行减法操作z=x-y来恢复 z的值。

  2. 指数函数(exp⁡)指数函数在可逆网络中用于处理乘法或除法操作这是因为乘法和除法操作在数学上不是可逆的,因为它们不保持信息的一一对应关系。通过使用指数和对数函数,我们可以将乘法转换为加法,或将除法转换为减法,从而使得操作可逆例如,如果前向操作是乘法x=yz,那么反向操作可以是z = \exp(\ln(x) - \ln(y))

  • 负号 − 用于逆转D_{i}^{1}操作的效果。
  • 指数函数 exp⁡用于逆转D_{i}^{1}操作的效果,并且通过这种方式,可以将乘法操作转换为加法操作,使得网络可逆。

d.可逆的噪声层

噪声层在训练阶段被引入,用于模拟和扭曲水印图像,使解码器能够从扭曲的图像中提取出水印信息。这种机制通过联合训练编码器、噪声层和解码器来确保水印系统的鲁棒性。

(1)噪声层的类型
  • 白盒噪声层(White-box Noise Layer):直接使用现有的可微噪声层(如JPEGSS用于JPEG压缩)。这些噪声层通过已知的可微操作模拟已知的图像处理过程。
  • 黑盒噪声层(Black-box Noise Layer,即INL):针对未知机制的黑盒失真(如社交媒体中的风格转换),采用可逆神经网络(Invertible Neural Network, INN)来模拟这些失真。INL的前向过程作为训练时的噪声层,后向过程作为提取前的去噪操作,以提升系统对黑盒失真的鲁棒性。
(2)黑盒噪声层(INL)的设计
  • 训练数据:通过将原始图像 I_+经过黑盒失真过程((如风格转换API)),得到失真图像I_-,形成训练数据对 {I_+,I_-}
  • 网络架构:INL由多个可逆噪声块组成,每个噪声块包含三个模块:ϕ、ρ、ω,这些模块是任意的可学习函数。通过前向过程将原始图像扭曲成扭曲图像,后向过程则将扭曲图像恢复到接近原始图像的状态。
  • 训练目标:使得通过INL正向过程 N_{\theta_d}(I_{+}) 处理后的失真图像 I_{+}^{de}尽可能接近于真实失真图像I_-,同时在反向过程N_{\theta_d}^{-1}(I_{-})中,处理后的图像 I_{-}^{de}应尽可能接近原始图像I_+

\mathcal{L}_{\text{dis}}\left(\theta_d\right) = \text{MSE}\left(I_{+}^d, I_{-}\right) + \text{MSE}\left(I_{-}^{de}, I_{+}\right)

  • INL的输入和输出y_{i}^hy_{i}^l分别代表高频和低频组件。y_{i+1}^hy_{i+1}^l是经过处理后的高频和低频组件。

  • 正向过程:公式描述了如何通过正向过程将输入转换为输出,具体公式为如下。其中\phi,\rho, 和\omega是任意函数,通常选择具有良好表示能力的密集块(Dense Block)。 

  • y_{i+1}^{l} = y_{i}^{l} + \varphi_{i}\left(y_{i}^{h}\right):这一步表示低频组件的更新。函数 ϕ 作用于高频组件y_{i}^h,并将结果加到低频组件y_{i}^l上,生成更新后的低频组件y_{i+1}^l

  • y_{i+1}^{h} = y_{i}^{h} \otimes \exp\left(\rho_{i}\left(y_{i+1}^{l}\right)\right) + \omega_{i}\left(y_{i+1}^{l}\right):这一步表示高频组件的更新。ρ函数作用于更新后的低频组件y_{i+1}^l,然后取指数得到一个值,与原始高频组件y_{i}^h逐元素相乘(表示为 \otimes,Hadamard乘积。在矩阵或多维数组的上下文中,逐元素相乘是指两个矩阵或数组相同位置的元素之间的乘法操作。)。ω函数同样作用于y_{i+1}^l,其结果与上述乘积相加,得到最终的高频组件y_{i+1}^h

a. 离散小波变换(Discrete Wavelet Transform,DWT)

离散小波变换是一种用于信号分解的技术,它可以将信号分解成不同尺度(频率)上的组成部分。DWT 利用小波函数来捕捉信号的局部特征,这些小波函数具有不同的尺度和位移版本。

  • 功能DWT 能够将信号分解为低频部分(近似部分)和高频部分(细节部分)。低频部分包含了信号的概貌信息,而高频部分包含了信号的细节信息。
  • 应用:在图像处理中,DWT 常用于图像压缩和降噪,因为它能有效分离图像中的不同特征;在音频处理中,用于分析音频信号中的不同频率成分。
b. 逆离散小波变换(Inverse Discrete Wavelet Transform)

逆离散小波变换是 DWT 的逆过程,它用于从小波系数中重建原始信号。通过 IDWT,可以将 DWT 分解得到的近似系数和细节系数重新合成为原始的信号或图像。

  • 功能IDWT 通过结合低频和高频成分来重建信号。它确保了原始信号可以从其小波系数中准确地恢复。
  • 应用:在图像和信号的重建过程中,IDWT 是必不可少的步骤,特别是在压缩和降噪处理之后,需要恢复原始图像或信号时。

e.冗余信息的生成和利用

在前向编码过程中生成的冗余信息 Rf 在反向解码过程中并不需要,这表明解码过程是“盲”的,即解码器不需要任何额外信息即可从失真图像中提取出水印信息。

 3、损失函数

(1)图像损失

图像损失的目的是确保嵌入的水印对原始图像的影响尽可能小,以实现良好的不可见性。这是通过最小化水印图像I_{\text{em}}和原始宿主图像 I_o之间的均方误差(MSE)来实现的。

\mathcal{L}_{\text{image}}(\theta) = \text{MSE}\left(I_o, I_{\text{em}}\right)

其中,I_{\text{em}}相当于f_{\theta}\left(I_o, M\right),这里f_\theta表示前向编码过程,\theta表示模型参数。 

(2)消息损失

消息损失的目的是确保即使在图像受到失真后,也能准确地从失真图像I_d中提取出水印信息。这通过最小化提取出的水印M_{ex}和原始水印 M之间的均方误差来实现。

\mathcal{L}_{\text{message}}(\theta) = \text{MSE}\left(M, M_{\text{ex}}\right)

其中,M_{ex}相当于f_{\theta}^{-1}\left(I_d, R^b\right),这里表示反向解码过程,R^b是一个全零矩阵,大小与M 相同。 

(3)总损失

\mathcal{L}_{\text{total}} = \lambda_1 \mathcal{L}_{\text{image}} + \lambda_2 \mathcal{L}_{\text{message}}

这里,λ1和 λ2是权重参数,用于调整两个损失部分的相对重要性。 


三、实验

1、实验设置

数据集训练数据集DIV2K、测试数据集USC-SIPI;图像像素尺寸为128*128
参数设置

水印信息设置为 64 位(8 × 8 bits),即 h和 w 设置为 8。λ1和 λ2的参数值分别固定为 1 和 10。在 FED 中的可逆神经块数量 n设置为 8,可逆噪声块 k也设置为 8

运行环境PyTorch 、NVIDIA RTX 3090ti
对比方法 HiDDeN、TSDL 和 MBRS。【在实验时,这些方法都使用相同的数据集和相同的噪声层进行重新训练。所有的实验都是用大小为128×128的图像和大小为8位×8的水印进行】

 2、实验设计

(1)白盒失真测试

为测试算法对已知失真的鲁棒性,如裁剪、dropout、噪声(高斯噪声、椒盐噪声)、模糊(高斯模糊、中值模糊)和 JPEG 压缩。在训练时使用特定的噪声层,并在测试时应用上述失真。

 注:表格中的实验结果用于评估水印技术的不可见性(通过视觉质量 VQ 表示,用 dB 单位的峰值信噪比 PSNR 衡量)和鲁棒性(通过提取准确率 ACC 百分比表示) 

  • Cropout:图像裁剪失真,其中 r 表示裁剪比例。所提出的方案保持了最好的不可见性。在鲁棒性方面,在裁剪比例下,提取精度比对比方案高出2%。
  • Dropout:随机丢弃像素的失真,同样用 r 表示比例。PSNR值高出1dB。
  • S&P Noise:椒盐噪声,用噪声比例 r 表示。当面对比例为0.05的噪声时,所提方案保证了至少3%的抽取精度优势。
  • JPEG Compression:JPEG 压缩失真,用不同的质量因子 QF 表示。该方案鲁棒性最好,具有超过2dB的PSNR优势,当QF=50时,可保证提取精度提高近5%
  • Gaussian Noise:高斯噪声,用标准差 σ 表示。在方差较大的情况下,鲁棒性更有优势。在PSNR值最高的前提下,噪声方差为0.05时的提取准确率达到了98.8%,比对比方案提高了至少4%。
  • Gaussian Blur:高斯模糊,用标准差 σ 表示模糊程度。该方法以最高的PSNR值保持最高的提取精度。
  • Median Blur:中值模糊,用窗口大小 w 表示模糊程度。当面对7个×7滤波器窗口的最强失真时,所提方案仍能保持100%的提取精度,比其他方案高出2%。

(2)黑盒失真测试

为评估算法对未知失真的鲁棒性,如风格转换("Crayon"蜡笔风格、"Heavy Color"重彩风格、"Reverse Color"色彩反转、"Sketch" 素描风格)。使用 INL 模拟黑盒失真,并在测试时应用这些失真。实验结果可得在面对黑盒失真时,提取准确率超过 95%。

注:不同强度(轻“+”、中“++”、重“+++”) 

  • "Crayon"(蜡笔风格):这种失真可能涉及到图像颜色和纹理的显著改变,模拟蜡笔或彩色铅笔绘制的效果。在测试中,评估水印算法在图像经过蜡笔风格转换后,提取水印的准确性。

  • "Heavy Color"(重彩风格):这种失真可能增强图像的色彩饱和度,使颜色更加鲜艳。测试结果展示了水印算法在处理色彩增强后的图像时,保持水印信息的能力。

  • "Reverse Color"(色彩反转):色彩反转失真会改变图像中的颜色,将每个像素的颜色转换为其补色。这种极端的失真测试了水印算法在颜色信息完全变化的情况下的性能。

  • "Sketch"(素描风格):素描风格失真将图像转换为类似手绘素描的效果,通常涉及边缘检测和颜色去除。测试中,这种失真用于评估水印算法在图像细节丢失和颜色信息减少时的鲁棒性。

(3)消融实验 

1)INL和预训练模型的有效性实验

分别测试了仅使用高斯噪声(表示为G)、仅使用INL(表示为INL)和两者(表示为G + INL)训练的网络的性能。每个模型将被训练400个epoch,然后记录相应的PSNR和提取精度,如下表所示。

实验结果可得:只包含G可能会产生较强的鲁棒性,但不可见性不够好。对于只使用INL进行训练,网络可能得不到很好的性能,我们认为这主要是因为INL的畸变比较复杂,可能不容易收敛到一个通解。但是当INL与G组合时,它给出了一个预定义的方向,因此微调更容易进行,并且G + INL的性能最好。

 2)噪声层模拟网络的架构的影响

 评估可逆噪声层(INL)与传统CNN架构噪声层在模拟黑盒失真时的有效性和效率。

  • INL:使用可逆神经网络模拟黑盒失真,利用其正向过程INL^f作为噪声层进行训练,反向过程INL^b用于去噪。
  • CNN:使用传统的CNN架构(如ResNet),其中包含多个Res-Blocks,来模拟正向失真过程(Res^f)和反向去噪过程(Res^b)。

实验结果可得:提出的INL在隐形性和鲁棒性方面相较于传统CNN表现出显著优势,PSNR值提高了3dB以上,提取精度提高了14%。这表明INL在保持水印隐蔽性和抵抗图像失真方面更为有效。同时,在传统CNN中,正向过程(Res^f)和反向过程(Res^b)的特征可能不匹配。使用Res^b进行去噪处理时,不仅去除了图像失真,还可能擦除重要的水印特征,导致性能下降


基于可逆神经网络的鲁棒隐写相关阅读:

基于可逆神经网络的图像隐藏技术 (ICCV 2021) - HiNet: Deep Image Hiding by Invertible Network 图像处理之《鲁棒图像隐写术:隐藏频率系数中的信息》论文精读

2022-CVPR-Robust Invertible Image Steganography 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/430498.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI算法岗面试八股面经【超全整理】——NLP】

AI算法岗面试八股面经【超全整理】 概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】NLP【A…

教师管理系统小程序+ssm论文源码调试讲解

第二章 开发工具及关键技术介绍 2.1 JAVA技术 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterrise JavaBeans)的全面支持,java servlet AI,JS(java server ages&…

Unity 热更新(HybridCLR+Addressable)-创建Addressable资源

三、创建Addressable资源 创建三个文件夹,放Addressable资源,里面对应放程序集,预制体以及场景 拖拽到Addressable Groups对应组中 其中文件名太长,带着路径,可以简化名字 创建一个脚本,对于这个脚本进行一…

vue3自定义hooks

引言 Vue3引入了组合式API,使得代码逻辑更自由、灵活。其中自定义Hooks能让我们将客服用的逻辑抽离成一个独立的函数,以实现在多个组件中复用的目的。可以简单理解成封装成一个模块,以方便其他地方调用。 实现 自定义hooks useDog impor…

杰发科技——Eclipse环境安装

文件已传到网盘: 1. 安装文件准备 2. 安装Make 默认路径:C:\Program Files (x86)\GnuWin32\bin\ 不复制的话会报错 Error: Program "make" not found in PATH 3. 安装工具链 默认路径:C:\Program Files (x86)\Arm GNU Toolchain…

闯关leetcode——69. Sqrt(x)

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/sqrtx/description/ 内容 Given a non-negative integer x, return the square root of x rounded down to the nearest integer. The returned integer should be non-negative as well. You mu…

计算机毕业设计之:基于微信小程序的中药材科普系统(源码+文档+讲解)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

模拟实现(优先级队列)priority_queue:优先级队列、仿函数、 反向迭代器等的介绍

文章目录 前言一、优先级队列二、仿函数三、 反向迭代器总结 前言 模拟实现(优先级队列)priority_queue:优先级队列、仿函数、 反向迭代器等的介绍 一、优先级队列 优先级队列本质是一个堆,使用vector容器进一步改进进行实现&am…

vue使用PDF.JS踩的坑--部署到服务器上显示pdf.mjs viewer.mjs找不到资源

之前项目使用的pdf.js 是2.15.349版本,最近换了一个4.6.82的版本,在本地上浏览文件运行的好好的,但是发布到服务器(IIS)上打不开文件,控制台提示找不到pdf.mjs viewer.mjs。 之前使用的2.15.349pdf和viewer…

mock虚拟接口技术

一、什么是mock mock指的就是使用mock创建出来的一个虚拟的接口 二、对于测试人员而言,我们为什么要使用mock 当我们进行接口测试时,如果对应的接口还没有开发好,但是我们又需要用到这个接口响应的信息,这个时候我们就可以使用…

邮件发送高级功能详解:HTML格式、附件添加与SSL/TLS加密连接

目录 一、邮件HTML格式设置 1.1 HTML邮件的优势 1.2 HTML邮件的编写 二、添加附件 2.1 附件的重要性 2.2 添加附件的代码示例 2.3 注意事项 三、使用SSL/TLS加密连接 3.1 SSL/TLS加密的重要性 3.2 SSL/TLS加密的工作原理 3.3 在邮件发送中启用SSL/TLS 3.3.1 邮件客…

智能算法躲避拥堵,高德企业用车上线“动态选路服务”为出行提效

近日,高德企业用车正式上线了一项全新服务——“动态选路服务”,旨在基于智能算法,动态规避突发拥堵路线,为企业用车用户提供更便捷、智能的出行方案。 以技术着眼细节,高德企业用车在帮助企业用车用户节约出行时间和…

飞睿智能实时雷达活体探测传感器模块,智能家居静止检测实时感知人员有无

随着科技的飞速发展,我们的生活正在经历着未有的创新。在这个创新的浪潮中,实时雷达活体探测传感器模块的技术正逐渐崭露头角,以其独特的优势为我们的生活带来安全与便捷。今天,我们就来详细探讨一下这项技术,看看它是…

TCL25届校招测评笔试TAS人才测评题库:高分攻略真题分析

🌟 职场新人必看:TCL校招测评全解析 🌟 亲爱的小伙伴们,你是否正准备踏入职场,或是对即将到来的校招感到既兴奋又紧张?今天,我将带你深入了解TCL校招中的TAS人才测评,让你在面试前做…

MyBatis - 动态SQL

前言 我们在某网站填写个人信息时,时常会遇到可以选填的空(即可填,可不填),由于之前讲过的Java中的SQL语句都是固定的,且我们不可能对所有情况都写出与之对应的插入语句(太过繁琐)&…

最新简洁大方的自动发卡网站源码/鲸发卡v11.61系统源码/修复版

源码简介: 最新简洁大方的自动发卡网站源码,它就是鲸发卡v11.61系统源码,它是修复版。 说到鲸发卡系统,鲸发卡系统在发卡圈很多人都知道的,它是市面最好发卡系统之一,操作起来简单得很,界面也…

03-Docker下载加速

03-Docker下载加速 docker下载加速 方式1:使用 网易数帆、阿里云等容器镜像仓库进行下载。 网易数帆官网:https://sf.163.com/ 例如,下载网易数帆镜像中的mysql。(网易数帆的地址为 hub.c.163.com,网易数帆对dockerh…

Protobuf:基本概念与使用流程

Protobuf:基本概念与使用流程 基本概念Linux 安装使用流程.proto文件编译使用 运行机制 基本概念 在进行网络编程时,经常需要进行数据传输,只有双方主机都保证数据格式的一致性,才能保证数据被正常解析。这个过程称为序列化与反序…

Android平台Unity3D下如何同时播放多路RTMP|RTSP流?

技术背景 好多开发者,提到希望在Unity的Android头显终端,播放2路以上RTMP或RTSP流,在设备性能一般的情况下,对Unity下的RTMP|RTSP播放器提出了更高的要求。实际上,我们在前几年发布Unity下直播播放模块的时候&#xf…

CTFHub技能树-SQL注入-Cookie注入

使用bp发现cookie的注入点 id1,发现为数字型 首先使用联合查询 id 1 order by 2 id 1 order by 3发现2的时候有回显,而3的时候无回显 Cookie: id-1 union select database(),user() 后面开始库->表->列->数据 Cookie: id-1 union select 1…