Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AvFoundation - How to connect AVCaptureSession and AVAssetWriter?

I'm trying to use AVCaptureSession to capture video from the camera and then I would like to use AVAssetWriter to write the results to a file (specifically, use multiple AVAssetWriters to write the capture to chunk videos, but we don't need to complicate this question with that). However, I'm having trouble figuring out where data actually needs to be passed to the AVAssetWriter. In the Apple Developer documentation I've only seen AVCaptureSession data being passed to an AVCaptureFileOutput. Maybe I'm just missing something though. Can the AVAssetWriter just be used as an output of the capture session? A relevant example or bit of code (while not necessary) would be appreciated. Thank you much!

like image 621
golmschenk Avatar asked Apr 08 '13 22:04

golmschenk


2 Answers

Take a look at http://www.gdcl.co.uk/2013/02/20/iOS-Video-Encoding.html. This shows how to connect the capture output with the asset writer, and then extracts the data from the asset writer for streaming.

G

like image 169
Geraint Davies Avatar answered Oct 19 '22 07:10

Geraint Davies


What's your goal, exactly? Because you're asking for (the use an AVAssetWriter as an output for an AVCaptureSession) isn't possible.

Basically, an AVCaptureSession object has inputs (eg: a camera, represented by some AVCaptureInput subclass) and outputs (in the form of AVCaptureOutput's). And an AVAssetWriter is not an AVCaptureOutput subclass, so there is no way to use it directly from an AVCaptureSession.

If you want to use an AVAssetWriter, you'll have to write the data out using an AVCaptureFileOutput instance, and then read it back with an AVAssetReader, modify your data somehow, and then output it via an AVAssetWriter.

Final thing to keep in mind: AVAssetReader is documented to not guarantee real-time operations.

like image 4
zadr Avatar answered Oct 19 '22 07:10

zadr