我有一个名为XorIsoStoreFileStream的类,该类继承自IsolatedStorageFileStream,要点是,使用该类时,将使用XOR“加密”编写内容,并且在对它进行XOR还原时也可以使用该类读取该内容。例如:
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吗?这似乎是巨大的矫over过正,重新发明了轮子,等等。
还是这只是行不通?我是否必须将文件的解密部分保存到临时位置,并将SetSource保存到普通的IsolatedStorageFileStream?
最佳答案
您可以使用MediaStreamSource
,但这将非常耗时。在您的情况下,在播放之前立即处理IsolatedStorageFileStream
实例并将其传递给MediaElement
而不是进行覆盖和传递自定义类会更加容易。
传递自定义类会遇到问题,因为您需要使用本机IsolatedStorageFileStream
将其通过SetSource
传递,如in the official doc所述。
不能将通用流传递给SetSource(System.IO.Stream)
Windows Phone的Silverlight支持。然而
从Stream派生的IsolatedStorageFileStream类是
在Windows Phone的Silverlight中提供支持。
关于c# - MediaElement的SetSource使用继承自IsolatedStorageFileStream的自定义流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6905381/