Intereting Posts
Вы загрузили отлаживаемый APK. По соображениям безопасности вам нужно отключить отладку, прежде чем ее можно будет опубликовать в Google Play-Upload apk для игры в Google Проблема с выпуском Samsung S3 Дублированные файлы, скопированные в APK, включающие библиотеки Joda Time и Common IO в Android-проекте Технология для приложения, такого как teamviewer на Android Метод weakreference get (), насколько он безопасен? (Android, asynctask) PhoneStateListener onSignalStrengthsChanged перестает вызываться в службе Передача ArrayList <CustomObject> Между действиями Начать новую активность без анимации перехода в android 1.6 Удалить нежелательное разрешение WAKE_LOCK, объединенное с библиотекой Программирование для Android как слепого Как преобразовать PDF в изображение? Разница между XML SAX парсером, Pull parser & DOM Parser в android Что такое MediaStore.Images.Media.getContentUri (String volumeName): Ури? Использовать исходные карты javascript с телефонной связью Ошибка: несколько файлов dex определяют Landroid / support / annotations / AnimRes с плагинами Admob и Facebook Cordova

Сохранение предварительного просмотра во время записи видео?

В настоящее время я использую onPreviewCallback, поэтому я могу захватить кадры из камеры, когда в предварительном просмотре и передавать их через http.

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

Итак, как мне сохранить обратный вызов предварительного просмотра, чтобы я мог отправлять кадры с поверхности на мой сервер И записывать видео на устройство?

Я долго не работал с камерой Android. Однако, как я помню

1) onPreviewCallback не вызывается во время записи

Это упоминается в нескольких вопросах:

Камера onPreviewFrame не называется Как показать просмотр в режиме реального времени предварительного просмотра камеры во время записи видео?

2) Я видел, что он был обработан в SipDroid и пару других Android SIP-клиентов следующим образом (это было 1-2 года назад, поэтому этот метод может быть устаревшим):

  • Была создана труба
  • Получающий сокет трубы был завернут в FileDescriptor и передан в MediaRecorder setOutputFile
  • Отправка гнезда трубы постоянно считывалась в потоке.
  • Таким образом вы можете получить контент, который записывается в файл
  • Теперь вопрос о том, как работать с контентом (поскольку он кодируется H.263 или H.264 и может смешиваться со звуком, если вы записываете видео со звуком).
  • Были некоторые эвристические алгоритмы, которые анализировали контент (однако, это боль в заднице)

3) Вы можете использовать onPreviewFrame + запустить AudioRecorder и закодировать его самостоятельно (используя ffmpeg или что-то в этом роде) в файл mp4. Таким образом, вам не нужно запускать запись MediaRecorder.

Вы можете вызывать эти методы после вызова медиа-рекордера.start () следующим образом:

camera.reconnect(); camera.setPreviewCallback(); surfaceview.getHolder().addCallback(); 

Причины:

  1. После вызова функции camera.unlock () другой процесс (здесь – процесс медиа-рекордера) может использовать камеру; Когда процесс будет выполнен, вы должны снова подключиться к камере, которая будет повторно захватить замок и позволит вам продолжать использовать камеру.
  2. Затем перерегистрируйте обратный вызов данных кадра поверхности после переподключения камеры, поскольку его некоторое состояние может быть изменено после повторного подключения.

У меня была такая же проблема, как и ваша, в моем приложении, и я ее исправил. Надеюсь, он сможет решить ваши проблемы!

Как только я получил камеру и MediaRecorder, чтобы начать и прекратить запись без сбоев (было нелегко), у меня все еще была проблема, как вы описали, где обратный вызов предварительного просмотра перестанет быть вызванным.

Исправление, которое я наконец нашел, это добавить вызов setPreviewCallback после mediaRecorder.start (), а другой после mediaRecorder.stop (). Не уверен, что это правильно, но он работал над тестированием Razr MI.