Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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