Important: The information in this document is obsolete and should not be used for new development.
QuickTime 5 includes the addition of three QuickTime VR authoring components. These are
A QTVR Flattener, which is a movie export component that converts an existing QuickTime VR single node movie into a new movie optimized for the Web.
All three components are contained in the file QuickTime VR Authoring and are installed if the user performs a Select All in the Custom Install option.
As movie exporters, these authoring components can be demonstrated using the QuickTime Player application, QuickTime Pro, or a custom application by opening a QuickTime VR movie and then choosing Export from the File menu. You can then choose the particular exporter by selecting it from the Export: popup menu in the Export File Dialog.
Menu names that appear in the UI (subject to change) are:
Movie to Fast-Start QuickTime VR movie (the Flattener).
Appears for all single node panorama and object movies.
Movie to Separate Single-Node Movies (The Multinode Splitter).
Appears only for 2.0 format multinode movies.
Movie to QuickTime VR Object Movie (Object Movie Compressor).
Appears only for 2.0 format object movies.
Once an Export method is selected, you can click the Options button to bring up a dialog where you can choose options specific to the given exporter.
The QTVR Flattener
The QTVR Multinode Splitter
QuickTime VR Object Movie Compressor
The QTVR Flattener is a movie export component that converts an existing QuickTime VR single node movie into a new movie that is optimized for the Web. The flattener re-orders media samples; and for panoramas the flattener creates a small preview of the panorama. When viewed on the Web, this preview appears after 5% to 10% of the movie data has been downloaded, allowing users to see a lower-resolution version of the panorama before the full resolution version is available.
In QuickTime 5, this QTVR Flattener has been enhanced. There is a new implementation of tile ranking that works with horizontal and cubic panos, and also with two-dimensional tiling. The result is that panoramas appear to come in faster.
To use the QTVR Flattener from your application, you first
create a QuickTime
VR movie, then open the QTVR Flattener component and call the MovieExportToFile routine,
as shown in Listing 1-4.
Listing 1-4 Using the QTVR flattener
ComponentDescription desc; |
Component flattener; |
ComponentInstance qtvrExport = nil; |
desc.componentType = MovieExportType; |
desc.componentSubType = MovieFileType; |
desc.componentManufacturer = kQTVRFlattenerManufacturer; |
desc.componentFlags = 0; |
desc.componentFlagsMask = 0; |
flattener = FindNextComponent(nil, &desc); |
if (flattener) qtvrExport = OpenComponent (flattener); |
if (qtvrExport) |
MovieExportToFile (qtvrExport, &myFileSpec, myQTVRMovie, nil, 0, 0); |
The code snippet shown in Listing 1-4 creates a flattened
movie file specified by the myFileSpec parameter.
If your QuickTime VR movie is a panorama, the flattened movie file includes
a quarter size, blurred JPEG, compressed preview of the panorama
image.
Note: The constants MovieExportType and MovieFileType used
in Listing 1-4 are
defined in the header files QuickTimeComponents.h and Movies.h, respectively,
and are defined as 'spit' and 'MooV'.
Note: The various authoring
atom type constants can be found in the 5.0 version of QuickTimeVRFormat.h.
You can present users with the QTVR Flattener’s own dialog box. This allows users to choose options such as how to compress the preview image or to select a separate preview image file.
To show the dialog box, use the following line of code:
err = MovieExportDoUserDialog (qtvrExport, myQTVRMovie, nil, 0, 0, &cancel); |
If the user cancels the dialog box, then the Boolean cancel
is set to true.
If you don’t want to present the user with the flattener’s
dialog box, you can communicate directly with the component by using
the MovieExportSetSettingsFromAtomContainer routine
as described next.
If you want to specify a preview image other than the default,
you need to create a special atom container and then call MovieExportSetSettingsFromAtomContainer before
calling MovieExportToFile.
You can specify how to compress the image, what resolution to use, and
you can even specify your own preview image file to be used. The
atom container you pass in can have various atoms that specify certain
export options. These atoms must all be children of a flattener
settings parent atom.
The preview resolution atom is a 16-bit, big-endian value
that allows you to specify the resolution of the preview image.
This value, which defaults to kQTVRQuarterRes,
indicates how much to reduce the preview image.
The blur preview atom is a Boolean value that indicates whether
to blur the image before compressing. Blurring usually results in
a much more highly compressed image. The default value is true.
The create preview atom is a Boolean value that indicates
whether a preview image should be created. The default value is true.
The import preview atom is a Boolean value that is used to
indicate that the preview image should be imported from an external
file rather than generated from the image in the panorama file itself.
This allows you to have any image you want as the preview for the panorama.
You can specify which file to use by also including the import specification atom,
which is an FSSpec data
structure that identifies the image file. If you do not include this
atom, then the flattener presents the user with a dialog box asking
the user to select a file. The default for import preview is false. If
an import file is used, the image is used at its natural size and
the resolution setting is ignored.
The sample code in Listing 1-5 creates an atom container and adds atoms to indicate an import preview file for the flattener to use.
Listing 1-5 Specifying a preview file for the flattener to use
Boolean yes = true; |
QTAtomContainer exportData; |
QTAtom parent; |
err = QTNewAtomContainer(&exportData); |
// create a parent for the other settings atoms |
err = QTInsertChild (exportData, kParentAtomIsContainer, |
kQTVRFlattenerSettingsParentAtomType, 1, 0, 0, nil, &parent); |
// Add child atom to indicate we want to import the preview from a file |
err = QTInsertChild (exportData, parent, |
kQTVRFlattenerCreatePreviewAtomType, 1, 0, |
sizeof (yes), &yes, nil); |
// Add child atom to tell which file to import |
err = QTInsertChild (exportData, parent, |
kQTVRFlattenerImportPreviewAtomType, 1, 0, |
sizeof (previewSpec), &previewSpec, nil); |
// Tell the export component |
MovieExportSetSettingsFromAtomContainer (qtvrExport, exportData); |
Overriding the compression settings is a bit more complicated. You need to open a standard image compression dialog component and make calls to obtain an atom container that you can then pass to the QTVR Flattener component.
Listing 1-6 Overriding the compression settings
ComponentInstance sc; |
QTAtomContainer compressorData; |
SCSpatialSettings ss; |
sc = OpenDefaultComponent(StandardCompressionType,StandardCompressionSubType); |
ss.codecType = kCinepakCodecType; |
ss.codec = nil; |
ss.depth = 0; |
ss.spatialQuality = codecHighQuality |
err = SCSetInfo(sc, scSpatialSettingsType, &ss); |
err = SCGetSettingsAsAtomContainer(sc, &compressorData); |
MovieExportSetSettingsFromAtomContainer (qtvrExport, compressorData); |
The QTVR Splitter, a movie export component, takes a QTVR version 2.x multinode movie and exports a set of single-node movies with relative URL links to each other.
The QTVR Splitter works by changing all of the link hotspots to URL hotspots, leaving any previously defined URL or undefined (blob) hotspots unchanged. If the QTVR Flattener component is present, the Splitter gives you the option of using it to add fast-start data to the movies, including previews for panorama nodes. Additionally, the Splitter will generate a text file with HTML embed tags for each movie created.
When you display the movies’ output by the Splitter using the QuickTime Plugin, clicking the relative URL links opens the other nodes in the browser window. When loaded in a frame, the Plugin loads the new movies in the same frame.
When the user clicks a link which displays a multinode movie split this way, the first thing to download is the hotspot track, which is live immediately. Then any preview data is downloaded, and finally the tiles download in and are placed over the background grid or preview. The user can jump to another node at any time, and only the nodes they visit are downloaded, unlike a multinode movie, which does not allow navigation until the entire file has downloaded, and therefore downloads all of the nodes, whether the user visits them or not.
The one significant advantage of a multinode movie is that when the user jumps to a new node the movie opens to the destination view defined in the authoring process. This can be overcome by specifying view angles in the embed tag (with a new page for each movie which links to it), but the Splitter does not do this for you.
As discussed, the QTVR Splitter is a movie export component. When placed in your System Folder, any application that uses movie exporters will have access to it. The instructions outlined here use the QuickTime Player Pro application to demonstrate its usage. You begin by creating a multinode movie, using a QuickTime VR tool.
To split the movie:
Open any QTVR version 2.0 or 2.1 multinode movie in the QuickTime Player Pro application. Version 1.0 multinode movies can be converted to version 2.1 using the QTVR Converter component, which is part of the QuickTime VR Authoring Studio, or ConVRter from Sumware, a third-party developer.
Choose Export... from the File menu. Choose Separate Single-node movies from the popup menu at the bottom of the Export dialog. The file name you specify here will be edited by the Splitter to assure Internet compatibility. Spaces will be converted to underscores, other dangerous characters will be removed, and the resulting name will be truncated to allow the node number to be appended. Take this into account in order to wind up with useful file names at the end of the process.
Clicking the options... button opens the splitters settings dialog.
Generate HTML Embed tags: The splitter will write out a text file including an embed tag for each movie which can be copied and pasted into your HTML pages. Useful data included are the sizes of the movies as well as all of the hotspots and their URLs. Although the URLs are included in the movies, this list can be helpful if you want to override a URL or provide one for an undefined hotspot.
Overwrite Files with matching names: Since the Splitter creates names that are different from the name you specify in the dialog, there is no “replace” confirmation. Leaving this box checked allows the Splitter to overwrite files which have the same names as those it is creating. Since these names are pretty unusual, the chances are that the only files it will overwrite are those created by it from the same source movie. Unchecking this box will cause the Splitter to abort its operation if it runs into a file with a matching name.
Use QTVR Flattener: The Splitter will use the QTVR Flattener to add fast-start data to the files exported, along with an optional preview track for any panorama nodes. Clicking the options... button will open the Flattener's settings dialog. If this is unchecked, the movies will still be flattened, and will still download their tiles, but not with the tile reordering or preview added by the QTVR Flattener.
Click OK and let the Splitter do its work.
Test the movies by dragging the first node into a browser window.
Now you put all of the movies in the same directory together. Do not change any of the names. Even changing capitalization will break the references. If you need different names, go back and repeat the process with a different starting name.
There are a few ways to go about displaying the movie in your Web pages. The simplest (and least attractive) approach is to put a link to the first node in one of your pages:
<A href src="my_scene_node127.mov">click to view the QTVR scene"</a> |
This causes the Plugin to open the movie in an empty browser window. Clicking any URL links loads the new movies in the same place.
You can improve the user experience significantly by embedding the movies in your pages:
<Embed src="my_scene_node127.mov"... |
You copy and paste the embed tags provided in the HTML file written by the Splitter. In this case, the Plugin displays the movie in place like a graphic. However, when you click a URL link the new movie will be loaded in a blank window like the above case.
To remedy this, either override the URLs in the movies with links to pages with the other nodes embedded in them (a bit of work), or display the movies in a frame.
To load the movies in a frame, just use the first one as a frame source (instead of an HTML source with it embedded):
<frameset>... |
Now the movies will all load in that frame, providing a smooth experience for the user.
The QuickTime VR Object Movie Compressor, a movie export component, takes a multirow object movie and compresses frames in multidimensions with the goal of making the file smaller. It includes the user settings dialog box shown in Figure 1-36.
The user settings for the QuickTime VR Object Movie Compressor include:
The Standard Compression Setting, which is set by clicking on the Compression Setting button.
The target file size of the compressed VR object movie, which is specified as:
kQTVRObjExporterSettingsTargetSize = FOUR_CHAR_CODE('tsiz') |
The Block Size Setting, which can also be set from a QT atom container, controls the dimensions of the compression:
long: blockSize |
type: ‘bsiz’ |
Valid Value: 1, 2, 3, 4 which correspond to the block size of |
1x1, 3x3, 5x5, 7x7 |
Last updated: 2001-10-01