2013-06-29 32 views
1

目標:使用AVCaptureMovieFileOutput將視頻記錄到.mov文件。在錄製視頻時,我想將其上傳到S3。上傳部分應該可以通過多部分上傳來實現。 (Mac OS X的應用程序+10.8)在用AVCaptureMovieFileOutput寫入時使用NSInputStream讀取.mov文件

問題: 如何從塊.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 

在這一點上,我開始接收與NSStreamEventHasBytesAvailable委託對象stream:handleEvent:消息。但幾秒鐘後,消息停止進入(在250.000-300.000字節(0.2MB)的總字節數後)即使.mov文件的大小增大到> 10MB,也會發生這種情況。

問題:

  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文件的完整副本。你專注於將視頻流式傳輸到另一個單元? –