如果问题含糊不清,我很抱歉,我会尝试解释。
我正在为视频制作一个现有的PHP下载脚本,其中一些部分已被破坏。那里的代码应该在下载之前将特定的成员代码放在视频文件中,但它不起作用。这是代码:
//embed user's code in video file
$fpTarget = fopen($filename, "a");
fwrite($fpTarget, $member_code);
fclose($fpTarget);
$ member_code是一个随机的6个字符的代码。
现在,如果它是一个文本文件,这对我来说是有意义的,但由于它是一个视频文件,这怎么可能有效,它应该做什么?如果会员代码以某种方式添加到视频中,我怎样才能在下载后看到它?我没有视频文件的经验,所以感谢任何帮助(同样欢迎修改可用代码或新代码。)
对不起,我无法更准确地描述代码应该做什么,我试图弄明白自己。
答案 0 :(得分:1)
它可能有效,具体取决于视频的格式/类型。 MPG文件相当容忍文件中的“噪音”,玩家会跳过你的代码,因为它看起来不像有效的视频帧数据。
其他格式/播放器可能会呕吐,因为格式要求某些数据处于相对于文件末尾的特定偏移量,您现在已将其移动了6个字符。
您最好的办法是确定您所提供的格式是否符合其规格中的元数据规定。例如可能会支持某个注释字段,您只需将代码插入其中即可。
但是,如果您为了“安全”或跟踪未经授权的视频共享而执行所有这些操作,那么只需将数字写入标题就很容易绕过。更好的选择是以某种方式为视频添加水印,以便将代码嵌入到实际视频数据中,以便在播放时显示“此视频仅属于成员XYZ”。
答案 1 :(得分:0)
您不直接写入文件的内容,而不是像文本文件那样。正如您所注意到的,这有效地破坏了视频,您无法合理地阅读信息。
对于音频/视频文件,您可以写入随文件打包的元数据。如何打包以及如何使用它通常在很大程度上取决于用于文件的容器格式。 (请记住,容器和编解码器是两个不同的东西。编解码器是用于编码音频/视频的格式,容器是存储该数据流的文件格式。)
像getID3这样的图书馆可能是一个很好的起点。我从来没有使用它,但它似乎是你正在寻找的。您基本上要做的是将值写入容器中的元数据(该容器的预定义值或可能是自定义键/值对等),这将是文件的一部分。然后,在读取文件时,您可以获取该数据。 (现在,最后一部分在很大程度上取决于读取文件的内容。数据存在,但不是每个玩家都关心它。你会想要将你写的内容与你通常从文件中看到/读取的内容相匹配内部元数据。)