问题描述
我正在下载一个大的3GB文件并加密成块并保存到app local。然后在播放解密同一个文件到块时,只有完成解密文件后才能播放。
I am downloading a large 3GB file and encrypting into chunks and save into app local. Then when playing decrypting same file into chunks and after completing decrypted file only I am able to play.
如果我解密第一个块并给玩家播放和下一次解密,是否可能因为它然后给下一个块部分播放等等..
动机是当我开始解密媒体元素开始播放视频时不要等到完全解密。
Is it possible if I decrypted first chunks and give to player for playing and next decryption going on as it is then give next chunks part for playing and so on..Motive is when I start decrypting media element start going to play video don't wait till decrypting completely.
我的代码是 -
    private void Encrypt(流输入,流输出,字符串密码,字符串盐)
      {
          output.Position = 0;
          byte [] buffer = new byte [1024 * 1024];
          int bytesRead;
          while((bytesRead = input.Read(buffer,0,buffer.Length))> 0)
          {
              var tmp = AES_Encrypt(缓冲区,密码,盐);
              output.Write(tmp,0,tmp.Length);
          }¥b $ b       }
      public byte [] AES_Encrypt(byte [] bytesToBeEncrypted,String pass,String salt)
      {
          byte [] encryptedBytes = null;
          byte [] passByte = Encoding.ASCII.GetBytes(pass);
          byte [] saltBytes = Encoding.ASCII.GetBytes(salt);
          Aes aesEn = Aes.Create();
          aesEn.Padding = PaddingMode.None;
          aesEn.Mode = CipherMode.CBC;
          ICryptoTransform encryptor = aesEn.CreateEncryptor(passByte,saltBytes);
         使用(MemoryStream ms = new MemoryStream())
          {
              using(var cs = new CryptoStream(ms,encryptor,CryptoStreamMode.Write))
              {
                  cs.Write(bytesToBeEncrypted,0,bytesToBeEncrypted.Length);
              }¥b $ b               encryptedBytes = ms.ToArray();
          }¥b $ b           return encryptedBytes;
      }
      private async Task Decrypt(流输入,流输出,字符串密码,字符串盐)
      {
          input.Position = 0;
          byte [] buffer = new byte [1024 * 1024];
          int bytesRead;
          while((bytesRead = await input.ReadAsync(buffer,0,buffer.Length))> 0)
          {
              var tmp = AES_Decrypt(缓冲区,密码,盐);
private void Encrypt(Stream input, Stream output, String password, String salt)
{
output.Position = 0;
byte[] buffer = new byte[1024 * 1024];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
var tmp = AES_Encrypt(buffer, password, salt);
output.Write(tmp, 0, tmp.Length);
}
}
public byte[] AES_Encrypt(byte[] bytesToBeEncrypted, String pass, String salt)
{
byte[] encryptedBytes = null;
byte[] passByte = Encoding.ASCII.GetBytes(pass);
byte[] saltBytes = Encoding.ASCII.GetBytes(salt);
Aes aesEn = Aes.Create();
aesEn.Padding = PaddingMode.None;
aesEn.Mode = CipherMode.CBC;
ICryptoTransform encryptor = aesEn.CreateEncryptor(passByte, saltBytes);
using (MemoryStream ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
}
encryptedBytes = ms.ToArray();
}
return encryptedBytes;
}
private async Task Decrypt(Stream input, Stream output, String password, String salt)
{
input.Position = 0;
byte[] buffer = new byte[1024 * 1024];
int bytesRead;
while ((bytesRead = await input.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
var tmp = AES_Decrypt(buffer, password, salt);
              await output.WriteAsync(tmp,0,tmp.Length);
await output.WriteAsync(tmp, 0, tmp.Length);
            //我想在这里给玩家节省时间。
// I want to give to player here for saving time.
          }
          Uri pathUri = new Uri(" ms-appx:/// Content / de5146");
          media.Source = MediaSource.CreateFromUri(pathUri);
      }
      public byte [] AES_Decrypt(byte [] bytesToBeDecrypted,String pass,String salt)
      {
          byte [] decryptedBytes = null;
          byte [] passByte = Encoding.ASCII.GetBytes(pass);
          byte [] saltBytes = Encoding.ASCII.GetBytes(salt);
          Aes aesEn = Aes.Create();
          aesEn.Padding = PaddingMode.None;
          aesEn.Mode = CipherMode.CBC;
          ICryptoTransform decryptor = aesEn.CreateDecryptor(passByte,saltBytes);
         使用(MemoryStream ms = new MemoryStream())
          {
              using(var cs = new CryptoStream(ms,decryptor,CryptoStreamMode.Write))
              {
                  cs.Write(bytesToBeDecrypted,0,bytesToBeDecrypted.Length);
              }¥b $ b               decryptedBytes = ms.ToArray();
              ms.Flush();
          }¥b $ b           return decryptedBytes;
      }
Uri pathUri = new Uri("ms-appx:///Content/de5146");
media.Source = MediaSource.CreateFromUri(pathUri);
}
public byte[] AES_Decrypt(byte[] bytesToBeDecrypted, String pass, String salt)
{
byte[] decryptedBytes = null;
byte[] passByte = Encoding.ASCII.GetBytes(pass);
byte[] saltBytes = Encoding.ASCII.GetBytes(salt);
Aes aesEn = Aes.Create();
aesEn.Padding = PaddingMode.None;
aesEn.Mode = CipherMode.CBC;
ICryptoTransform decryptor = aesEn.CreateDecryptor(passByte, saltBytes);
using (MemoryStream ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write))
{
cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
}
decryptedBytes = ms.ToArray();
ms.Flush();
}
return decryptedBytes;
}
sandeep chauhan
sandeep chauhan
推荐答案
这篇关于[UWP]我们如何将部分解密的视频播放到媒体元素中。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!