2011-08-01 13 views
2

私は、IsolatedStorageFileStreamから継承したXorIsoStoreFileStreamというクラスがあります。このクラスを使用すると、stuffはXORの "暗号化"で書き込まれます。それをXORします。例:IsolatedStorageFileStreamから継承したカスタムストリームを使用したMediaElementのSetSource

public override int Read(byte[] buffer, int offset, int count) 
{ 
    int startbyte = (int)base.Position; 
    int readlength = base.Read(buffer, offset, count); 
    xor(startbyte, buffer); 

    return readlength; 
} 

これは、プログラム内の他の場所で問題なく動作しているようです。今、私はそこからmp3ファイルを再生する必要があり、オーバーライドされたReadとReadByteのために、SetSourceにIsolatedStorageFileStreamを与えた場合と同じように動作するはずです。それは私のXorクラスを取ることはありません。私が演奏すると、SetSource行でNotSupportedExceptionにヒットします。 "ストリームはIsolatedStorageFileStream型でなければなりません"。

using(var appStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    if(appStorage.FileExists(path)) 
    { 
     using(var stream = new XorIsoStoreFileStream(path, FileMode.Open, appStorage)) 
     { 
      App.MainAudioPlayer.SetSource(stream); // how to put Xor stream here? 
     } 
    } 
} 

SetSource自体のように、上書きできるものはありますか?それが助けになるようには思われません。
MediaStreamSourceを実装する必要がありますか?それは巨大な過度の過失、車輪の改革などのようです。
これはうまくいかないのでしょうか?ファイルの復号化された部分を一時的な場所に保存し、SetSourceを通常のIsolatedStorageFileStreamに保存する必要がありますか?

答えて

0

MediaStreamSourceを使用できますが、それはかなり時間がかかることになります。あなたのケースでは、再生の直前にIsolatedStorageFileStreamのインスタンスを処理し、オーバーライドしてカスタムクラスを渡すのではなく、MediaElementに渡す方が簡単です。

ネイティブIsolatedStorageFileStreamを使用してSetSourceに渡す必要があるので、カスタムクラスを渡すときに問題が発生します(in the official docと記載されています)。

SetSource(System.IO.Stream)への汎用ストリームの受け渡しは、Silverlight for Windows Phoneでは ではありません。ただし、Streamから派生した IsolatedStorageFileStreamクラスはSilverlight for Windows Phoneで となっています。

+0

応答ありがとう、Dennis!しかし、ディスク上に完全に読み込み可能なファイルを持っていないことは必須条件です...作業中の 'IsolatedStorageFileStream'を渡すとどうしたらいいですか?私はそれを吸い取って 'MediaStreamSource'を使用しなければならないかもしれませんが、私は見ていない他のトリックや回避策が本当にあることを期待していました。 – Nagisa

+0

しかし、すでにローカルストレージからファイルをロードしていますが、私はそうでしょうか?だからすでにどこかに保存されている。 –

+0

はい、Xorクラスは(インターネットからの)ファイルを隔離されたストレージにも保存していますので、すべてxorされ、MediaElementはそれを解読しない通常のストリームを使用しているときと同じように再生できません。 – Nagisa

関連する問題