Android: как инициализировать MediaRecorder без допустимой поверхности для предварительного просмотра видео? - PullRequest
10 голосов
/ 10 августа 2009

Я создаю приложение для камеры, в котором видео постоянно записывается и сохраняется на SD-карту. Видеоролики короткие (несколько минут), а их продолжительность задается с помощью setMaxDuration ().

Весь процесс работает нормально, в то время как основная деятельность находится на переднем плане. Но когда я перехожу к другому занятию (например, настройкам), запись видео работает в фоновом режиме, пока не будет достигнута максимальная продолжительность. Файл сохранен, но новая последовательность не может быть запущена потому что prepare () завершается неудачно, очевидно, потому что setPreviewDisplay () не любит, когда нет подходящей поверхности для присоединения.

Я пытался использовать фиктивную Surface, фиктивную SurfaceHolder, lockCanvas () и другие трюки, но ничего не получалось. Есть ли способ инициализировать MediaRecorder без допустимой поверхности?

Ответы [ 5 ]

4 голосов
/ 05 августа 2010

К сожалению, для записи видео все еще требуется предварительный просмотр на допустимой поверхности (Android SDK 1.6 - 2.2). Для снятия этого ограничения зарегистрирован запрос на улучшение http://code.google.com/p/android/issues/detail?id=9570

2 голосов
/ 14 января 2013

Я использовал сервис для этого и ширину 1px * 1px. Как можно найти здесь: http://pickerwengs.blogspot.de/2011/05/android-background-video-recorder-on.html

0 голосов
/ 15 января 2019

Вам просто нужно создать поверхность с MediaCodec, добавив следующую строку:

Surface  mySurface = MediaCodec.createPersistentInputSurface();
mMediaRecorder.setPreviewDisplay(mySurface);

...

mMediaRecorder.prepare();
0 голосов
/ 10 декабря 2011

Я думаю, что приложение IP Webcam может сделать это, хотя я не знаю как. Может быть, это работает только на> = 2.3. Я не уверен, на какой версии я видел, что это работает. Я задал вопрос, чтобы узнать, как это работает.

0 голосов
/ 12 июля 2010

Реализуете ли вы обратные вызовы Surface?

Зачем вам нужно инициализировать MediaRecorder без допустимой поверхности?

Должны ли вы записывать, даже когда вы уходите с основного занятия? или запись останавливается до появления другой активности?

...