2013-06-29 2 views
1

Цель: Использование AVCaptureMovieFileOutput для записи видео в файл .mov. Во время записи видео я хочу загрузить его на S3. Загружаемая часть должна быть реализована при загрузке нескольких частей. (Mac OS X приложение +10,8)Чтение .mov файл с NSInputStream при записи с AVCaptureMovieFileOutput

Проблема: Как читать из файла .mov в кусках, в то время как файл записывается в с AVCaptureMovieFileOutput и увеличиваясь в размерах?

То, что я сделал до сих пор:

// session = AVCaptureSession with audio and video inputs 

fileOutput = [[AVCaptureSession alloc] init]; 
[session addOutput:fileOutput] 

[session startRunning] 
[fileOutput startRecordingToOutputFileURL: fileUrl recordingDelegate:self] 

// In async dispatch queue 
inputStream = [NSInputStream inputStreamWithFileAtPath:fileUrl] 
// schedule in run loop, open and run 

В этот момент я начинаю получать stream:handleEvent: сообщения на объект делегата с NSStreamEventHasBytesAvailable. Но через несколько секунд сообщения перестают поступать (после общих байтов в 250.000-300.000 байт (0.2MB)). Это происходит, даже если файл .mov увеличивается в размере до> 10 МБ.

Вопросы:

  1. Почему NSInputStream делегат не продолжать получать поток событий?

  2. Доступны ли данные изначально, не надежно?

  3. В целом ли это приемлемый подход? Или есть другой способ добиться того, чего я хочу?

Спасибо!

ответ

0

У меня есть образец в http://www.gdcl.co.uk/2013/02/20/iOS-Video-Encoding.html, который читается из файла фильма во время записи в файл с камеры (iOS 6). Я использую отдельный AVAssetWriter, но похоже, что это должно сработать для вас.

+0

Спасибо за ввод, Geraint. В статье упоминается, что в файл нет звука. В моем случае в файл записано аудио. Это делает невозможным? Спасибо –

+0

Если вы просто хотите скопировать файл во время его записи, я думаю, что все должно быть хорошо. Вам не нужно его интерпретировать, просто скопируйте те части, которые были написаны. Вам нужно быть осторожным: размер блока mdat будет обновляться, когда файл будет закрыт. В основном, файл должен записываться последовательно, хотя. В моем примере показано, как использовать кодированные видеоданные во время кодирования: для этого вам необходимо отдельно записать звук (и, возможно, переиздать себя, используя только аппаратное обеспечение для кодирования видео). –

+0

Итак, если я правильно вас понял, ваш образец кода (хотя и интересный) не так уж уместен? Мне нужна полная копия файла .mov, записанного на диск. Вы сосредоточились на потоковой передаче видео на другое устройство? –

Смежные вопросы