TweetFollow Us on Twitter





[IMAGE QT_column_final_rev1.GIF]

The success of QuickTime since its introduction in December of 1991 has been extraordinary; not only are there now countless applications and multimedia products for QuickTime on the Macintosh platform, but QuickTime has been successful for cross-platform developers as well. QuickTime for Windows, shipping since November of 1992, is becoming an important tool for Windows multimedia developers. Because movies can be created with QuickTime on the Macintosh and then used unaltered with QuickTime for Windows, developers are able to create a movie once and use it on both systems. This capability has been available since the 1.0 release of QuickTime.

To satisfy your curiosity and help you out with your own QuickTime products, this column discusses how to create movie files that are cross-platform compatible and then gives techniques for storing and accessing multiple movies in a single file (which currently poses a problem in the cross-platform environment).

The structure you choose for your QuickTime movie files will depend in part on the platform your movies will run on. This is because the Macintosh file system is different from other file systems in that there can be up to two forks in every file: a data fork and a resource fork. The data fork is the standard file for I/O that most file systems support. The resource fork, however, is unique to the Macintosh. It's a "database" of resources that can be randomly accessed via the Resource Manager.

There are two components to a movie file: themovie resource atom  -- a small data structure describing the movie, its tracks, and the tracks' media -- and themovie data atom, containing the movie's data such as video and sound. A typical movie file on the Macintosh consists of a movie resource atom in the resource fork and a movie data atom in the data fork. Storing the movie resource atom in the resource fork with resource type 'moov' allows easy random access to the data it contains. The movie data atom is stored in the data fork as sequential data, which optimizes playback performance.

Because file systems on other platforms don't support a resource fork, a movie that is to be used on other platforms must have its movie resource atom stored in the data fork of the movie file. This type of file is called asingle-fork file because the movie resource atom and the movie data atom are both stored in the data fork of the movie file, and the resource fork is not used.

Movies that will be played on both Macintosh and non-Macintosh platforms can use a file in which the movie resource atom is redundantly stored in both the resource fork and the data fork of the file. The movie data atom is, as always, stored only in the data fork. For lack of a better term, this type of file is also often called a single-fork file since the resource fork of the movie file can be ignored.

The simplest way to create a single-fork movie file for cross-platform compatibility is to use the Movie Converter application from the QuickTime Starter Kit (available from Apple-authorized dealers). The Save As dialog in this application has a checkbox that allows a movie to be stored in thesingle-fork format. However, the QuickTime API can easily be used to add this capability to any application. You simply call either FlattenMovie or FlattenMovieData with the flattenAddMovieToDataFork flag set. When called with this flag set, FlattenMovie places the movie resource atom in both forks, while FlattenMovieData puts it only in the data fork, leaving the resource fork untouched.

Movie files that are created with FlattenMovie orFlattenMovieData with the flattenAddMovieToDataForkflag set are compatible with both QuickTime and QuickTime for Windows because QuickTime is able to retrieve the movie resource atom and the movie data from the data fork alone on either platform.

We'll return to cross-platform issues in a moment, but first let's take a look at the simple case of multiple-movie files: those that will be used only on the Macintosh platform. You can create such files in one of two ways, depending on whether you want the resulting file to be self-contained (that is, to contain all of the movie information in one file). Both of these methods have their benefits and drawbacks. The one that will work best for you depends on your implementation and performance testing.

To create a self-contained multiple-movie file for the Macintosh, you can use the FlattenMovie call (without the flattenAddMovieToDataFork flag set) to append an entire movie to an existing movie file. This adds the movie resource atom to the resource fork and the movie data atom to the data fork of the file.

The second method creates a multiple-movie file that's not self-contained, but instead consists entirely of movie resource atoms that reference other movie files containing the movie data atoms. This technique can be useful if, for example, you're writing an interactive CD application that uses multiple movies and you want to store all the movie resource atoms in a single file that's relatively small. This file can be copied locally to a hard disk for faster access. The drawback of this approach is that you have to handle multiple files rather than have everything in one file. The excerpt below from the sample code provided on the CD demonstrates -- without error checking, for better readability -- how easy it is to add an existing movie's resource atom to a movie file.

