Intereting Posts
Могу ли я добавлять теги в приложение в консоль Google Play? Управление строками и памятью Ошибка: (21, 0) Метод Gradle DSL не найден: Android Studio 3.0: canary 6: android.content.res.Resources $ NotFoundException внутри Запуск активности Как установить android: layout_columnWeight = "1" программно для элемента в поддержке android v7 Gridlayout Класс не найден исключение com.squareup.okhttp.logging.HttpLoggingInterceptor Где adb в Android 6? Удалено ли? Какой самый простой способ поддерживать синхронизацию базы данных между несколькими устройствами iOS и Android? Альтернативы DOM API на Android? Как использовать пользовательский просмотр календаря в Android и как настроить оповещение для напоминания? Выделите Textview с помощью EditText «Ic_launcher не может быть разрешен или не является полем» Как получить имя пакета приложения или UID, который пытается связать мой сервис с функцией onBind? Доверять только конкретный сертификат, выпущенный CA – Android Не удалось получить неизвестное свойство 'assembleRelease' для проекта

Android – объединение двух файлов MP4

Я пишу проект Android, где я записываю несколько аудиофайлов. Поэтому я устанавливаю следующие параметры. Запись работает отлично.

recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

Моя проблема в том, что каждый раз, когда я записываю, вывод записывается в отдельный файл. Теперь мне нужно объединить эти файлы в один файл. У кого-нибудь есть идея объединить несколько файлов MPEG 4 в проекте Android?

Спасибо за вашу помощь….

В андроиде нет встроенных функций для объединения двух аудиофайлов. Если вы сделали это через любую операцию с файлом, то это также сработает, потому что не работает как заголовки аудиофайлов.

Я рекомендовал использовать внешнюю библиотеку FFMPEG для вашего приложения для Android.

Я бы предложил использовать мою библиотеку mp4parser, тогда вам не придется иметь дело с родными libs. Взгляните на AppendExample. Он делает именно то, что вы хотите сделать. Следите за последней версией. См. Ниже AppendExample, чтобы понять, как это работает.

  Movie[] inMovies = new Movie[]{MovieCreator.build(Channels.newChannel(AppendExample.class.getResourceAsStream("/count-deutsch-audio.mp4"))), MovieCreator.build(Channels.newChannel(AppendExample.class.getResourceAsStream("/count-english-audio.mp4")))}; List<Track> videoTracks = new LinkedList<Track>(); List<Track> audioTracks = new LinkedList<Track>(); for (Movie m : inMovies) { for (Track t : m.getTracks()) { if (t.getHandler().equals("soun")) { audioTracks.add(t); } if (t.getHandler().equals("vide")) { videoTracks.add(t); } } } Movie result = new Movie(); if (audioTracks.size() > 0) { result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()]))); } if (videoTracks.size() > 0) { result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()]))); } IsoFile out = new DefaultMp4Builder().build(result); FileChannel fc = new RandomAccessFile(String.format("output.mp4"), "rw").getChannel(); fc.position(0); out.getBox(fc); fc.close();