Как приостановить запись видео с помощью iPhone SDK?

Я вижу, что есть приложение под названием iFile с функцией паузы во время записи видео. Как они это делают? Я попытался использовать классы AVMutableComposition, и когда пользователь делает паузу, я вырезаю новое видео, а затем объединяю видео в конце, однако время обработки для объединения видео нежелательно.

Может ли кто-нибудь дать мне другие хорошие идеи о том, как это сделать? Я заметил, что способ iFile очень плавный.

Спасибо


person Scoota P    schedule 23.04.2011    source источник


Ответы (1)


Вот несколько идей. Я не пробовал ни один из них.

Если вы используете AVAssetWriter для записи захваченного изображения, вы можете просто отбрасывать кадры во время паузы. Вам нужно будет отслеживать последнюю использованную метку времени презентации (PTS). Затем вам нужно рассчитать PTS следующего изображения на основе этой последней метки времени, когда вы снова начнете запись. Сделать это со звуком также может быть немного сложнее.

Альтернативным методом может быть использование пустых правок. Я не уверен, как бы вы вставили пустое редактирование в середину трека, используя AVAssetWriter. Я знаю, что вы можете вставить их в начале и в конце. Используя AVMutableCompositionTrack, вы можете использовать insertEmptyTimeRange: где временной диапазон построен как

CMTime delta = CMTimeSubtract(new_sample_time, last_sample_time)
CMTimeRangeMake(last_sample_time, delta)

Где new_sample_time — это время первой выборки после отмены паузы, а last_sample_time — время последней выборки перед приостановкой. Опять же, со звуком это может быть немного сложно, так как буфер для звука обычно содержит 1024 семпла. CMTime, возвращаемый CMSampleBufferGetPresentationTimeStamp, — это время первой выборки.

Надеюсь, это поможет или приведет вас к решению.

person Steve McFarlin    schedule 23.04.2011
comment
Спасибо, я пытаюсь использовать AVAssetWriter, я приближаюсь, но по какой-то причине делегат не вызывается, передавая кадры CMSampleBuffer. Я вызываю [session startRunning], когда я инициализирую свою камеру или когда я хочу начать запись? Когда следует начинать запись на AVAssetWriter? ПОСЛЕ того, как пользователь прекращает запись или когда пользователь начинает запись? В основном, я пытаюсь понять, как выбросить кадры. Любой пример кода будет отличным - person Scoota P; 25.04.2011
comment
Хорошо, похоже, что я должен вызывать [session startRunning], когда я инициализирую камеру, а затем, когда я хочу начать запись, я вызываю [avAssetWriter startWriting], а когда я хочу остановить запись, я вызываю [avAssetWriter finishWriting]. Правильно @SteveMcFarlin? - person Scoota P; 25.04.2011
comment
Не уверен, почему за это проголосовали сейчас. Это просто предложение, а не решение, которое должно быть ясным. - person Steve McFarlin; 27.02.2013
comment
Если образец проекта это! Кажется, что до сих пор нет хороших и простых способов сделать это. Использование потокового подхода против объединения нескольких дорожек. - person jgvb; 23.06.2014