Я работаю над активным устройством для потоковой передачи данных в Android. Я могу отправлять данные в байтах на сервере, но когда я играю этот файл во время записи на сервере VLC, скажите, что атом MOOV не найден. После большого обходного пути я обнаружил, что в конце создается массив MOOV файла mp4. Но я должен играть этот файл на сервере, а запись - вживую. Я просматриваю исходный код SPYDROID и SIPDROID, но не работает. Я попытался добавить move atom на серверы с помощью FFMPEG, но не получил никакого успеха. У любого есть идея, как я могу это достичь. Thanx заранее.
Как добавить атом MOOV в файл видео mp4
Ответ 1
У тебя проблема. Коробка "moov" является своего рода оглавлением. Если не все содержимое, вы не можете иметь полное оглавление. Ой!
Если вы хотите придерживаться MP4, и если вы пишете файл самостоятельно, вы можете записать файл как так называемый фрагментированный файл MP4. Фрагментированный файл MP4 содержит несколько автономных небольших фрагментов видео - каждый со своим собственным оглавлением. Это позволит вам воспроизвести файл до завершения полной записи.
Если вам не нужно придерживаться MP4, опция должна состоять в том, чтобы записать необработанный поток h264 на сервер. Тогда у вас нет такой таблицы содержания. VLC может воспроизводить сырые потоки h264.
Ответ 2
Используйте MP4Box для перемещения атома MOOV при возникновении файла и чередования для потока в куске.
MP4Box test.mp4 test.mp4
Ответ 3
Запустите qt_faststart, чтобы переместить атом moov в начало потока.
qt-faststart in.mp4 out.mp4
Ответ 4
Добавьте в свой 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());
}
Здесь все
Ответ 5
Можно переместить атом moov в начало видеофайла с помощью FFMpeg.
ffmpeg -i input_video_file.mp4 -vcodec copy -acodec copy -movflags +faststart output_video_file.mp4