Михаиллл
Михаиллл9 июня 2020 г. 17:04

Как прочитать файл .wmv

Добрый день.
Как в Qt прочитать файл .wmv?
Если делаю так с файлом в 10 мб:

    QByteArray array = "";
    QString str;
    QFile file(folder + "/1.wmv");
    if(file.open(QIODevice::ReadOnly)){
        str = file.readAll();
        array += str;
    }
    file.close();
    qDebug()<<"size"<<array.size()<<str.size();
    qDebug()<<str;

то получаю такой вывод

size 20 10
"0&?u?f?\u0011??"

Скажите пожалуйста, что я делаю не так и как исправить?

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

15
Evgenii Legotckoi
  • 10 июня 2020 г. 1:00
  • Ответ был помечен как решение.

Под Windows метод readAll работает плохо на больших файлах, вернее совсем не работает.
Используйте или метод readLine или обычный метод read с указанием размера считываемого массива.

    D
    • 10 июня 2020 г. 3:16

    Функция readAll возвращает QByteArray, а затем у вас зачем-то происходит преобразование в QString. Соответственно, ваша строка окончится на первом попавшемся нулевом байте из файла. Запишите возврат функции readAll в другую переменную типа QByteArray и выведите на экран её length() - она будет равна размеру файла. А чтобы добавить один QByteArray к другому, нужно использовать функцию append().

      Михаиллл
      • 10 июня 2020 г. 3:24

      Я так сделал и пытаюсь все записать в соседний файл, но размер 2-го файла получается почему-то больше и он не воспроизводится.
      Скажите пожалуйста что не так и как правильно?

          QString folder = qApp->applicationDirPath();
      
      
          QByteArray array = "";
          QString str = "";
          QFile file(folder + "/1.wmv");
          if(file.open(QIODevice::ReadOnly)){
              QTextStream in(&file);
              while (!in.atEnd())
              {
                 array.append( in.readLine() );
              }
          }
          file.close();
          //qDebug()<<"size"<<array.size()<<str.size();
          //qDebug()<<str;
      
          //array += str;
      
          QFile file2(folder + "/2.wmv");
          if(file2.open(QIODevice::WriteOnly)){
              file2.write(array);
          }
          file2.close();
      
        D
        • 10 июня 2020 г. 3:31

        Вы пытаетесь соединить встык два видеофайла? Такой трюк пройдёт только с форматом .TS. Для объединения нескольких .WMV нужно демультиплексировать каждый файл, выделить потоки данных и мультиплексировать в единый файл. Для выполнения такой задачи обычно используют FFMpeg.

          Михаиллл
          • 10 июня 2020 г. 3:34

          Вот беда. Мне бы нужно было просто копировать файлы на сервер и обратно. А нет ли вариантов попроще переводить файлы в строку и обратно?

            Evgenii Legotckoi
            • 10 июня 2020 г. 3:34

            Может просто QFile::copy? Или вы по сети передаёте?

              Михаиллл
              • 10 июня 2020 г. 3:36

              Передаю по сети, предворительно запихнув в джисон. Так что без строки не обойтись((

                D
                • 10 июня 2020 г. 3:42

                Передавать большие двоичные данные через JSON - не самое эффективное решение. Но если вам так нужно, то используйте функции toBase64() и fromBase64().

                  Михаиллл
                  • 10 июня 2020 г. 3:44

                  Но что же делать с переводом файла в строку и последующей записью?

                    D
                    • 10 июня 2020 г. 3:45

                    У вас ещё стоит задача склеивания видеофайлов или просто передать отдельные файлы через строку?

                      Михаиллл
                      • 10 июня 2020 г. 3:52

                      Просто передать, потом обратно получить и записать в файл.

                        D
                        • 10 июня 2020 г. 3:53
                        • (ред.)

                        array.toBase64() вернёт вам данные в формате base-64, которые спокойно можно записывать в строку. А чтобы из base-64 получить исходные двоичные данные, вызываете fromBase64() и записываете в .wmv

                          Михаиллл
                          • 10 июня 2020 г. 3:56

                          Хорошо, спасибо, но вопрос с чтением, мне все еще нужно прочитать файл так, чтобы его можно было записать. Может быть вы знаете как?

                            D
                            • 10 июня 2020 г. 3:58
                            • (ред.)

                            читайте в array c помощью readAll(), а потом file.write(array.toBase64());

                              Михаиллл
                              • 10 июня 2020 г. 4:03

                              Спасибо, работает

                                Комментарии

                                Только авторизованные пользователи могут публиковать комментарии.
                                Пожалуйста, авторизуйтесь или зарегистрируйтесь
                                AD

                                C++ - Тест 004. Указатели, Массивы и Циклы

                                • Результат:50баллов,
                                • Очки рейтинга-4
                                m
                                • molni99
                                • 26 октября 2024 г. 8:37

                                C++ - Тест 004. Указатели, Массивы и Циклы

                                • Результат:80баллов,
                                • Очки рейтинга4
                                m
                                • molni99
                                • 26 октября 2024 г. 8:29

                                C++ - Тест 004. Указатели, Массивы и Циклы

                                • Результат:20баллов,
                                • Очки рейтинга-10
                                Последние комментарии
                                i
                                innorwall14 ноября 2024 г. 19:42
                                Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
                                i
                                innorwall14 ноября 2024 г. 17:09
                                Qt/C++ - Урок 068. Hello World с использованием системы сборки CMAKE в CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
                                i
                                innorwall14 ноября 2024 г. 12:05
                                EVILEG-CORE. Использование Google reCAPTCHA 2001; 98 29 34 priligy buy
                                i
                                innorwall14 ноября 2024 г. 12:00
                                PyQt5 - Урок 007. Работаем с QML QtQuick (Сигналы и слоты) priligy 30mg Am J Obstet Gynecol 171 1488 505
                                Сейчас обсуждают на форуме
                                i
                                innorwall14 ноября 2024 г. 11:39
                                добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
                                i
                                innorwall11 ноября 2024 г. 18:55
                                Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                                9
                                9Anonim25 октября 2024 г. 16:10
                                Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
                                ИМ
                                Игорь Максимов3 октября 2024 г. 11:05
                                Реализация навигации по разделам Спасибо Евгений!

                                Следите за нами в социальных сетях