// Open source movie file to add.
OpenMovieFile(&reply.sfFile, &sourceRefNum, fsRdWrPerm);
NewMovieFromFile(&theMovie, sourceRefNum, &resId,
    movieName, 0, (Boolean *) 0);

// Write out to the collection file.
currentResFile = CurResFile();
myResId = 0;
AddMovieResource(theMovie, collectionRefNum, &myResId,

// Clean up.

AddMovieResource does more than just add the movie resource atom: it updates the data references so that the new movie will refer to the correct movie data file.

Accessing multiple-movie files for Macintosh-only use is easy. You just use the Resource Manager to access the movie resource atoms in the resource fork of the file. The following excerpt from the sample code on the CD uses the Resource Manager to access the various movies. (The code on the CD adds the resource names of all the movies to a menu; your code can of course do whatever it wants with the movies.)

currentResFile = CurResFile();
movieCount = Count1Resources('moov');
for (i=1; i<=movieCount; i++) {
	movieResource = Get1IndResource('moov', i);
	// Do whatever you want with this movie.
	. . .

To create a multiple-movie file that's cross-platform compatible, you just repeatedly call FlattenMovie orFlattenMovieData with the flattenAddMovieToDataForkflag set, as described earlier under "Creating Cross Platform-Compatible Movie Files." Accessing such a file, however, is complicated. Since it's a single-fork file, you can't access the movie resource atoms randomly as with the Resource Manager. There's also a problem with accessing the atoms directly; to understand this problem, you need to know how a single-fork movie file is structured.

The movie data atom appears before the movie resource atom in a single-fork file. The first four bytes of the movie data atom contain the size of the atom. (Figure 4-2 inInside Macintosh: QuickTime , page 4-5, illustrates this structure.) This permits QuickTime to skip over the movie data atom to find the movie resource atom. If you place several movies in the same file, the movie data atoms are interleaved with the movie resource atoms.

Here's the problem: A bug in QuickTime through its current version (1.6.1) causes the size field in the movie data atoms to be filled in incorrectly. The illustration below shows how QuickTime currently creates a single-fork movie file in which FlattenMovieData has been called multiple times. The atom size in the first movie data atom takes you to the last movie resource atom rather than the first movie resource atom. Therefore, you can locate only the last movie in the file.

[IMAGE QT_column_final_rev2.GIF]

This bug will be fixed in the next version of QuickTime. The solution for now is to use the wrapper function called BetterFlattenMovieData, included on this issue's CD. This function, when called multiple times, creates a single-fork file in which the size and type fields of all atoms contain the correct information.

To locate the movies in a file with correct size and type fields, you traverse the data fork and read in those fields of each atom to determine its size and whether it's a movie resource atom. When you know the size of the atom, it's easy to skip over it and access the next atom. Of course, the last atom is reached when the end of the file is reached. The following code from the CD demonstrates how you would do this.

// Locate the file offset of the movie resource
// atom stored at the specified index.
if (FSpOpenDF(theFile, fsRdPerm, &myRefNum)	== noErr) {
	currentLoc = 0;
	doneCounter = index;
	*fileOffset = 0;
	while ((doneCounter > 0)) {
		if (err = SetFPos(myRefNum, fsFromStart, currentLoc))
		readLength = 8;
		if (err = FSRead(myRefNum, &readLength, header))
	if (header[1] == 'moov')
	*fileOffset = currentLoc;
	currentLoc += header[0];
} else
	return (err);
return (noErr);

I'm happy to see that QuickTime is being used in new and exciting ways. By taking full advantage of the cross-platform and multiple-movie capabilities of QuickTime, you can bring your products to new heights. The sample code on the CD will start you on your way. Enjoy!

JOHN WANG (AppleLink WANG.JY) is often seen sneaking around the Apple campus with a heavy duffle bag that one would think to be dozens of 8*24 GC cards that John is trying to get out of harm's way. But, in truth, John is protecting unknowing strangers from his two attack dogs, shown above. *

For information on movie resource formats, see Chapter 4 of Inside Macintosh: QuickTime.  *

Thanks to Peter Hoddie, Don Moccia, and Brigham Stevens for reviewing this column. *


Community Search:
MacTech Search:

Software Updates via MacUpdate

OmniPlan 3.0 - Robust project management...
With OmniPlan, you can create logical, manageable project plans with Gantt charts, schedules, summaries, milestones, and critical paths. Break down the tasks needed to make your project a success,... Read more
Yummy FTP 1.11 - FTP/SFTP/FTPS client fo...
Yummy FTP is an FTP + SFTP + FTPS file transfer client which focuses on speed, reliability and productivity. Whether you need to transfer a few files or a few thousand, schedule automatic backups, or... Read more
Tweetbot 2.1 - Popular Twitter client. (...
Tweetbot is a full-featured OS X Twitter client with a lot of personality. Whether it's the meticulously-crafted interface, sounds and animation, or features like multiple timelines and column views... Read more
MacPilot 8.0 - Enable over 1,200 hidden...
MacPilot gives you the power of UNIX and the simplicity of Macintosh, which means a phenomenal amount of untapped power in your hands! Use MacPilot to unlock over 1,200 features, and access them all... Read more
Typinator 6.7 - Speedy and reliable text...
Typinator turbo-charges your typing productivity. Type a little. Typinator does the rest. We've all faced projects that require repetitive typing tasks. With Typinator, you can store commonly used... Read more
Adobe Lightroom 6.2 - Import, develop, a...
Adobe Lightroom is available as part of Adobe Creative Cloud for as little as $9.99/month bundled with Photoshop CC as part of the photography package. Lightroom 6 is also available for purchase as a... Read more
ForeverSave 2.1.4 - Universal auto-save...
ForeverSave auto-saves all documents you're working on while simultaneously doing backup versioning in the background. Lost data can be quickly restored at any time. Losing data, caused by... Read more
VueScan 9.5.27 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
AirPort Utility 6.3.6 - Set up and manag...
Note: Most recent release available only within OS X 10.11 El Capitan update. Use AirPort Utility to set up and manage your Wi-Fi network and AirPort base stations, including AirPort Express, AirPort... Read more
Quicksilver 1.3.1 - Application launcher...
Quicksilver is a light, fast and free Mac application that gives you the power to control your Mac with keystrokes alone. Quicksilver allows you to find what you need quickly and easily, then act... Read more

Super Sharp (Games)
Super Sharp 1.1 Device: iOS Universal Category: Games Price: $1.99, Version: 1.1 (iTunes) Description: Your finger has never been so sharp! Cut with skill to complete the 120 ingenious physics levels of Super Sharp and become a cut... | Read more »
Assembly - Graphic design for everyone...
Assembly - Graphic design for everyone 1.0 Device: iOS Universal Category: Photography Price: $2.99, Version: 1.0 (iTunes) Description: Assembly is the easiest most powerful design tool on the App Store. Create anything you can... | Read more »
YAMGUN (Games)
YAMGUN 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: The invasion has begun! Protect the walls of the citadel against waves of enemies! But watch out, you will soon run out of ammo...... | Read more »
Royal Bounty HD (Games)
Royal Bounty HD 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: New World Computing Approved "Hi Guys! looks good so far! keep up the good work. I worked on HoMM 3 and 4 creating all of the... | Read more »
Swords & Crossbones: An Epic Pirate...
Swords & Crossbones: An Epic Pirate Story 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: | Read more »
Camel Up (Games)
Camel Up 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: | Read more »
The Martian: Bring Him Home (Games)
The Martian: Bring Him Home 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Based on the best selling novel and critically acclaimed film, THE MARTIAN tells the story of Astronaut Mark... | Read more »
This Week at 148Apps: September 21-30, 2...
Leap Into Fall With 148Apps How do you know what apps are worth your time and money? Just look to the review team at 148Apps. We sort through the chaos and find the apps you're looking for. The ones we love become Editor’s Choice, standing out above... | Read more »
Tweetbot 4 for Twitter (Social Networki...
Tweetbot 4 for Twitter 4.0 Device: iOS Universal Category: Social Networking Price: $4.99, Version: 4.0 (iTunes) Description: *** 50% off for a limited time. *** | Read more »
Mori (Games)
Mori 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Stop, rewind and unwind with Mori. Time is always running, take a moment to take control. Mori is an action puzzle game about infinitely... | Read more »

Price Scanner via

Save up to $350 with Apple refurbished iMacs
Apple has Certified Refurbished iMacs available for up to $350 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free: - 27″ 3.5GHz 5K iMac – $1949 $350 off MSRP - 27... Read more
Mac Pros on sale for up to $300 off MSRP
B&H Photo has Mac Pros on sale for up to $300 off MSRP. Shipping is free, and B&H charges sales tax in NY only: - 3.7GHz 4-core Mac Pro: $2818.99, $181 off MSRP - 3.5GHz 6-core Mac Pro: $3699... Read more
5K iMacs on sale for up to $150 off MSRP, fre...
B&H Photo has the 27″ 3.3GHz 5K iMac on sale for $1899.99 including free shipping plus NY tax only. Their price is $100 off MSRP. They have the 27″ 3.5GHz 5K iMac on sale for $2149, $150 off MSRP... Read more
Twelve South Redesigns BookArc For Today’s Sm...
Twelve South has announced a redesigned version of their very first product, BookArc for MacBook. Tailored specifically for the newest generation of MacBooks, BookArc holds the new, smaller Apple... Read more
Phone 6s Tips & Tricks – Tips Book For iP...
Poole, United Kingdom based Tap Guides Ltd. has announced the release and immediate availability of iPhone 6s Tips & Tricks, an in-depth eBook available in the iBookstore that’s priced just $2.99... Read more
13-inch 2.5GHz MacBook Pro on sale for $994,...
Best Buy has the 13″ 2.5GHz MacBook Pro available for $994.99 on their online store. Choose free shipping or free instant local store pickup (if available). Their price is $105 off MSRP. Price valid... Read more
Is The iPad Pro Really A Serious Laptop Repla...
Probably not, at least for productive professionals and other power users. Steve Jobs declared that we’d entered the “post-PC Era” with the advent of the original iPad in 2010, a phrase we don’t hear... Read more
Wednesday Deal: 13-inch Retina MacBook Pros f...
Adorama has 13″ Retina MacBook Pros on sale for up to $130 off MSRP. Shipping is free, and Adorama charges sales tax for NY & NJ residents only: - 13″ 2.7GHz/128GB Retina MacBook Pro: $1199.99 $... Read more
uBar 3.0 for Mac OS X – Custom Dock Replaceme...
Brawer Software has announced the release of uBar 3.0, an important update to their popular app and window manager for Mac OS X. uBar allows users to position it whichever side of the screen they... Read more
13-inch 2.5GHz MacBook Pro (refurbished) avai...
Apple has Certified Refurbished 13″ 2.5GHz MacBook Pros available for $829, or $270 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free: - 13″ 2.5GHz MacBook Pros... Read more

Jobs Board

*Apple* Retail - Multiple Customer Support P...
Job Description:Customer SupportSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the Read more
Software Engineer, *Apple* Watch - Apple (U...
…the team that is revolutionizing the watch! As a software engineer on the Apple Watch team, you will be responsible for building world-class applications and frameworks Read more
*Apple* Online Store UAT Lead - Apple (Unite...
**Job Summary** The Apple Online Store is a fast paced and ever evolving business environment. The User Acceptance Testing (UAT) lead in this organization is able to Read more
Hardware Systems Integration Engineer - *App...
**Job Summary** We are seeking an enthusiastic electrical engineer for the Apple Watch team. This is a design engineering position that entails working with Read more
Touch Validation Design (EE) - *Apple* Watc...
**Job Summary** Help launch next-generation Touch Technologies in Apple products. The Touch Technology team develops cutting-edge Touch solutions and technologies that Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.