Long story short, I am trying to implement a naive solution for streaming video from the iOS camera/microphone to a server.
I am using AVCaptureSession
with audio and video AVCaptureOutputs
, and then using AVAssetWriter
/AVAssetWriterInput
to capture video and audio in the captureOutput:didOutputSampleBuffer:fromConnection
method and write the resulting video to a file.
To make this a stream, I am using an NSTimer
to break the video files into 1 second chunks (by hot-swapping in a different AVAssetWriter
that has a different outputURL
) and upload these to a server over HTTP.
This is working, but the issue I'm running into is this: the beginning of the .mp4
files appear to always be missing audio in the first frame, so when the video files are concatenated on the server (running ffmpeg
) there is a noticeable audio skip at the intersections of these files. The video is just fine - no skipping.
I tried many ways of making sure there were no CMSampleBuffers
dropped and checked their timestamps to make sure they were going to the right AVAssetWriter
, but to no avail.
Checking the AVCam example with AVCaptureMovieFileOutput
and AVCaptureLocation example with AVAssetWriter
and it appears the files they generate do the same thing.
Maybe there is something fundamental I am misunderstanding here about the nature of audio/video files, as I'm new to video/audio capture - but thought I'd check before I tried to workaround this by learning to use ffmpeg
as some seem to do to fragment the stream (if you have any tips on this, too, let me know!). Thanks in advance!
I had the same problem and solved it by recording audio with a different API, Audio Queue. This seems to solve it, just need to take care of timing in order to avoid sound delay.