Php 播放MP3会切断最后1-2秒的音频

Php 播放MP3会切断最后1-2秒的音频,php,apache,audio,mp3,audio-streaming,Php,Apache,Audio,Mp3,Audio Streaming,我已经搜索和谷歌搜索了相当长的一段时间,没有什么真正能够解决我的问题 我的服务器上有一个mp3文件,我需要将它提供给我的最终用户,以便他们能够听到录音并验证它是否正确。问题是,在收听时,浏览器(至少是Safari和Chrome)会切断最后1-2秒的录音。(这不是很有帮助 我已经试过了 直接从服务器下载文件,并播放 没错 使用文件验证浏览器mp3文件的mime类型,并且该文件为音频/mpeg;字符集=二进制 通过浏览器下载该文件,然后 我的服务器文件是完全相同的字节 实例)它们有9秒长,但当我在

我已经搜索和谷歌搜索了相当长的一段时间,没有什么真正能够解决我的问题

我的服务器上有一个mp3文件,我需要将它提供给我的最终用户,以便他们能够听到录音并验证它是否正确。问题是,在收听时,浏览器(至少是Safari和Chrome)会切断最后1-2秒的录音。(这不是很有帮助

我已经试过了

  • 直接从服务器下载文件,并播放 没错
  • 使用
    文件
    验证浏览器mp3文件的mime类型,并且该文件为音频/mpeg;字符集=二进制
  • 通过浏览器下载该文件,然后 我的服务器文件是完全相同的字节 实例)它们有9秒长,但当我在浏览器中播放时 它显示该文件只有7秒长
  • 把文件的标题弄得乱七八糟,一点运气都没有

    header("Content-Type: audio/mpeg; charset=binary");
    header("Content-Disposition: inline; filename=\"{$filename}\"");
    header('Pragma: no-cache');
    header("Content-Length: ". filesize($file_path));
    readfile($file_path);
    
我已经将问题缩小到从在我的服务器上调用文件到将其带到浏览器中所发生的事情。我尝试过的东西并没有真正起到帮助作用。我的要求之一是,我必须将此文件保护在公共目录之外,因此我必须通过PHP提供服务,因为用户在访问之前必须经过身份验证他们可以播放该文件。任何想法都将不胜感激

如果有帮助,这里有一些版本

CentOS 7.4.1708
Apache 2.4.6
PHP 5.6.30
Chrome Version 60.0.3112.113
Safari Version 10.1.2 (12603.3.8)
更新

The data from the main wav file I'm receiving is the following
Duration: 00:09
Audio Channels: 1
Sample Rate: 8,000
Bits Per Sample: 16

很多音频播放器,尤其是MP3,都有很多问题。它们会使用固定大小的缓冲区。此外,你应该知道,使用MP3,不解码整个文件就不可能精确地设置搜索点。关于文件长度、字节偏移量和猜测,有很多黑客/技巧,但仅此而已。基本上,你可以对于没有容器或比特流格式指示时间的有损编码音频,永远不能期望时间是正确的。不过,我确实认为让您的文件完全播放是合理的

您还应该知道,您的采样率极低,比特率也极低,尤其是在使用立体声音频时

可能在某个地方有一个固定大小的缓冲区,预计会有8KB的数据,但由于采样率和比特率较低,它只能得到其中的一小部分。这将是一个播放器错误,除了提交错误报告,您无法直接对此做任何处理


Po>考虑OPU?你会得到更高的质量,并且它是相当兼容的。失败了,只考虑使用直上的PCM。< /P>你用什么MP3编码器来记录?编码器有可能出错吗?是否使用恒定比特率(如果不是,那么试试它)?你能短(9秒)吗?用于分析的文件?示例文件甚至可以是环境噪声或非音频内容,因为我们只想检查持续时间问题与字节内容…因此我实际上以wav形式接收文件,然后使用ffmpeg将其转换为MP3。转换时,我使用以下命令
ffmpeg-I input.wav-vn-ac 2-ar 8000-ab 32k-f MP3 output.MP3当我使用scp转换文件并直接从服务器下载文件时,wav和mp3完全匹配。问题出在我的服务器提供文件和我在浏览器中接收文件之间。@n0nag0n您认为问题与您的服务器和在浏览器中接收文件之间有什么关系?如果您st将该本地文件拖到您的浏览器中,您将重现您遇到的问题。我只是将直接下载到浏览器上的mp3文件添加到药物中,它听起来很完美,没有任何东西被切断。很抱歉,您不得不看到我将mp3文件添加到药物中。采样率低的原因是我正在电话中录制响应,因此wav文件“返回”只使用相同的比特率。我只是在模仿我已经接收到的内容。尝试的好主意,我可以尝试用其他东西进行编码。@n0nag0n Opus对于语音来说非常好。但是,考虑到大小,我只发送普通的WAV文件!是的,139kb和31kb的文件大小不同。客户端等待的时间要少得多o明白。@n0nag0n我想你的客户和你所在的地方可能会有所不同,但至少在美国,即使是普通的3G手机提供商,除非你要做几百次,否则差别不大。特别是如果WAV真的能工作,并为你提供最佳的客户兼容性。这是tr的一部分很抱歉,我无法在浏览器中播放WAV文件,所以我将其转换为MP3,现在它可以工作了,只是在通过浏览器播放时丢失了最后1-2秒。