2017-09-18 68 views
0

我已经搜索并搜索了很多,没有真正能够解决我的问题。流媒体MP3切断了最后1-2秒的音频

我在我的服务器上有一个mp3文件,我需要向我的最终用户提供服务,以便他们可以听到录音并确认它是正确的。问题是,在聆听时,浏览器(至少Safari和Chrome)会截断记录的最后1-2秒。 (这是不是非常有帮助。

的东西,我已经尝试过。

  • 直接从服务器下载的文件,它并正常播放 。
  • 验证浏览器的MP3的MIME类型文件中使用file,它的音频/ MPEG;字符集=二进制
  • 下载通过浏览器和文件,并 我的服务器文件的文件是完全一样的字节的文件显示,(对于 实例)中分别为9秒长。但是当我在t中播放时他浏览器 它显示该文件只有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 
+1

你用什么MP3编码器进行录音?编码器有可能错了吗?你使用**常量**比特率(如果没有,然后尝试)?你可以做一个短的(9秒?)文件进行分析吗?示例文件甚至可能只是环境噪声或非可听内容,因为我们只想检查持续时间问题与字节内容...... –

+0

因此,我实际上将该文件接收为wav,然后使用ffmpeg将其转换为MP3。当我转换它时,我使用以下命令:'ffmpeg -i input.wav -vn -ac 2 -ar 8000 -ab 32k -f mp3 output.mp3'当我转换它并直接使用scp从服务器下载文件时, WAV和MP3完美匹配。问题出在服务于我的文件服务器和我在浏览器中接收文件之间。 – n0nag0n

+0

@ n0nag0n是什么让你认为你的服务器和浏览器接收它之间的问题?如果您只是将本地文件拖到浏览器中,很可能会重现您遇到的问题。 – Brad

回答

1

很多的音频播放器,特别是围绕MP3,相当马车。他们会使用固定大小的缓冲区。另外,您应该知道,使用MP3无法在不解码整个文件的情况下精确设置查找点。围绕文件长度,字节偏移和猜测有很多黑客/技巧,但就是这样。基本上,你永远不会期望时序对于没有容器或比特流格式的有损编码音频来说是正确的,表明它是什么时间。我认为让你的文件完整播放是合理的。

你也应该知道,你的采样率是非常低低,因为你的比特率,特别是使用立体声音频。

有可能是一个固定大小的缓冲区,期待说8KB的数据,由于低采样率和比特率,它只能得到一小部分。这将是一个玩家缺陷,并且缺少提交错误报告的信息,因此您无法直接对其进行处理。

考虑作业?你会得到更高的质量,并且它是非常兼容的。如果没有,请考虑直接使用PCM。

+0

低采样率的原因是我在电话录音响应,所以我回来的wav文件只有在相同的比特率。我只是模仿我已经收到的东西。好想法尝试,我可以尝试用别的东西编码。 – n0nag0n

+0

@ n0nag0n Opus非常适合语音。但是,是的,考虑到大小和什么不是,我只是发送常规的WAV文件! – Brad

+0

是的,这是139kb与31kb的文件大小的差异。在客户端等待得到它很少。 – n0nag0n