2011-05-06 75 views
2

在C#我想記錄的音頻流記錄HTTP音頻流文件

我做線沿線的東西:

HttpWebRequest req; 
req = (HttpWebRequest)WebRequest.Create("http://url.com/stream"); 

Webresponse resp = req.GetResponse(); 
Stream s = resp.GetResponseStream(); 

fs = File.Exists(fileName) 
    ? new FileStream(fileName, FileMode.Append) 
    : new FileStream(fileName, FileMode.Create); 

byte[] buffer = new byte[4096]; 

while (s.CanRead) 
{ 
    Array.Clear(buffer, 0, buffer.Length); 
    total += s.Read(buffer, 0, buffer.Length); 
    fs.Write(buffer, 0, buffer.Length); 
} 

和文件大小的增長,但不能播放通過VLC或任何其他程序。

這不是我的確切代碼,我做了很多錯誤檢查等,但是這給出了一般的想法。

+0

我發現這個網址在谷歌作爲一個例子或流類型我想抓住http://zlz-stream10.streaming.init7.net/1/rsj/mp3_128 – bep 2011-05-06 17:38:59

回答

2
Array.Clear(buffer, 0, buffer.Length); 
    total += s.Read(buffer, 0, buffer.Length); 
    fs.Write(buffer, 0, buffer.Length); 

在閱讀之前,您不必清除整個數組 - 這樣做沒有意義。但是你必須檢查你實際上有多少字節讀取,但也不能保證整個陣列充滿每次(它可能不會):

int bytesRead = s.Read(buffer, 0, buffer.Length); 
    fs.Write(buffer, 0, bytesRead); 
    total+=bytesRead; 

而且是否播放文件(即使是一旦修復文件編寫代碼,就不會再損壞)取決於您下載的格式 - 它是什麼編解碼器/文件類型?

+0

所以,如果我添加一個文件類型頭到前面該文件然後我應該很好?讓它成爲一個通用的wav文件,我該如何爲它添加標題? – bep 2011-05-06 17:47:33

+0

@bep:將未壓縮的音頻流保存到WAV文件是一項非常簡單的任務,但沒有人會這麼做,因爲沒有人傳輸未壓縮的音頻。 – MusiGenesis 2011-05-06 17:57:44

1

問題是流傳輸位沒有上下文。當您流式傳輸到某個應用程序時,您將遇到一個默認協議,您正在處理文件類型X,然後流式傳輸程序會嘗試播放這些位。

當你流到一個文件時,你必須添加上下文。其中最重要的一點是識別文件類型和其他信息的標題。

如果您可以添加標題,則可以從文件系統播放該文件。標題不會成爲流的一部分,因爲服務器和客戶端已經同意它已經是什麼類型的fo文件。

如果您創建了流媒體播放器,則可以在協商類型時播放保存的位。 BUt讓它自動從文件中工作,你必須添加標題。

+0

因此,如果我添加一個文件類型頭文件的前面,那麼我應該是好?讓它成爲一個通用的wav文件,我將如何添加頭文件 – bep 2011-05-06 17:47:57

0

如果沒有詳細瞭解流格式和MP3文件格式,試圖將流式MP3音頻保存到磁盤基本上是不可能的。從流中獲得的是一系列「窗口化」的音頻塊,轉換爲頻域;接收到數據流的播放器會將數據塊立即轉換回時域音頻並逐一播放。

要使一個MP3文件,你就必須先寫出包含格式信息和然後寫的每個數據塊的頭部。但是,將這些塊存儲在一個文件中的格式很可能與將它們壓縮到一個流中的方式不同。

對不起,但我會認真地建議你放棄這一點。音樂服務流而不是提供文件下載的一個主要原因是因爲將MP3類型的流保存到磁盤非常困難(將未壓縮的音頻流保存爲WAV文件是一件小事)。

+0

您應該刪除最後一段。這沒有幫助。我可以考慮少數應用程序,可以節省MPEG流量。 – Brad 2011-05-07 13:54:24

+0

我的整個評論是沒有幫助的,除非我覺得這對於不知道MP3如何在引擎蓋下工作的人來說太難了(實質上是不可能的)任務,並且我試圖挽救這個人免於浪費他們的時間。 「少數應用程序能夠節省MPEG流量」這一事實並不意味着這項任務很簡單。 – MusiGenesis 2011-05-09 15:16:22