Как добавить атом MOOV в файл видео mp4

Я работаю над живым устройством и потоком сервера в Android. Я могу отправлять данные в байтах на сервере, но когда я играю этот файл во время записи на сервере VLC, скажем, что атом MOOV не найден. После многих обходных решений я обнаружил, что MOOV- атом файла mp4 генерируется в конце. Но я должен играть этот файл на сервере, а запись – вживую. Я просматриваю исходный код SPYDROID и SIPDROID, но не работает. Я попытался добавить move atom на серверы с использованием FFMPEG, но не получил никакого успеха. У любого есть идея, как я могу это достичь. Thanx заранее.

Solutions Collecting From Web of "Как добавить атом MOOV в файл видео mp4"

У тебя проблемы. Коробка «moov» является своего рода оглавлением. Если не все содержимое, вы не можете иметь полное оглавление. Ой!

Если вы хотите придерживаться MP4, и если вы пишете файл самостоятельно, вы можете записать файл как так называемый фрагментированный файл MP4. Фрагментированный файл MP4 содержит несколько автономных небольших фрагментов видео – каждый со своим собственным оглавлением. Это позволит вам воспроизвести файл до завершения полной записи.

Если вам не нужно придерживаться MP4, опция должна состоять в том, чтобы записать необработанный поток h264 на сервер. Тогда у вас нет такой таблицы содержания. VLC может воспроизводить сырые потоки h264.

Используйте MP4Box для перемещения атома MOOV при инициации файла и чередования для потока в куске.

MP4Box test.mp4 test.mp4 

Запустите qt_faststart, чтобы переместить атом moov в начало потока.

 qt-faststart in.mp4 out.mp4 

Добавьте в свой gradle этот lib: compile 'net.ypresto.qtfaststartjava: qtfaststart: 0.1.0', а затем

 File input = new File(path + "/input.mp4"); // Your input file File output = new File(path + "/output.mp4"); // Your output file try{ if(!output.exists()) // if there is no output file we'll create one output.createNewFile(); } }catch (IOException e){ Log.e("TAG", e.toString()); } try{ QtFastStart.fastStart(input, output); // Adds moov to your input // Now your output file is ready to stream! }catch (QtFastStart.MalformedFileException m){ Log.e("QT", m.toString()); }catch (QtFastStart.UnsupportedFileException q){ Log.e("QT", q.toString()); }catch (IOException i){ Log.e("QT", i.toString()); } 

Вот и все.

Можно переместить атом moov в начало видеофайла с помощью FFMpeg.

 ffmpeg -i input_video_file.mp4 -vcodec copy -acodec copy -movflags +faststart output_video_file.mp4