读取标题名声后,数据帧开始,我想知道 mp3 播放器读取的数据帧大小是多少,这样如果我更改每个帧的单个位而不会对文件的声音造成太大影响,以及如何我可以更改一位(最后一位),因此在 C# 中效果最小。请帮我
3 回答
我能够弄清楚并想出了我自己的算法,Rzr,你说的都是对的。
mp3 文件是高度压缩的文件,任何帧中的任何位变化都会引入巨大的噪音。
有办法解决这个问题,
Soln_1: Hide the text data and in any of the bit of each byte and reconstruct the frame using humming code
Soln_2: which i was able to do it, using Layer III, BitRate=128000, SampleRate=441000, Padding=0
缺点:文件大小会有所增加,这是非预期用户无法预测的,除非他拥有原始 mp3 文件的精确副本。
能够实现:没有噪音我能够在 3mb mp3 文件中隐藏高达 5kb 的文本数据
解决方法:
step1: scan every 8 bytes in each frame
step2: take a 8 bits from the text data
将每一帧中的每一位文本数据放置在何处的预定义位置,例如:第 4 个位置。
step3: check every 4th bit location of each byte of the frame is same as the each bit of the text data are same
eg:文本数据一字节为01110001
mp3 数据帧的第一个 8 字节
byte_1: 01101111 -->4th location bit is 0
byte_2: 01111111 -->4th location bit is 1
byte_3: 01111001 -->4th location bit is 1
byte_4: 01111011 -->4th location bit is 1
byte_5: 01100011 -->4th location bit is 0
byte_6: 01101100 -->4th location bit is 0
byte_7: 01101011 -->4th location bit is 0
byte_8: 01110011 -->4th location bit is 1
所以帧中的这个字节,每个4th
位位置都具有与文本数据位相同的位。
Step4: note down the location of the byte in the mp3 data frame, in this case its "1" that is 1st location
如果 mp3 数据帧中的字节与数据位不匹配,则跳过该字节并继续下一个字节,继续执行相同操作,直到隐藏整个文本数据。
Step5:now take all the locations where the text data is present and add these as a byte to the data frame of mp3.
这是我能够成功实施的一种解决方案。
我也在做一个类似的项目......首先你必须了解 mp3 文件结构......我希望这个链接能帮助你了解 mp3 文件结构......一旦你清楚了文件结构,它就会很漂亮自己编写代码很容易...将 mp3 文件作为流获取并从中提取每一帧(一旦您了解了 mp3 文件结构,这应该真的很容易...事实上,我只花了几个小时编写代码来做到这一点)......以及关于您的算法的建议。一个 5 mb 的 mp3 文件大约有 15,000 帧......所以,如果您考虑每帧替换一个位,那么您可以存储的最大数据是 2KB...
我尝试了同样的方法,但我每帧更改了一个字节......这在结果文件中引入了一些噪音......关于如何减少噪音的任何建议......!?!?!??并希望我的回答对您有所帮助... :)