2012-09-10 37 views
13

Tôi muốn truyền dữ liệu từ máy chủ vào MediaElement trong ứng dụng Windows 8 Store (trước đây là Metro) của tôi. Tuy nhiên, tôi cần phải "ghi lại" luồng trong khi phát trực tuyến, vì vậy nó có thể được phân phát từ bộ nhớ cache nếu được yêu cầu lại, vì vậy tôi không muốn cấp URL trực tiếp vào MediaElement.Truyền trực tuyến bằng cách di chuyển giữa Windows 8

Hiện tại, trở ngại là MediaElement.SetSource() chấp nhận một IRandomAccessStream, không phải là System.IO.Stream, đó là những gì tôi nhận được từ HttpWebResponse.GetResponseStream().

Code tôi có bây giờ, mà không làm việc:

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); 

Có một giải pháp cho phép tôi để truyền âm thanh, nhưng cho phép tôi để sao chép các dòng vào đĩa khi nó đã đọc xong từ điều khiển từ xa bên?

+0

bạn đã figured it out? thực sự tôi không cần phải lưu trữ nó, tôi chỉ muốn truyền trực tiếp nó. – esskar

+0

@esskar Không hẳn. Truyền trực tiếp hoạt động tốt bằng cách chỉ cung cấp URL hoặc 'InMemoryRandomAccessStream'. Sự cố đang phân phối luồng tới hai vị trí khác nhau. –

+0

cảm ơn thông tin. tôi đã cố gắng đặt thuộc tính '.Source' trực tiếp, nhưng nó không hoạt động cho tôi. (Tôi nhận được một ngoại lệ null-ref ở đâu đó trong sâu), và tôi đã không tìm ra cách tạo ra một 'IRandomAccessStream' tạo thành một URL. nhưng hôm nay tôi sẽ làm việc. – esskar

Trả lời

0

Tôi chưa thử nghiệm với ý tưởng sau, nhưng nó có thể hoạt động: Bạn có thể bắt đầu truyền dữ liệu web vào một tệp và sau đó vài giây (để đệm), chuyển tệp đó đến MediaElement.

Tôi nhận thấy rằng MediaElement có thể khó khăn về việc mở một tệp đang được viết vào, nhưng tôi đã thấy nó hoạt động. Mặc dù, tôi không thể nói tại sao nó đôi khi làm việc và tại sao đôi khi nó không.

0

Tôi đoán điều này sẽ giúp bạn chuyển đổi Suối để IRandomAccessStream

InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream(); 

using (Stream stream = response.GetResponseStream();) 
    { 
    await stream.CopyToAsync(ras.AsStreamForWrite()); 
    } 
Các vấn đề liên quan