2012-09-10 11 views
13

我想從一臺服務器的數據流轉換成MediaElement在我的Windows 8商店(原地鐵)的應用程序。不過,我需要「記錄」,而它是流流,因此它可以從緩存中提供,如果重新請求,所以我不想直接提供以下網址進入MediaElement與流穿針引線在Windows 8

目前,絆腳石是MediaElement.SetSource()接受一個IRandomAccessStream,而不是一個System.IO.Stream,這是我從HttpWebResponse.GetResponseStream()得到。

的代碼我現在有,這不工作:

var request = WebRequest.CreateHttp(url); 
request.AllowReadStreamBuffering = false; 
request.BeginGetResponse(ar => 
       { 
        var response = ((HttpWebResponse)request.EndGetResponse(ar)); 
        // this is System.IO.Stream: 
        var stream = response.GetResponseStream(); 
        // this needs IRandomAccessStream: 
        MediaPlayer.SetSource(stream, "audio/mp3"); 
       }, null); 

是否有解決方案,讓我流音頻,而是讓我當它已經完成了從遠程讀取數據流複製到磁盤側?

+0

你想通了?實際上我不需要存儲它,我只是想直接流式傳輸。 – esskar

+0

@esskar不是。直接流僅通過提供URL,或'InMemoryRandomAccessStream'的偉大工程。問題是將流分發到兩個不同的位置。 –

+0

感謝您的信息。我試圖'.Source'屬性直接設置,但它不爲我工作了。 (我在深處的某個地方得到一個null-ref異常),我還沒有想出如何創建一個URL的IRandomAccessStream。但今天我會努力。 – esskar

回答

0

我還沒有與下面的想法嘗試,但它可能工作:你可以啓動網絡數據流傳輸到一個文件中,然後,幾秒鐘(用於緩衝)後,傳遞文件到MediaElement的。

我注意到的MediaElement可挑剔打開正在被寫入到一個文件,但我已經看到了它的工作。雖然,我不能說爲什麼有時會起作用,爲什麼有時不起作用。

0

我想這會幫助你轉換到流IRandomAccessStream

InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream(); 

using (Stream stream = response.GetResponseStream();) 
    { 
    await stream.CopyToAsync(ras.AsStreamForWrite()); 
    }