текущее поведение
Оригинальная реализация Cameraaveome прекращает запись, когда изменяется жизнь приложения:
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
case AppLifecycleState.resumed:
break;
case AppLifecycleState.inactive:
case AppLifecycleState.paused:
case AppLifecycleState.detached:
_cameraContext
.state
.when(onVideoRecordingMode: (mode) => mode.stopRecording());
break;
case AppLifecycleState.hidden:
break;
}
super.didChangeAppLifecycleState(state);
}
Мое попытку решения
Я изменил методы жизненного цикла приложения, чтобы приостановить/резюме запись вместо того, чтобы полностью его остановить:
Код: Выделить всё
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
final currentCapture = _cameraContext.mediaCaptureController.value;
switch (state) {
case AppLifecycleState.resumed:
_cameraContext //
.state
.when(onVideoRecordingMode: (mode) => mode.resumeRecording(currentCapture!),
onVideoMode: (mode) => mode.startRecording());
break;
case AppLifecycleState.inactive:
_cameraContext //
.state
.when(onVideoRecordingMode: (mode) => mode.pauseRecording(currentCapture!));
break;
case AppLifecycleState.paused:
_cameraContext //
.state
.when(onVideoRecordingMode: (mode) => mode.stopRecording());
case AppLifecycleState.detached:
break;
case AppLifecycleState.hidden:
break;
}
super.didChangeAppLifecycleState(state);
}
После реализации функциональности паузы/резюме я получаю поврежденные видеофайлы, в которых отсутствует 30/60 секунд контента. Консоль показывает эти журналы при сохранении файла, который был приостановлен: < /p>
W/GraphicBufferSource(13694): onFrameAvailable: EOS is sent, ignoring frame
D/CCodecBufferChannel(13694): [c2.android.aac.encoder#455] MediaCodec discarded an unknown buffer
D/MPEG4Writer(13694): reset()
D/MPEG4Writer(13694): Audio track stopping. Stop source
D/MPEG4Writer(13694): Audio track source stopping
D/MPEG4Writer(13694): Audio track source stopped
V/MediaWriter(13694): Track event err/info msg:101, trackId:1, type:1000,val:-1011
V/MediaWriter(13694): Track event err/info msg:101, trackId:2, type:1000,val:-1011
I/MPEG4Writer(13694): Received total/0-length (600/0) buffers and encoded 600 frames. - Video
I/MPEG4Writer(13694): Received total/0-length (1792/0) buffers and encoded 1792 frames. - Audio
I/MPEG4Writer(13694): Audio track drift time: 0 us
I/hw-BpHwBinder(13694): onLastStrongRef automatically unlinking death recipients
D/MPEG4Writer(13694): Audio track stopped. Status:0. Stop source
D/MPEG4Writer(13694): Video track stopping. Stop source
D/MPEG4Writer(13694): Video track source stopping
D/MPEG4Writer(13694): Video track source stopped
D/MPEG4Writer(13694): Video track stopped. Status:0. Stop source
D/MPEG4Writer(13694): Duration from tracks range is [73348166, 73399922] us
D/MPEG4Writer(13694): 0 chunks are written in the last batch
D/MPEG4Writer(13694): WriterThread stopped. Status:0
I/MPEG4Writer(13694): Adjust the moov start time from 211945386468 us -> 211945386468 us
I/MPEG4Writer(13694): The mp4 file will not be streamable.
I/MPEG4Writer(13694): MOOV atom was written to the file
D/MPEG4Writer(13694): release()
D/MPEG4Writer(13694): ftruncate mPreAllocateFileEndOffset:22459512 mOffset:22458538 mMdatEndOffset:22446220 diff:974
< /code>
Вопросы < /h2>
Есть ли способ предотвратить прекращение записи камеры, когда приложение переходит на фоновые? Или, по крайней мере, когда оттенок невыполнения снят? /> среда < /h2>
Версия Flutter: 3.32.5 < /li>
Версия камеры: 2.5.0 (локальная модифицированная копия) < /li>
Платформа: Android < /li>
Устройство: ничто. Обработка фоновой записи или исправления видео коррупции будет очень ценится!
Подробнее здесь: https://stackoverflow.com/questions/796 ... tification