2017-09-18 97 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