(国家广播电视总局广播电视科学研究院,北京 100866)
在网络媒体迅速崛起的今天,音视频盗版行为日益猖獗,如何对影视产业的媒体资料进行盗版溯源成为了难题。本论文对基于数字音频水印技术的盗版溯源方案中的移动终端的水印检测软件实现进行了描述。基于数字音频水印技术的盗版溯源方案是将指定的水印内容嵌入到指定的视音频源文件的音频中,在被盗版时可以通过对其音频中携带的水印内容进行取证。通过水印内容可以判别盗版音视频的来源、被盗版的途径、地点、时间等信息,以此完成溯源与取证,以法律手段来遏制盗版的传播。
本文的第二节介绍了数字音频水印的嵌入方案,结合版权保护对水印的要求制定了水印码的排布方案和嵌入方案;第三节介绍了水印采用的检测技术,由于盗版过程中音频会随着空气的传播而产生衰落,如何对抗这种衰落我们提出了方案;第四节对检测功能在移动终端的实现方案作出说明,包括检测方法与检测流程;第五节说明了软件实现的框架以及对手机性能的测试;最后第六节进行了总结。
音频水印嵌入端可以支持视音频多声道音频水印信号的同时嵌入,根据版权保护对水印嵌入基本格式的要求,本文需要嵌入的信息分别为有效载荷标识、时间戳标识、服务器标识。结构如图1所示。
图1 数据业务帧
(1)时间戳为影片播放的时间,根据DCI对嵌入时码的要求,每15分钟至少解出一次时码,以15分钟为一个单位,24 小时为一天,一年共计366天,因此一年中有效的时码共有35136个,可以用16bit表示。
(2)服务器标识由6位数标识,如123456,可以用19bit表示。
(3)数据有效载荷用6bit可表示0~64的载荷数。
在传输帧封装之后,我们对每个bit进行双极性二进制码的调制,变成+1、-1、+1…,之后对每个二进制码进行扩频,考虑到声学环境我们每个单数据点采用3帧冗余嵌入,以此来增强鲁棒性和水印检出的准确性。开头加上用于帧起始位置定位同步pny序列,用于扩频的pnx序列和pny序列是正交的,各自具有较强的自相关特性。物理结构如图2所示。
图2 物理层封装
数字音频水印检测技术是对携带扩频序列水印的音频进行水印内容检出的技术,在明确水印扩频嵌入原理的基础上我们采用互相关的技术来判别被检测音频中是否携带有水印信息,以及水印信息的内容。
水印检测采用扩展频谱的方式进行提取,提取流程如下图3所示。
图3 水印提取流程图
时频变换和相关计算是水印提取的关键环节。时频变换采用频率抽取 (DIF)基2FFT 方法,遵循对时间前后分和对频率偶奇分两个规则。先将x (n)按序号分成前后两部分,然后得到:
则构成DIF运算的蝶形单元,如图4所示。
图4 蝶形运算单元
然后对N/2点的DFT 再进行细分,直到最后得到两点的DFT。
IFFT 的计算方法可以通过FFT 实现,只要把DFT 公式中的系数W改为W,并乘以1/N 就可以得到IFFT 算法。当把频率抽选FFT 算法用于计算IFFT 时,由于原来输入的时间序列x (n)现在变为频率序列X (k),原来是将x (n)前后分,而现在是对X (k)前后分,因此这种算法改称为时间抽取IFFT 算法。类似的,当把时间抽选FFT 算法应用于计算IFFT 时,称为频率抽选IFFT 算法。
相关计算采用互相关的方法,将接收信号的频谱f与扩频序列的反向序列g进行卷积运算,得到相关结果(f*g)(n),如式(5)所示:
f(k)是接收信号的频域序列,g (n-k)是扩频序列的反向序列。通过其卷积结果 (f*g) (n)的相关峰可以判断两个序列的相关性,如图5所示。
图5 水印相关结果示意图
假设,相关得到正值的最大值为α,得到负值的最大值为β,如果α>β则认为成功同步比特值0,如果α<β认为是比特值1。
水印解码方案将水印检测原理作为核心解码技术,辅助RS译码和CRC校验技术来提高水印解码的正确率和完整度。共分为以下几个步骤:
(1)首先,对携带水印的信号进行时频变换,在频域与扩频序列进行相关计算,根据相关结果来判断当前帧携带比特0或者比特1。
(2)水印值确认。为了增强水印的鲁棒性,嵌入时采取每个比特值连续重复嵌入3次的方式,同样,在检测端如果连续3次检测到同一水印内容才能认为该值被检出。
(3)对位放置结果。由于检测时数据采集可能并非正好从一个扩频序列的第0个位置开始,这种数据错位会在一定程度上降低水印的检出率,为了解决该问题本方案建立一个包含3帧数据的数据缓存,每次默认从第二帧的第0 位开始取值,但是,在第(2)步确定水印内容后通过对第 (1)步中相关峰的出现位置可以计算出数据中水印的起始位置,依次来指导下一帧数据取值的起始位置,从而实现水印数据的采样同步。
(4)RS译码与CRC 校验。经过以上3个步骤多次重复,完成预设水印位的填充,包括载荷数信息及其校验位、时间戳信息及其校验位、序列码信息及其校验位。此时得到的信息为发端RS编码后信息,检测时通过RS译码来纠正突发性错码,从而还原水印原始载荷。然后再通过CRC校验来完成三个数据项的正确性验证,校验通过的形成最终数据,校验失败的数据丢弃。
水印的整体解码方案如图6所示。
图6 水印取证解码方案图
检测软件分为音频接收、水印解码、界面交互三个模块,每个模块单独占用一个线程。
界面线程负责在后台进行运算的时候保证界面的运行以及各个控件的及时响应。
声卡线程当用户触发检测功能以后声卡线程开始工作,调用终端的麦克风驱动获取环境声音为基带数据格式流发送给解码线程,声卡进行数据采集时由于其单次采集的数据长度不足解码所需的一帧长度,需要将数据进行缓存,待达到所需长度后向解码线程进行传递。
解码线程将声卡传递的数据进行水印解码,声卡数据为定点数据,这里需要对其进行浮点化,其中立体声需要分离一个声道的数据进行解码,包括RS 译码、水印检测和CRC校验,以此来还原水印载荷。程序流程图如图7所示。
图7 水印检测程序流程图
通过界面触发开始检测后,启动声卡与检测线程,检测线程处于等待接收数据状态,声卡线程采集音频数据直至数据够一个扩频帧的样点数再送入检测线程,检测线程开始检测,完成检测后将结果回吐至界面线程,由界面线程进行显示。
图8 水印检测软件测试界面
图9 小米MAX 手机录音频谱图
图10 三星galaxy A8手机录音频谱图
图11 VIVO X6手机录音频谱图
由于水印检测采用的是相关性判定,所以在水印内容未知的情况下需要用已知的扩频序列集合去进行轮寻比对,这时手机负载的性能就对水印的承载数量提出了要求。我们将每个检测线程的时效性约束在40ms内,通过测试发现软件检测线程控制在3个以内性能最佳。也就是说,每个检测线程承担10个水印扩频序列的检测任务,检测任务总体控制在30个都可以达到性能最佳。本方案基于的水印嵌入方案只需要同步头、比特0、比特1三种水印,所以完全可以满足本方案的检测需求和时效性要求。
由于不同品牌不同型号的手机性能有一定的差别,并且手机采集音频时对音频的处理也不同。因此完成软件实现后,本文对多个手机的音频采样进行了测试,其中采样频带宽度最宽的是小米MAX手机,最宽到了24000 Hz,还原度最高,但是其中掺杂的杂音也较多。最窄的是VIVO X6,仅到了9000 Hz,这意味着如果水印是全频带嵌入的,将有50%以上的相关性被削减了,前文给出几款手机的音频接收频段图,见图9~图11所示。
针对不通过手机对音频中高频的音频频谱的衰减,我们对麦克风采集到的音频进行了能量的加强,用专用的滤波器滤出音频中隐藏的水印信号,同时对水印信号进行能量叠加以提高水印信号的信噪比,之后进行混响消除处理,将水印检测终端在这几款手机上进行收测测试,几款手机均可以达到理想的检测效果,证明了算法方案对抗手机对音频的处理达到的效果尚佳。
本文设计了音频水印检测算法在移动终端中实现的方案,该方案的优势就是实现了实际载荷率有多重的保护,因为在从空中录制的声音中提取水印信息难度相当大,水印信息虽然以音频为载体,但实际上音频对水印是一种相当强的干扰,即使非常理想的传输过程中,例如信号标准音频线直连的时候,也不能做到水印信息的解析率为100%。而且在空气中声波属于纵波,靠空气的振动进行传播,因此空气的振动强度必然会越来越小,因此到达接收终端时属于微弱信号。这对水印的健壮性产生了极大的考验,因此我们在数据业务封装时加入了各自的CRC校验,之后用RS编码对数据进行冗余纠错,使数据具有一定的自纠错能力,每变成双极性码后,每个码重复三次并进行增益,用于对抗音频在空气中传播产生的衰减。
受到移动终端的硬件性能限制,我们在安卓系统中对算法方案进行了实现,通过长期拷机测试确定了方案的可行性。该软件将来可以用于不同声场的水印收测外场测试,也可以对不同品牌、型号手机的收音和音频处理方式对水印产生的影响进行测试。❖