【问题标题】:Is it correct to merge mp3 audios using php by concatenation and header('Content-Type: audio/mpeg')?通过连接和标题('Content-Type:audio/mpeg')使用php合并mp3音频是否正确?
【发布时间】:2020-11-18 08:57:53
【问题描述】:

我已经构建了一个简单的 CAPTCHA PHP 脚本,现在我正在尝试创建一个脚本,该脚本可以为看不到或根本看不到的人生成 mp3 音频。我的目标只是挑战自己,所以我不喜欢使用外部库,但我希望能得到一些帮助。我尝试使用 file_put_contents() 函数来合并音频(每个字母都有一个 mp3 音频),令我惊讶的是,它起作用了,但对我来说,像加入文本文件一样加入音频文件似乎是不正确的。 所以我的第二次尝试是这样做:

<?php
    session_start();
    $letter_array = str_split($_SESSION["captcha"]); //this is an array with the letters of the captcha
    header('Content-Type: audio/mpeg');
    header('Cache-Control: no-cache');
    header('Pragma: no-cache');
    header('Expires: 0');
    $audio = '';
    foreach ($letter_array as $letter) {
        $audio .= file_get_contents("audios/".$letter.".mp3");
    }
    echo $audio;
?>

然后我可以将此文件嵌入到 HTML 中的标签中,它也可以工作。我知道这两种解决方案基本上都是相似的,但我发现第二种方式更简洁。我的问题是:虽然它工作得很好,但以这种方式做这样的事情是否可以,或者是错误的,还是不推荐?我不太了解编码和 mp3 文件的结构,所以我不知道这个解决方案是否适用于所有人。我也愿意接受建议
谢谢

【问题讨论】:

  • 没有。这不是 MP3 的工作方式。您要么必须调用一个可以将音频正确组合到单个文件中的实用程序,要么制定一个客户端解决方案来按顺序播放每个文件。
  • @Sammitch 这 MP3 的工作原理。

标签: php merge mp3 captcha


【解决方案1】:

大多数情况下,是的。

常规 MP3 文件只是一系列 MPEG 帧。只要它们具有相同的采样率和通道数,您就可以安全地连接它们。您可以混合和匹配比特率。

不过有一些注意事项。首先,MP3 文件通常附有 ID3 标签。你会想扔掉这些标签,因为它们应该在某些位置。

此外,了解位库也很重要。这对您来说不是问题,因为您正在连接完全编码的文件,但是如果您必须拆分一个流,请务必注意来自一个 from 的数据可以放入其他帧。这是为了允许在更复杂的帧上使用更多的带宽,而在不需要的地方使用更少的带宽。

不过,归根结底,您真的不应该构建自己的 CAPTCHA。 微不足道有人编写可能 5 行代码来匹配您的音频样本并挑选出数字。更不用说,您可能会产生可访问性问题。我强烈建议您查看 Google reCAPTCHA。当前版本不会对您的用户造成干扰,并且可能比您建议的版本更安全。 https://www.google.com/recaptcha/intro/v3.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多