使用AVCaptureMovieFileOutput写入时,使用NSInputStream读取.mov文件

时间:2013-06-29 13:23:40

标签: objective-c cocoa avfoundation nsinputstream

目标: 使用AVCaptureMovieFileOutput将视频录制到.mov文件。在录制视频时,我想将其上传到S3。通过多部分上传,上传部分应该是可行的。 (Mac OS X +10.8 app)

问题: 当文件用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

此时,我开始使用stream:handleEvent:在委托对象上接收NSStreamEventHasBytesAvailable条消息。但几秒后消息就会停止进入(总字节数为250.000-300.000字节(0.2MB)之后)即使.mov文件的大小增加到> 10MB,也会发生这种情况。

问题:

  1. 为什么NSInputStream代表不会继续接收流媒体事件?

  2. 最初可用的数据不可靠吗?

  3. 这总体上是一种可行的方法吗?还是有另一种方法可以达到我的目的吗?

  4. 谢谢!

1 个答案:

答案 0 :(得分:0)

我在http://www.gdcl.co.uk/2013/02/20/iOS-Video-Encoding.html有一个示例,它从电影文件中读取,同时从相机录制到文件(iOS 6)。我正在使用一个单独的AVAssetWriter,但它看起来好像适合你。