wget沒有正確下載流媒體mp3
我正在嘗試使用 wget 下載流媒體 mp3。這是我的基本命令:
wget http://sj128.hnux.com/sj128.mp3 -c --timeout=1 --waitretry=0 --tries=0 -O "file.mp3"
我一直在一個腳本中執行此操作(它可以執行 1 小時),但我一直令人氣憤地發現我的文件最終會被截斷且不完整。例如,我希望文件大約是 30MB,而它只會是 13MB。
直到我直接從 CLI 執行此命令並看到最終我總是遇到“讀取超時”時,我才明白髮生了什麼。這不應該是表演的終結者。-c 和無限重試應該處理這個 FINE。
但相反,在“讀取超時”和新的重試之後,即使下載繼續,我的文件也會停止增長。
為什麼下載繼續但文件沒有按預期繼續增長?我什至創建了一個精心製作的腳本,該腳本以完全不同的文件名啟動了一個全新的 wget,以避免“文件”類型的衝突,即使所有輸出顯示一個完全不同的文件名和一個全新的程序,它仍然沒有寫新文件!
在這種情況下,為什麼似乎開始下載而我的新文件甚至沒有出現!?
這是一個實時流。“恢復”的整個概念並不適用,因為既沒有開始也沒有任何固定的位置可以恢復。您只需獲取目前流式傳輸的任何數據。
但
wget
不知道這一點。網路故障後,恢復嘗試如下所示:
wget
知道文件有多大。如果伺服器支持恢復,wget
會要求它從源文件中間恢復;但是伺服器端沒有這樣的文件,伺服器不支持恢復,這種方法失敗了。- 嘗試恢復失敗,因此
wget
認為它從一開始就收到相同的數據。它會丟棄數據,直到丟棄量達到舊文件大小。然後它開始將新數據附加到文件中。這是您的文件開始增長的時刻。實際上,當連接出現問題時,您不僅會錯過流的某些片段;您還會錯過本來可以保存的數據,只是因為
wget
假設它第二次收到相同的數據。要克服這個問題,請啟動(並在需要時繼續重新啟動)以下操作:
wget http://sj128.hnux.com/sj128.mp3 -O - >> "file.mp3"
(如果您願意,還有其他選項)。收到的任何內容
wget
都將附加到文件中。如果您錯過了流的某些片段,則生成的文件顯然會儲存“切碎”的內容。在我的測試中,VLC 在播放此類文件時沒有任何技術問題。注意:您可以隨時將文件截斷為零大小
: > file.mp3
。即使wget
正在執行,這也會起作用,因為>>
總是尋找給定文件的末尾(請參閱this)。以完全不同的文件名啟動了一個全新
wget
的文件以避免“文件”類型的衝突和$$ … $$它仍然沒有寫入新文件!
無法重現。我
wget
確實寫了一個新文件。