我搜索并搜索了相当多的内容,但没有真正解决我的问题。
我的服务器上有一个mp3文件,我需要为我的最终用户提供服务,以便他们可以听到录音并验证它是否正确。问题是,在收听时,浏览器(至少Safari和Chrome)会切断录制的最后1-2秒。 (这不是很有帮助。
我已经尝试过了。
file
验证浏览器mp3文件的mime类型,它是audio / mpeg;字符集=二进制在没有运气的情况下弄乱了文件的标题。
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
答案 0 :(得分:1)
许多音频播放器,特别是MP3播放器,非常多。他们会使用固定大小的缓冲区。此外,您应该知道,使用MP3时,无法在不解码整个文件的情况下精确设置搜索点。围绕文件长度,字节偏移和猜测有很多黑客/技巧,但这就是它。基本上,你不能指望有损编码音频的时序是正确的,没有容器或比特流格式表明它是什么时间。我认为让你的文件完全播放是合理的。
您还应该知道您的采样率非常低,就像您的比特率一样,特别是对于使用立体声音频。
可能有一个固定大小的缓冲区,预计会有8KB的数据,并且由于低采样率和比特率,它只占一小部分。这可能是玩家的错误,而且没有提交错误报告,你无法直接做到这一点。
考虑Opus?你会得到更高的质量,而且它非常兼容。如果做不到这一点,请考虑直接使用PCM。