Приостановите программный рекордер. Camera.apk от samsung galaxy имеет `this.mMediaRecorder.pause ();` не работает в моем коде

Теперь я создал библиотеку, чтобы объединить 2 видео, используя библиотеку mp4parser. И с этим я могу приостановить и возобновить запись видео (после того, как он записывает второе видео, он добавляет его к первому). Теперь мой босс сказал мне сделать обертку и использовать ее для телефонов, у которых нет аппаратной поддержки для приостановки видео. Для телефонов, которые имеют это (Samsung Galaxy S2 и Samsung Galaxy S1 могут приостановить видеозапись с помощью приложения для камеры), мне нужно сделать это без библиотек, так что это будет быстро. Как я могу реализовать этот родной, если, как видно на диаграмме состояния медиарекордера, http://developer.android.com/reference/android/media/MediaRecorder.html , состояние паузы отсутствует?

Я декомпилировал приложение Camera.apk от Samsung Galaxe Ace, а код имеет в CamcorderEngine.class метод, подобный этому:

public void doPauseVideoRecordingSync() { Log.v("CamcorderEngine", "doPauseVideoRecordingSync"); if (this.mMediaRecorder == null) { Log.e("CamcorderEngine", "MediaRecorder is not initialized."); return; } if (!this.mMediaRecorderRecording) { Log.e("CamcorderEngine", "Recording is not started yet."); return; } try { this.mMediaRecorder.pause(); enableAlertSound(); return; } catch (RuntimeException localRuntimeException) { Log.e("CamcorderEngine", "Could not pause media recorder. ", localRuntimeException); enableAlertSound(); } 

}

Если я попробую this.mMediaRecorder.pause(); В моем коде это не работает, как это возможно, они используют тот же импорт (android.media.MediaRecorder). Переписали ли они весь код на системном уровне?

Можно ли взять входной поток второго видео (во время его записи) и напрямую добавить эти данные к моему первому видео? Для моего метода concatenate я использую 2 параметра (2 видео, которые оба являются FileInputStream), можно ли взять InputStream из функции записи и передать его в качестве второго параметра?

Если я попробую this.mMediaRecorder.pause ();

Класс MediaRecorder не имеет функции pause() , поэтому очевидно, что на этом конкретном устройстве есть собственный класс MediaRecorder. Это не что-то необычное, так как единственное, что требуется от OEM-производителей, – это пройти «тесты совместимости для Android» на устройстве; Нет никаких ограничений на добавление функциональности.

Можно ли взять входной поток второго видео (во время его записи) и напрямую добавить эти данные к моему первому видео?

Я не уверен, что вы можете это сделать, потому что видеопоток – это закодированные данные (заголовок кодека, ключевые кадры и т. Д.), И просто объединение двух потоков в 1 файл не приведет к созданию действительного видеофайла, на мой взгляд.

В основном, что вы можете сделать:

  1. Получать необработанные изображения данных с поверхности предварительного просмотра камеры (см. Camera.setPreviewCallback ())
  2. Используйте android.media.MediaCodec для кодирования видео
  3. А затем используйте OutputFilStream для записи в файл.

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

PS. Кстати, попробуйте взглянуть на MediaMuxer – может быть, это тоже может вам помочь. developer.android.com/reference/android/media/MediaMuxer.html