2013-06-29 1 views
1

목표 : AVCaptureMovieFileOutput을 사용하여 .mov 파일에 비디오를 녹화하십시오. 동영상이 녹화되는 동안 S3에 업로드하고 싶습니다. 업로드 부분은 멀티 파트 업로드로 가능해야합니다. (맥 OS X의 10.8 응용 프로그램)AVCaptureMovieFileOutput으로 작성하는 동안 NSInputStream으로 .mov 파일 읽기

문제 : 파일이 AVCaptureMovieFileOutput와 기록 및 크기에서 성장하는 동안 나는 덩어리에서 .mov 파일에서 읽을 어떻게 ? 내가 지금까지 무슨 짓을

:

// 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 

이 시점에서 나는 NSStreamEventHasBytesAvailable에 위임 객체에 stream:handleEvent: 메시지를 받기 시작. 그러나 몇 초가 지나면 메시지가 멈 춥니 다 (250.000-300.000 바이트 (0.2MB)의 전체 바이트 이후) .mov 파일의 크기가 10MB보다 커지더라도이 작업이 수행됩니다.

질문 :

  1. NSInputStream 대표는 스트림 이벤트가 계속하지 않는 이유는 무엇입니까?

  2. 초기 사용 가능한 데이터는 신뢰할 수 있습니까?

  3. 전체적으로 실현 가능한 접근법입니까? 아니면 제가 원하는 것을 성취 할 수있는 또 다른 방법이 있습니까?

고마워요!

답변

0

카메라 (iOS 6)에서 파일로 녹화하는 동안 동영상 파일에서 읽는 샘플이 http://www.gdcl.co.uk/2013/02/20/iOS-Video-Encoding.html입니다. 별도의 AVAssetWriter를 사용하고 있지만 이것이 제대로 작동하는 것처럼 보입니다.

+0

입력 해 주셔서 감사합니다. Geraint. 이 기사에서는 파일에 오디오가 들어 있지 않음을 언급합니다. 제 경우에는 파일에 오디오가 녹음되어 있습니다. 그게 불가능 해? 감사합니다 –

+0

녹음하는 동안 파일을 복사하려는 경우, 나는 괜찮다고 생각합니다. 해석 할 필요가 없으며, 작성된 부분 만 복사하십시오. 그러나주의가 필요합니다 : 파일이 닫힐 때 mdat 청크의 크기가 업데이트됩니다. 대부분 파일은 순차적으로 작성되어야합니다. 내 샘플은 인코딩하는 동안 인코딩 된 비디오 데이터를 사용하는 방법을 보여줍니다. 즉, 오디오를 별도로 작성해야합니다 (비디오 인코딩에만 하드웨어를 사용하는 경우). –

+0

그래, 내가 올바르게 당신을 이해한다면, 당신의 코드 샘플은 (비록 흥미 롭다) 그와 관련이 없다? 디스크에 기록 된 .mov 파일의 전체 사본이 필요합니다. 동영상을 다른 기기로 스트리밍하는 데 집중하셨습니까? –