java中的视频隐写术

时间:2012-07-03 16:53:41

标签: java video steganography xuggler

我需要为我的项目创建隐写视频(隐藏在其中的数据的视频)。 我需要通过从视频中提取所有帧然后通过替换像素颜色值的LSB中的位来隐藏数据,然后对所有帧进行编码以创建新视频(请注意这里是无损格式)是必需的,否则我可能会丢失隐藏的数据。)

我的研究激励我使用 xuggler 来操作视频,' png '格式保存提取的图像,因为它是无损格式(将它们作为BufferedImage对象处理) ,并使用' avi '视频文件。 截至目前,我能够从视频中提取所有帧并在lsb中对隐藏数据进行编码。

但是我在使用xuggler 创建新的avi视频文件时遇到了问题。当 我从新视频中提取帧时,会丢失隐藏数据 。我不明白如何做到这一点并保持数据完好无损。这可能是由于某些有损压缩技术被用于创建新视频。新视频的大小对我来说无关紧要。我也找不到正确的codec_id来创建新视频。我正在广泛使用wiki上提供的xuggler教程。  解码和捕获框架 http://build.xuggle.com/view/Stable/job/xuggler_jdk5_stable/ws/workingcopy/src/com/xuggle/mediatool/demos/DecodeAndCaptureFrames.java

我可以根据需要发布我的代码......

1 个答案:

答案 0 :(得分:2)

问题在于您使用的算法,因为mpeg或其他着名的视频压缩技术是有损压缩技术,当您将帧转换回视频流时,您将丢失数据。因此,在有损视频编解码器中,您无法使用LSB技术进行隐写。     相反,您可以做的是以某种方式更改视频的运动矢量以隐藏隐写数据。这个问题是xuggler是一个更高级别的api可能不会给你一种方法来找到/改变p / b帧的运动矢量。 xuggler使用的ffmpeg确实有一个可视化运动矢量的选项,所以你对运动矢量algo的最佳选择是改变ffmpeg的源代码作为它的一个开源项目。如果您找到更好的方法来查找运动矢量,请回复。

嗯,有一种更简单的视频隐写方法

您可以参考Real steganography with truecrypt

但是如果你真的想用mpeg视频压缩你可以参考精彩 论文:Steganography in Compressed Video Stream但问题仍然是提取和操纵运动矢量