在视频文件中嵌入代码


Embed code in video file

如果问题不明确,我很抱歉,我会尽力解释。

我正在为视频编写一个现有的PHP下载脚本,其中的一些部分已经损坏。其中有一些代码应该在下载之前将特定的成员代码放入视频文件中,但它不起作用。这是代码:

//embed user's code in video file
$fpTarget = fopen($filename, "a");
fwrite($fpTarget, $member_code);
fclose($fpTarget);

$member_code是一个随机的6个字符的代码。

如果它是文本文件,这对我来说是有意义的,但既然它是视频文件,它怎么可能工作,它应该做什么?如果会员代码以某种方式添加到视频中,我如何在下载后看到它?我没有视频文件的经验,所以任何帮助都很感激(同样欢迎修改可用代码或新代码)。

很抱歉,我无法更准确地描述代码应该做什么,我正在努力自己弄清楚。

它可能会工作,具体取决于视频的格式/类型。MPG文件对文件中的"噪声"相当宽容,玩家会跳过你的代码,因为它看起来不像有效的视频帧数据。

其他格式/播放器可能会呕吐,因为该格式要求某些数据相对于文件末尾具有特定的偏移量,而您现在已经将文件末尾偏移了6个字符。

你最好的办法是弄清楚你提供的任何格式的规范中是否有元数据的规定。例如,可能有对注释字段的支持,您可以简单地将代码放入其中。

然而,如果你这样做是为了"安全"或跟踪未经授权的视频共享,那么简单地将数字写入标题就很容易绕过。更好的选择是以某种方式在视频中添加水印,以便代码嵌入实际的视频数据中,以便在播放时显示"此视频仅属于成员XYZ"。

您不会像使用文本文件那样直接写入文件的内容。正如你所注意到的,这会有效地破坏视频,你无法合理地阅读信息。

对于音频/视频文件,您可以写入与文件打包的元数据。如何打包以及如何处理它通常在很大程度上取决于用于文件的容器格式。(请记住,容器和编解码器是两种不同的东西。编解码器是用于编码音频/视频的格式,容器是存储数据流的文件格式。)

像getID3这样的库可能是一个很好的起点。我从来没有用过,但它似乎正是你想要的。您基本上要做的是向容器中的元数据写入一个值(该容器的预定义值,或者可能是自定义键/值对,等等),该值将是文件的一部分。然后,在读取文件时,您可以获得这些数据。(现在,最后一部分在很大程度上取决于读取文件的内容。数据就在那里,但并不是每个玩家都关心它。你需要将你正在写入的内容与你通常从文件的内部元数据中看到/读取的内容相匹配。)