Capturing Audio and Video to the Same File

So, it’s possible to capture audio and video in isolation. With QuickTime’s editing API, it would be possible to put them in the same movie by adding each as a separate track (see Chapter 3). But wouldn’t it be nice to just capture both audio and video into the same file at once, presumably keeping them in sync along the way? Fortunately, SequenceGrabber supports this, too.

How do I do that?

Starting with the previous lab’s video-only example, you just need to add an SGSoundChannel in the setUpVideoGrab( ) method:

soundChannel = new SGSoundChannel (grabber);

The setUsage( ) and prepare() commands are identical to what was shown in the audio-only and video-only labs:

// prepare and start previewing
videoChannel.setUsage (StdQTConstants.seqGrabRecord);
soundChannel.setUsage (StdQTConstants.seqGrabPreview |
                     StdQTConstants.seqGrabRecord);
soundChannel.setVolume (0.0f);
grabber.prepare(false, true);
grabber.startPreview( );

Beyond that, everything is the same as in the video-only case. Because the setDataOutput() call is made on the SequenceGrabber—not just on an individual channel—the grabber writes data from all the channels it’s capturing into the same file, called audiovideograb.mov in this case.

Note

Run this example with ant run-ch06-audiovideocapturetodisk.

What just happened?

For once, the SequenceGrabber APIs behave pretty much as you might expect them to. With no obvious prohibition on creating both audio and video channels from the same ...

Get QuickTime for Java: A Developer's Notebook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.