Проблема с видеофайлом в Base64String в Windows Phone 8

#c# #windows-phone-8

#c# #windows-phone-8

Вопрос:

Я создал функцию записи видео в Windows Phone 8 и преобразовываю массив байтов в строку base-64. Как мне узнать продолжительность записи? Размер памяти моего байтового массива становится слишком большим, и поэтому строка base64 также слишком велика, поэтому я получаю такую ошибку:

 "System.OutOfMemoryException"
  

для получения дополнительной информации см. Мой код ниже:

 private IsolatedStorageFileStream isoVideoFile;
string isoVideoFileName = "CameraMovie.mp4";

isoVideoFile = new IsolatedStorageFileStream(isoVideoFileName,
                   FileMode.OpenOrCreate, FileAccess.ReadWrite,
                   IsolatedStorageFile.GetUserStoreForApplication());
MemoryStream stream = new MemoryStream();
isoVideoFile.Write(stream.GetBuffer(), 0, (int)stream.Position);

byte[] binaryData = new Byte[isoVideoFile.Length];
long bytesRead = isoVideoFile.Read(binaryData, 0, (int)isoVideoFile.Length);
string videofile = Convert.ToBase64String(binaryData, 0, binaryData.Length);
  

Для длины видео:

     private void Element_MediaOpened1(object sender, RoutedEventArgs e)
    {
        if (mediaElement_1.NaturalDuration.HasTimeSpan)
        timelineSlider.Maximum = mediaElement_1.NaturalDuration.TimeSpan.TotalSeconds;
    }
  

Ответ №1:

Вы превышаете лимит памяти для каждого приложения.

Попробуйте утилизировать ресурсы. Рекомендуется использовать using с потоками. Что-то вроде этого: private IsolatedStorageFileStream isoVideoFile; string isoVideoFileName = «CameraMovie.mp4»;

 using(isoVideoFile = new IsolatedStorageFileStream(isoVideoFileName,
                   FileMode.OpenOrCreate, FileAccess.ReadWrite,
                   IsolatedStorageFile.GetUserStoreForApplication()))
{
    using(MemoryStream stream = new MemoryStream())
    {
        isoVideoFile.Write(stream.GetBuffer(), 0, (int)stream.Position);
    }
    byte[] binaryData = new Byte[isoVideoFile.Length];
    long bytesRead = isoVideoFile.Read(binaryData, 0, (int)isoVideoFile.Length);
    string videofile = Convert.ToBase64String(binaryData, 0, binaryData.Length);
}
  

А как насчет продолжительности видео, вот тема на форумах msdn

Комментарии:

1. ad1Dima, спасибо, чувак, я проверяю это и как мне узнать продолжительность видео? спасибо

2. ad1Dima, я все еще получаю сообщение об ошибке brother: «Необработанное исключение типа ‘System. В неизвестном модуле произошло исключение ExecutionEngineException».

3. ad1Dima, я просто записываю в течение 2 секунд, и все равно его размер становится 7-значным. Пожалуйста, направьте меня. Спасибо!!

4. @NiteshKothari сори, я не могу с этим помочь.

5. ad1Dima, хорошо, братан, посмотри мой отредактированный код для определения длины видео, я видел на форумах, как мне определить «timelineslider»? Спасибо!!