2012-09-10 2 views
13

サーバーからWindows 8 Store(旧Metro)アプリケーションのMediaElementにデータをストリーミングします。しかし、ストリーミング中にストリームを「記録」する必要があるので、再要求された場合はキャッシュから配信することができますので、URLを直接MediaElementに送りたくありません。Windows 8の中でストリーミングする

現在、つまずきはMediaElement.SetSource()私はHttpWebResponse.GetResponseStream()から得るものである、IRandomAccessStream、ないSystem.IO.Streamを受け入れるということです。

動作しません。私が今持っているコード、:

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

は、あなたがそれを考え出したIRandomAccessStreamにストリームを変換するために、あなたを助けるだろうと思いますか?実際には私はそれを格納する必要はありません、私はちょうどそれを直接ストリームしたい。 – esskar

+0

@esskarそうではありません。ストリーミングは、単にURLを提供するだけでうまく動作します。また、 'InMemoryRandomAccessStream'もあります。問題は、ストリームを2つの異なる場所に配信することです。情報をお寄せいただきありがとうございます。 –

+0

私は '.Source'プロパティを直接設定しようとしましたが、私にとってはうまくいきません。 (私はどこか深いところでnull-ref例外を取得します)、URLの 'IRandomAccessStream'フォームを作成する方法を知りませんでした。しかし、私は今日それに取り組んでいます。 – esskar

答えて

0

私は次の考えを試したことはありませんが、動作する可能性があります。Webデータをファイルにストリーミングしてから数秒後に(バッファリングするために)、そのファイルをMediaElementに渡します。

私は、MediaElementが書き込まれているファイルを開くのが嫌なことに気付きましたが、動作しています。しかし、なぜ時にはうまくいっていないのか、時にはなぜそうでないのか、私は言うことができません。

0

私は、これは

InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream(); 

using (Stream stream = response.GetResponseStream();) 
    { 
    await stream.CopyToAsync(ras.AsStreamForWrite()); 
    } 
関連する問題