I'm not very familiar with avfoundation, but poking around the API you might be able to use this: addPeriodicTimeObserverForInterval:queue:usingBlock: on AVPlayer
You can give it a 1/30 CMTime, and it will be timed to the video rather than absolute time.
Then it's a matter of coordinating with the output capture delegate. It sounds like they may be processed by different threads(?), so you'll probably want to create some kind of thread safe queue data structure to pass events from the periodic time observer to the output capture. That kind of thing doesn't appear to be a built in library, so you might have to get creative with this piece.