Могу ли я одновременно прочитать более ранний раздел файла mp4 во время потоковой передачи / записи в него?

Я использую код на основе Live555 / openRTSP для потоковой передачи видеоисточника H.264 в файл mp4 и хотел бы одновременно прочитать предыдущие части файла (из другого приложения). Изменение fopen быть fid = _fsopen(fileName, "wb", _SH_DENYWR) (из OutputFile.cpp) явно недостаточно, потому что это не имеет значения, и медиаплееры все равно не откроют его (это строка записи для вывода mp4?)

Что касается примечания, если я имитирую нечистое завершение работы программного обеспечения (например, сбой питания), незаконченные файлы не читаются никакими медиапроигрывателями. Я предполагаю, что то, что записано в файл при закрытии файла, позволяет медиаплееру понять файл. Это также ситуация, для которой я хотел бы, если возможно, написать код, и вполне вероятно, что это действительно та же проблема, что и выше?

Любые указатели / ответы / мысли очень получили 🙂

1

Решение

Вы обычно не читаете из MP4 (то же самое верно для многих других форматов) файлов, использующих fopen-подобный API, и вместо этого вы используете библиотеки. Который, в свою очередь, ожидает завершенный файл и не пытается восстановить поврежденный файл или читать файл, который все еще записывается.

Таким образом, хотя технически можно читать, пока он еще пишется, вы вряд ли преуспеете в этом с обычными библиотеками, приложениями и проигрывателями. Сначала необходимо завершить запись, чтобы сделать файл допустимым, читаемым и воспроизводимым, поскольку на шаге завершения записываются индексы, необходимые для воспроизведения.

0

Другие решения

На случай, если кому-то понадобится то же самое, я так и сделал, и это оказалось проще, чем я предполагал:

  • + Изменить fopen в OutputFile.cpp для вызова совместного использования файлов _fsopen
    (поделиться доступом для чтения)
  • Каждые 10 секунд в
    QuickTimeFileSink::continuePlaying() функция, которую я вызываю completeOutputFile(), таким образом, поддерживая заголовок в актуальном состоянии (с продолжительностью видео и т. д.).

Проигрывателю Windows Media это не нравилось (вероятно, он пытался получить эксклюзивный доступ к файлу), но VLC был очень рад прочитать файл, пока я все еще в него направлялся.

0

По вопросам рекламы [email protected]