<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://commons.oreilly.com/wiki/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer's_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;action=history&amp;feed=atom</id>
		<title>QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer's_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;action=history&amp;feed=atom"/>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;action=history"/>
		<updated>2013-05-26T08:15:33Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.11.0</generator>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=7236&amp;oldid=prev</id>
		<title>Docbook2Wiki: Initial conversion from Docbook</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=7236&amp;oldid=prev"/>
				<updated>2008-03-07T13:22:47Z</updated>
		
		<summary type="html">&lt;p&gt;Initial conversion from Docbook&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 13:22, 7 March 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;</summary>
		<author><name>Docbook2Wiki</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=7157&amp;oldid=prev</id>
		<title>Docbook2Wiki: Initial conversion from Docbook</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=7157&amp;oldid=prev"/>
				<updated>2008-03-07T13:17:34Z</updated>
		
		<summary type="html">&lt;p&gt;Initial conversion from Docbook&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 13:17, 7 March 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;</summary>
		<author><name>Docbook2Wiki</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4455&amp;oldid=prev</id>
		<title>Evanlenz: 1 revision(s)</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4455&amp;oldid=prev"/>
				<updated>2008-03-07T00:25:55Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision(s)&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 00:25, 7 March 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;</summary>
		<author><name>Evanlenz</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4454&amp;oldid=prev</id>
		<title>Docbook2Wiki: Initial conversion from Docbook</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4454&amp;oldid=prev"/>
				<updated>2008-03-07T00:17:35Z</updated>
		
		<summary type="html">&lt;p&gt;Initial conversion from Docbook&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 00:17, 7 March 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Figure 1-1. Launching the QuickTime Updater from the system tray'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Figure 1-1. Launching the QuickTime Updater from the system tray'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:QuickTime for Java: A &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Developer's &lt;/del&gt;Notebook_I_1_tt10.png|Launching the QuickTime Updater from the system tray]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:QuickTime for Java: A &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Developers &lt;/ins&gt;Notebook_I_1_tt10.png|Launching the QuickTime Updater from the system tray]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Figure 1-2. Custom install of QuickTime for Java'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Figure 1-2. Custom install of QuickTime for Java'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:QuickTime for Java: A &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Developer's &lt;/del&gt;Notebook_I_1_tt11.png|Custom install of QuickTime for Java]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:QuickTime for Java: A &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Developers &lt;/ins&gt;Notebook_I_1_tt11.png|Custom install of QuickTime for Java]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 35:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 35:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Figure 1-3. QTJava.zip file installed into a Java 1.4.2 lib/ext folder'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Figure 1-3. QTJava.zip file installed into a Java 1.4.2 lib/ext folder'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:QuickTime for Java: A &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Developer's &lt;/del&gt;Notebook_I_1_tt12.png|QTJava.zip file installed into a Java 1.4.2 lib/ext folder]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:QuickTime for Java: A &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Developers &lt;/ins&gt;Notebook_I_1_tt12.png|QTJava.zip file installed into a Java 1.4.2 lib/ext folder]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 112:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 112:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Figure 1-4. Embedding QuickTime movie in HTML'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Figure 1-4. Embedding QuickTime movie in HTML'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:QuickTime for Java: A &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Developer's &lt;/del&gt;Notebook_I_1_tt13.png|Embedding QuickTime movie in HTML]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:QuickTime for Java: A &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Developers &lt;/ins&gt;Notebook_I_1_tt13.png|Embedding QuickTime movie in HTML]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 158:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 158:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Figure 1-5. Installing QuickTime for Java via preflighting'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Figure 1-5. Installing QuickTime for Java via preflighting'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:QuickTime for Java: A &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Developer's &lt;/del&gt;Notebook_I_1_tt14.png|Installing QuickTime for Java via preflighting]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:QuickTime for Java: A &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Developers &lt;/ins&gt;Notebook_I_1_tt14.png|Installing QuickTime for Java via preflighting]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wikicontent:diff:version:1.11a:oldid:4303:newid:4454 --&gt;
&lt;/table&gt;</summary>
		<author><name>Docbook2Wiki</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4303&amp;oldid=prev</id>
		<title>Evanlenz: 1 revision(s)</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4303&amp;oldid=prev"/>
				<updated>2008-03-07T00:16:17Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision(s)&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 00:16, 7 March 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;</summary>
		<author><name>Evanlenz</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4302&amp;oldid=prev</id>
		<title>Docbook2Wiki: Initial conversion from Docbook</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4302&amp;oldid=prev"/>
				<updated>2008-03-07T00:15:32Z</updated>
		
		<summary type="html">&lt;p&gt;Initial conversion from Docbook&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 00:15, 7 March 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;</summary>
		<author><name>Docbook2Wiki</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4151&amp;oldid=prev</id>
		<title>Evanlenz: 1 revision(s)</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4151&amp;oldid=prev"/>
				<updated>2008-03-06T23:57:54Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision(s)&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 23:57, 6 March 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;</summary>
		<author><name>Evanlenz</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4150&amp;oldid=prev</id>
		<title>Docbook2Wiki: Initial conversion from Docbook</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java&amp;diff=4150&amp;oldid=prev"/>
				<updated>2008-03-06T23:50:56Z</updated>
		
		<summary type="html">&lt;p&gt;Initial conversion from Docbook&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{QuickTime for Java: A Developer's Notebook/TOC}}&lt;br /&gt;
Do you need to do anything special to start developing QuickTime for Java applications? The answer to that question is easily answered by another question: ''are you using Mac OS X?'' If so, you have everything you need: Java, QuickTime, and QuickTime for Java (QTJ). If you're using Windows, you might have some downloading to do.&lt;br /&gt;
&lt;br /&gt;
== Setting Up QTJ on Windows ==&lt;br /&gt;
&lt;br /&gt;
First, you must have Java installed, presumably the latest developer kit release from Sun. As of this writing, that would be the J2SE 1.4.2 SDK, which lives at ''http://java.sun.com/j2se/1.4.2/download.html''. Now you must install and/or update QuickTime.&lt;br /&gt;
&lt;br /&gt;
=== How do I do that? ===&lt;br /&gt;
&lt;br /&gt;
If you don't already have QuickTime (or iTunes, which includes QuickTime in its install), you can get it from ''http://quicktime.apple.com/''. What's perhaps more common is that you have QuickTime, but you don't have QuickTime for Java, which is ''not'' installed by default.&lt;br /&gt;
&lt;br /&gt;
In this case, you can use the QuickTime Updater to update your copy of QuickTime and install custom pieces like QTJ. If you have the QuickTime icon down in your System Tray, you can right-click it to launch the Updater, as seen in [[QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java#quicktimejvaadn-CHP-1-FIG-1|Figure 1-1]]. You can also get to the Updater via Start → Programs → QuickTime → QuickTime Updater.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;quicktimejvaadn-CHP-1-FIG-1&amp;quot;&amp;gt;&lt;br /&gt;
'''Figure 1-1. Launching the QuickTime Updater from the system tray'''&lt;br /&gt;
&lt;br /&gt;
[[Image:QuickTime for Java: A Developer's Notebook_I_1_tt10.png|Launching the QuickTime Updater from the system tray]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whether you're updating or installing QuickTime for the first time, you need to click the Custom button to perform a custom install. This will give you the opportunity to install nondefault features, most of which are optional ''codecs'' , or software components to handle various video and audio encoding formats. Scroll down the list and you should see QuickTime for Java, as shown in [[QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java#quicktimejvaadn-CHP-1-FIG-2|Figure 1-2]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;quicktimejvaadn-CHP-1-FIG-2&amp;quot;&amp;gt;&lt;br /&gt;
'''Figure 1-2. Custom install of QuickTime for Java'''&lt;br /&gt;
&lt;br /&gt;
[[Image:QuickTime for Java: A Developer's Notebook_I_1_tt11.png|Custom install of QuickTime for Java]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Continue by clicking Update Now (or Install, if this is a new install) to put the latest version of QuickTime and QuickTime for Java on your PC.&lt;br /&gt;
&lt;br /&gt;
=== What just happened? ===&lt;br /&gt;
&lt;br /&gt;
The installer installed QuickTime's various pieces in your system, adding a QuickTime group to your Start Menu, a QuickTime icon in your System Tray, various pieces in ''C:\WINDOWS\System32\QuickTime'', etc. It puts ''QTJava.zip'' in the ''lib/ext'' directory of any valid Java installations it finds, adds a systemwide environment variable called &amp;lt;tt&amp;gt;QTJAVA&amp;lt;/tt&amp;gt; with the path to this file, and adds the file's path to the &amp;lt;tt&amp;gt;CLASSPATH&amp;lt;/tt&amp;gt; system environment variable, creating it if necessary. [[QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java#quicktimejvaadn-CHP-1-FIG-3|Figure 1-3]] shows what this looks like in Windows Explorer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;quicktimejvaadn-CHP-1-FIG-3&amp;quot;&amp;gt;&lt;br /&gt;
'''Figure 1-3. QTJava.zip file installed into a Java 1.4.2 lib/ext folder'''&lt;br /&gt;
&lt;br /&gt;
[[Image:QuickTime for Java: A Developer's Notebook_I_1_tt12.png|QTJava.zip file installed into a Java 1.4.2 lib/ext folder]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be obvious that it's important to do the installs in the order shown here: Java first, then QuickTime. That way, QuickTime can find the existing Java directories into which to install ''QTJava.zip''. Unfortunately, this can still get messed up if you add another Java Runtime Environment (JRE) later—QuickTime might think QTJ is installed, but the new JRE won't have ''QTJava.zip'' in its ''lib/ext'' directory. In this case, copying ''QTJava.zip'' manually might be the most practical option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
'''Note'''&lt;br /&gt;
&lt;br /&gt;
''Note that ''QTJava'' is a zip file, not a JAR, which gives it this archive-like icon. You don't need, or want, to ever unzip this file''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What about... ===&lt;br /&gt;
&lt;br /&gt;
...installing QTJ on Linux? Sorry. The thing that makes QTJ fast and powerful—the fact that it's a wrapper to an underlying native framework—is also its cross-platform downfall. QuickTime for Java can exist only on platforms that Apple develops QuickTime for, and right now, that means Mac and Windows. On the other hand, if Apple ever did port QuickTime to Linux, bringing QTJ along for the ride probably wouldn't be hard.&lt;br /&gt;
&lt;br /&gt;
And what about installing QTJ on (Classic) Mac OS? Of course. QTJ was originally developed on and for Mac OS 8 and 9. It is part of the standard QuickTime install for Mac OS and thus gets picked up as part of a regular update (which you'd launch with the QuickTime Settings control panel, under the Update Check section). On Classic, the ''QTJava.zip'' file lives in ''System Folder/Extensions/MRJ Libraries/MRJClasses'' (yes, there's a space in ''MRJ Libraries'' , but not in ''MRJClasses'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
'''Note'''&lt;br /&gt;
&lt;br /&gt;
''MRJ means Macintosh Runtime for Java, the name of Classic's JRE. The name and its confusing versioning were dropped for OS X''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, development of QuickTime for Classic stopped at Version 6.0.3 and does not include the much-changed version of QTJ that this book covers, QTJ 6.1. Furthermore, it's worth remembering that Java on Classic Mac OS never got past Java 1.1.8, which means it doesn't include Swing, Collections, or many other J2SE classes and conveniences that modern Java developers would expect to be present.&lt;br /&gt;
&lt;br /&gt;
Where's the API documentation? Even though ''QTJava.zip'' is all you need to compile, some documentation and demos would be really helpful, right? The good news is that there is a QTJ SDK that offers Javadocs and demos. Unfortunately, much of what's on Apple's web site as of this writing refers to an earlier version of QTJ that won't work with Java 1.4 on Mac OS X. The most complete SDK right now is labeled as the &amp;quot;QuickTime for Java Windows SDK,&amp;quot; and is located at ''http://developer.apple.com/sdk/index.html#QTJavaWin''. This package contains a complete set of current Javadocs and demos that have been updated to represent the new API calls in QTJ 6.1. You can also view the Javadoc online at ''http://developer.apple.com/documentation/Java/Reference/1.4.1/Java141API_QTJ/index.html''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tip&amp;quot;&amp;gt;&lt;br /&gt;
'''Tip'''&lt;br /&gt;
&lt;br /&gt;
When you look at the Javadoc, many methods will have a boldface reference to their equivalent C function. For example, &amp;lt;tt&amp;gt;Movie.start( )&amp;lt;/tt&amp;gt;, which starts playing a movie (see the next chapter), wraps the native function &amp;lt;tt&amp;gt;QuickTime::StartMovie&amp;lt;/tt&amp;gt;. You can usually find the native documentation by doing a search on Apple's page for the function name or by Googling for it with a search term like &amp;lt;tt&amp;gt;site:apple.com StartMovie&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Why would you ever look at the native docs when you're programming in Java? Because a lot of the parameters aren't described in the Javadoc, particularly when methods take behavior flags.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Embedding QuickTime in HTML ==&lt;br /&gt;
&lt;br /&gt;
Every once in a while, a developer new to QuickTime will post to one of the developer lists, saying he needs QTJ to put a QuickTime movie in a web page.&lt;br /&gt;
&lt;br /&gt;
QTJ is great, but this is way, ''way'' overkill. For this task, you don't need QTJ. In fact, you'd just be creating headaches for yourself by requiring QTJ and dealing with the hassles of applets. Instead, you can just embed QuickTime content in HTML.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
'''Note'''&lt;br /&gt;
&lt;br /&gt;
''The mailing lists at ''http://lists.apple.com/'' are a great source of information, particularly ''quicktime-java'', ''quicktime-users'' (authoring), and ''quicktime-api'' (native programming). ''java-dev'' is also helpful for figuring out issues with Mac OS X's Java implementation''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How do I do that? ===&lt;br /&gt;
&lt;br /&gt;
In your HTML page, use an &amp;lt;tt&amp;gt;&amp;lt;object&amp;gt;&amp;lt;/tt&amp;gt; tag, which wraps an &amp;lt;tt&amp;gt;&amp;lt;embed&amp;gt;&amp;lt;/tt&amp;gt;, as shown in [[QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java#quicktimejvaadn-CHP-1-EX-1|Example 1-1]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;quicktimejvaadn-CHP-1-EX-1&amp;quot;&amp;gt;&lt;br /&gt;
'''Example 1-1. Embedding QuickTime in HTML'''&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;object classid=&amp;quot;clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B&amp;quot;&lt;br /&gt;
 width=&amp;quot;160&amp;quot; height=&amp;quot;136&amp;quot;&lt;br /&gt;
 codebase=&amp;quot;http://www.apple.com/qtactivex/qtplugin.cab&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;param name=&amp;quot;src&amp;quot; VALUE=&amp;quot;buhbuhbuh.mov&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;param name=&amp;quot;autoplay&amp;quot; VALUE=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;param name=&amp;quot;loop&amp;quot; VALUE=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;param name=&amp;quot;controller&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;embed src=&amp;quot;buhbuhbuh.mov&amp;quot; width=&amp;quot;160&amp;quot; height=&amp;quot;136&amp;quot;&lt;br /&gt;
  scale=&amp;quot;tofit&amp;quot;&lt;br /&gt;
  controller=&amp;quot;true&amp;quot;&lt;br /&gt;
  autoplay=&amp;quot;true&amp;quot;&lt;br /&gt;
  loop=&amp;quot;true&amp;quot;&lt;br /&gt;
  pluginspage=&amp;quot;http://www.apple.com/quicktime/download/&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/object&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are generally self-explanatory: &amp;lt;tt&amp;gt;height&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;width&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;src&amp;lt;/tt&amp;gt; are the only ones that are actually required. Because I've chosen to include a controller widget, I add 16 to the &amp;lt;tt&amp;gt;height&amp;lt;/tt&amp;gt; parameter and use the &amp;lt;tt&amp;gt;scale&amp;lt;/tt&amp;gt; parameter with the value &amp;lt;tt&amp;gt;tofit&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A web page using this tag is shown in [[QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java#quicktimejvaadn-CHP-1-FIG-4|Figure 1-4]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;quicktimejvaadn-CHP-1-FIG-4&amp;quot;&amp;gt;&lt;br /&gt;
'''Figure 1-4. Embedding QuickTime movie in HTML'''&lt;br /&gt;
&lt;br /&gt;
[[Image:QuickTime for Java: A Developer's Notebook_I_1_tt13.png|Embedding QuickTime movie in HTML]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What just happened? ===&lt;br /&gt;
&lt;br /&gt;
The weird thing about this is, of course, the tag-within-a-tag arrangement. We do this because although most browsers use the &amp;lt;tt&amp;gt;&amp;lt;embed&amp;gt;&amp;lt;/tt&amp;gt; tag to use plug-ins, Internet Explorer on Windows is ''special'' and insists that we use an &amp;lt;tt&amp;gt;&amp;lt;object&amp;gt;&amp;lt;/tt&amp;gt; tag to talk to a QuickTime ActiveX control.&lt;br /&gt;
&lt;br /&gt;
Because of this arrangement, you have to list all the parameters ''twice'', once in each tag. In the &amp;lt;tt&amp;gt;&amp;lt;embed&amp;gt;&amp;lt;/tt&amp;gt; tag they're attributes, and in the &amp;lt;tt&amp;gt;&amp;lt;object&amp;gt;&amp;lt;/tt&amp;gt; tag they're child &amp;lt;tt&amp;gt;&amp;lt;param&amp;gt;&amp;lt;/tt&amp;gt; elements. Each tag also has some boilerplate code, such as the &amp;lt;tt&amp;gt;&amp;lt;embed&amp;gt;&amp;lt;/tt&amp;gt;'s &amp;lt;tt&amp;gt;pluginspage&amp;lt;/tt&amp;gt; and the &amp;lt;tt&amp;gt;&amp;lt;object&amp;gt;&amp;lt;/tt&amp;gt;'s &amp;lt;tt&amp;gt;classid&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;codebase&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== What about... ===&lt;br /&gt;
&lt;br /&gt;
...other options for the plug-in? There are too many to cover here. Check out ''http://www.apple.com/quicktime/authoring/embed.html''. There's also some support for controlling a movie via JavaScript in some browsers (including IE and Mozilla derivatives, but not Safari as of this writing), using the attribute &amp;lt;tt&amp;gt;enablejavascript&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Preflighting a QTJ Installation ==&lt;br /&gt;
&lt;br /&gt;
Given the hassle of setting up your own box with a custom QuickTime installation, the idea of having to walk your Windows users through such a process is probably unappealing. Installing the various QuickTime ''.dll''s and such by yourself is not an alternative, because you promised not to redistribute QuickTime when you clicked &amp;quot;agree&amp;quot; on that license.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tip&amp;quot;&amp;gt;&lt;br /&gt;
'''Tip'''&lt;br /&gt;
&lt;br /&gt;
You know the license I mean—it's the one you didn't read! That's OK, I didn't read it either.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fortunately, QuickTime 6 offers a &amp;quot;preflighting&amp;quot; feature that allows you to create an XML file that describes what QuickTime features you need, open the file with QuickTime, and have QuickTime download and install your features if they're absent.&lt;br /&gt;
&lt;br /&gt;
=== How do I do that? ===&lt;br /&gt;
&lt;br /&gt;
In your favorite text editor, create an XML file, as seen in [[QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java#quicktimejvaadn-CHP-1-EX-2|Example 1-2]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;quicktimejvaadn-CHP-1-EX-2&amp;quot;&amp;gt;&lt;br /&gt;
'''Example 1-2. Preflighting to install QTJ'''&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;?quicktime type=&amp;quot;application/x-qtpreflight&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;qtpreflight&amp;gt;&lt;br /&gt;
   &amp;lt;component type=&amp;quot;null&amp;quot; subtype=&amp;quot;qtj &amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/qtpreflight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save this file with a ''.mov'' extension to associate it with QuickTime.&lt;br /&gt;
&lt;br /&gt;
Have QuickTime open this file in whatever means is appropriate for your application—embed it in a web page, have an installer script open it with ''QuickTimePlayer.exe'', etc. When you do, QuickTime will check to see if QuickTime for Java has been installed; if QTJ hasn't been installed, this will give the user a chance to download and install it, as seen in [[QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java#quicktimejvaadn-CHP-1-FIG-5|Figure 1-5]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;quicktimejvaadn-CHP-1-FIG-5&amp;quot;&amp;gt;&lt;br /&gt;
'''Figure 1-5. Installing QuickTime for Java via preflighting'''&lt;br /&gt;
&lt;br /&gt;
[[Image:QuickTime for Java: A Developer's Notebook_I_1_tt14.png|Installing QuickTime for Java via preflighting]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What just happened? ===&lt;br /&gt;
&lt;br /&gt;
The XML file specifies a list of QuickTime components that the application knows it needs to run. These components are classified in a type/subtype scheme. For example, to test for MPEG-4 support, you'd use type &amp;quot;&amp;lt;tt&amp;gt;imdc&amp;lt;/tt&amp;gt;&amp;quot; (short for ''image decompressor'') and subtype &amp;quot;&amp;lt;tt&amp;gt;mp4v&amp;lt;/tt&amp;gt;&amp;quot;. QuickTime for Java is something of a special case, so it gets type &amp;quot;&amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt;&amp;quot; and subtype &amp;quot;&amp;lt;tt&amp;gt;qtj&amp;lt;/tt&amp;gt;&amp;quot;. The trailing space on the subtype is really important, because all types and subtypes must be ''exactly'' four characters long.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
'''Note'''&lt;br /&gt;
&lt;br /&gt;
''[[QuickTime for Java: A Developer's Notebook/Working with Components|Chapter 4]] has much more information about components and the FOUR_CHAR_CODES that identify them''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If any of the specified components are found to be absent, QuickTime brings up a dialog and offers the user a chance to download and install them on the spot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tip&amp;quot;&amp;gt;&lt;br /&gt;
'''Tip'''&lt;br /&gt;
&lt;br /&gt;
Because the XML file is pretending to be a movie, QuickTime Player will open it up with a typical movie window, which will hang around whether or not the install is approved and succeeds. Apple recommends embedding the preflight movie in an HTML page and using the &amp;lt;tt&amp;gt;width&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;height&amp;lt;/tt&amp;gt; parameters of the &amp;lt;tt&amp;gt;&amp;lt;embed&amp;gt;&amp;lt;/tt&amp;gt; tag to give it an unobtrusive size of 2 pixels by 2 pixels, so the user probably won't even see it.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compiling QTJ Code ==&lt;br /&gt;
&lt;br /&gt;
Once you've installed QuickTime and QuickTime for Java, you have everything you need to start developing QTJ applications—no separate SDK is required.&lt;br /&gt;
&lt;br /&gt;
=== How do I do that? ===&lt;br /&gt;
&lt;br /&gt;
You can begin by compiling a trivial application to check the QuickTime and QTJ versions, as shown in [[QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java#quicktimejvaadn-CHP-1-EX-3|Example 1-3]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;quicktimejvaadn-CHP-1-EX-3&amp;quot;&amp;gt;&lt;br /&gt;
'''Example 1-3. Checking the version of QuickTime'''&lt;br /&gt;
&lt;br /&gt;
 package com.oreilly.qtjnotebook.ch01;&lt;br /&gt;
   &lt;br /&gt;
 import quicktime.QTSession;&lt;br /&gt;
 import quicktime.util.QTBuild;&lt;br /&gt;
   &lt;br /&gt;
 public class QTVersionCheck {&lt;br /&gt;
   &lt;br /&gt;
   public static void main (String[  ] args) {&lt;br /&gt;
       try {&lt;br /&gt;
           QTSession.open( );&lt;br /&gt;
           System.out.println (&amp;quot;QT version: &amp;quot; +&lt;br /&gt;
               QTSession.getMajorVersion( ) +&lt;br /&gt;
               &amp;quot;.&amp;quot; +&lt;br /&gt;
               QTSession.getMinorVersion( ));&lt;br /&gt;
           System.out.println (&amp;quot;QTJ version: &amp;quot; +&lt;br /&gt;
               QTBuild.getVersion( ) +&lt;br /&gt;
               &amp;quot;.&amp;quot; +&lt;br /&gt;
               QTBuild.getSubVersion( ));&lt;br /&gt;
           QTSession.close( );&lt;br /&gt;
       } catch (Exception e) {&lt;br /&gt;
           e.printStackTrace( );&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The compilation is the tricky step here. If you do a straightforward &amp;lt;tt&amp;gt;javac&amp;lt;/tt&amp;gt;, bad things happen:&lt;br /&gt;
&lt;br /&gt;
 cadamson% javac src/com/oreilly/qtjnotebook/ch01/QTVersionCheck.java&lt;br /&gt;
 src/com/oreilly/qtjnotebook/ch01/QTVersionCheck.java:3:&lt;br /&gt;
   package quicktime does not exist&lt;br /&gt;
 import quicktime.QTSession;&lt;br /&gt;
                ^&lt;br /&gt;
 src/com/oreilly/qtjnotebook/ch01/QTVersionCheck.java:4:&lt;br /&gt;
   package quicktime.util does not exist&lt;br /&gt;
 import quicktime.util.QTBuild;&lt;br /&gt;
                     ^&lt;br /&gt;
 src/com/oreilly/qtjnotebook/ch01/QTVersionCheck.java:10:&lt;br /&gt;
   cannot resolve symbol&lt;br /&gt;
 symbol  : variable QTSession &lt;br /&gt;
 location: class com.oreilly.qtjnotebook.ch01.QTVersionCheck&lt;br /&gt;
           QTSession.open( );&lt;br /&gt;
           ^&lt;br /&gt;
&lt;br /&gt;
Instead, you have to explicitly provide the path to ''QTJava.zip'', which contains the QTJ classes. On the Mac OS X command line, you would do this as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
'''Note'''&lt;br /&gt;
&lt;br /&gt;
''Here, as in many examples, you should type the entire command on one line. It's broken up in the text for printing purposes''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cadamson% javac -classpath /System/Library/Java/Extensions/QTJava.zip &lt;br /&gt;
   src/com/oreilly/qtjnotebook/ch01/QTVersionCheck.java&lt;br /&gt;
&lt;br /&gt;
On Windows, the path to ''QTJava.zip'' would point to wherever the QuickTime installer put the file, which presumably means into your Java installation's ''lib/ext'':&lt;br /&gt;
&lt;br /&gt;
 C:\qtjtests\book stuff\code&amp;gt;javac -classpath&lt;br /&gt;
   &amp;quot;c:\Program Files\Java\j2re1.4.2\lib\ext\QTJava.zip&amp;quot;&lt;br /&gt;
   src\com\oreilly\qtjnotebook\ch01\QTVersionCheck.java&lt;br /&gt;
&lt;br /&gt;
Once the code compiles, running it is a lot easier—you don't need to explicitly put ''QTJava.zip'' in the runtime classpath to run a QTJ application. Just supply the class name to run, as the following output illustrates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
'''Note'''&lt;br /&gt;
&lt;br /&gt;
''Using the ant buildfile provided with the downloaded book code (and described in the Preface) makes compiling a lot easier!''&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cadamson% java -cp classes com.oreilly.qtjnotebook.ch01.QTVersionCheck&lt;br /&gt;
 QT version: 6.5&lt;br /&gt;
 QTJ version: 6.1&lt;br /&gt;
 cadamson%&lt;br /&gt;
&lt;br /&gt;
=== What just happened? ===&lt;br /&gt;
&lt;br /&gt;
As for what this trivial first application actually does, a read-through of the &amp;lt;tt&amp;gt;main( )&amp;lt;/tt&amp;gt; method shows it doing four things:&lt;br /&gt;
&lt;br /&gt;
# Opening the QuickTime session&lt;br /&gt;
# Printing the QuickTime version by making calls to &amp;lt;tt&amp;gt;quicktime.QTSession&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Printing the QuickTime for Java version by making calls to &amp;lt;tt&amp;gt;quicktime.util.QTBuild&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Closing the QuickTime session&lt;br /&gt;
&lt;br /&gt;
If any of these throws an exception, it's caught and printed to standard-out.&lt;br /&gt;
&lt;br /&gt;
=== What about... ===&lt;br /&gt;
&lt;br /&gt;
...the mismatch between the version numbers? QuickTime and QuickTime for Java versions are somewhat independent, because not every QT update merits a QTJ update. Typically, you'll see both roll out a major version at the same time, but then a number of QuickTime updates will be issued, usually bug-fix updates or minor feature releases, without any changes to QTJ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sidebar&amp;quot;&amp;gt;&lt;br /&gt;
'''The Latest and Greatest'''&lt;br /&gt;
&lt;br /&gt;
This book covers QTJ 6.1, which was released alongside QuickTime 6.4. If your software reports a lower version, be sure to update with the QuickTime Updater because QTJ 6.1 has massive differences from previous versions, and this book covers only QTJ 6.1.&lt;br /&gt;
&lt;br /&gt;
How different is QTJ 6.1 from its predecessors? Try &amp;quot;every QTJ application broke with 6.1.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The problem was caused by Apple changing the internals of its Java implementation from the Carbon framework to Cocoa for its Java 1.4 implementation. QTJ was heavily dependent on Carbon for its native binding, and a full-blown rewrite for Cocoa was impractical.&lt;br /&gt;
&lt;br /&gt;
However, only the parts involving the AWT/Swing bridge were affected—most of QTJ still worked just fine. So, Apple rolled out a radically simplified GUI layer for QTJ in the new &amp;lt;tt&amp;gt;quicktime.app.view&amp;lt;/tt&amp;gt; package. All the incompatible packages, particularly &amp;lt;tt&amp;gt;quicktime.app.display&amp;lt;/tt&amp;gt; and its subpackages, were deprecated. A few nice-to-have features, like live-video compositing, weren't ported to 6.1.&lt;br /&gt;
&lt;br /&gt;
QTJ 6.1 can be used on Mac OS X with either Java 1.4 or Java 1.3, and on Windows. Earlier versions work on Windows and with Java 1.3 on Mac OS X, but will throw runtime exceptions with Java 1.4.&lt;br /&gt;
&lt;br /&gt;
Parts of Apple's web site and older books still cover the old API. If you see code that uses &amp;lt;tt&amp;gt;quicktime.app.display&amp;lt;/tt&amp;gt;, or any of its classes (like &amp;lt;tt&amp;gt;QTCanvas&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;SGDrawer&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;SWCompositor&amp;lt;/tt&amp;gt;), beware: it won't work on Java 1.4 on Mac OS X and won't be supported going forward. These packages are also in the Javadocs, but they're clearly marked as deprecated.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Opening and Closing the QuickTime Session ==&lt;br /&gt;
&lt;br /&gt;
All QTJ applications are responsible for managing the QuickTime &amp;quot;session.&amp;quot; The call to &amp;lt;tt&amp;gt;QTSession.open( )&amp;lt;/tt&amp;gt; gives QuickTime an opportunity to initialize itself, and it must be made before any other QTJ call, or you'll get an exception. Similarly, you must call &amp;lt;tt&amp;gt;QTSession.close( )&amp;lt;/tt&amp;gt; when you're done with QuickTime to give it a chance to clean up.&lt;br /&gt;
&lt;br /&gt;
In general, this means you might want to call &amp;lt;tt&amp;gt;QTSession.open( )&amp;lt;/tt&amp;gt; as early as possible and &amp;lt;tt&amp;gt;QTSession.close( )&amp;lt;/tt&amp;gt; as late as possible. The former is easy enough to do: just put it in your application's entry point or even in a static initializer so that it precedes &amp;lt;tt&amp;gt;main( )&amp;lt;/tt&amp;gt;. On the other hand, ensuring that you call &amp;lt;tt&amp;gt;QTSession.close( )&amp;lt;/tt&amp;gt; gracefully is trickier, because your user could quit your application with a menu item you provide, a Ctrl-C, a Cmd-Q (on Mac), or (heaven forbid) a &amp;lt;tt&amp;gt;kill -9&amp;lt;/tt&amp;gt; &amp;lt;tt&amp;gt;''your-pid''&amp;lt;/tt&amp;gt; from the command line. Ideally, you'd like to have a fighting chance of properly closing QuickTime in as many cases as possible.&lt;br /&gt;
&lt;br /&gt;
=== How do I do that? ===&lt;br /&gt;
&lt;br /&gt;
One way to close QuickTime late is to put &amp;lt;tt&amp;gt;QTSession.close()&amp;lt;/tt&amp;gt; in a Java shutdown hook, which will get called as the JVM goes away. There are no guarantees, but it's better than nothing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
'''Note'''&lt;br /&gt;
&lt;br /&gt;
''You can also run this example with the provided ant run-ch01-qtversioncheck task''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use the class in [[QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java#quicktimejvaadn-CHP-1-EX-4|Example 1-4]] as a general-purpose session handler for QTJ. It is presented here so that none of the other examples in the book will need to explicitly handle opening or closing the &amp;lt;tt&amp;gt;QTSession&amp;lt;/tt&amp;gt; beyond calling this class.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;quicktimejvaadn-CHP-1-EX-4&amp;quot;&amp;gt;&lt;br /&gt;
'''Example 1-4. Session handler for QuickTime for Java'''&lt;br /&gt;
&lt;br /&gt;
 package com.oreilly.qtjnotebook.ch01;&lt;br /&gt;
 &lt;br /&gt;
 import quicktime.*;&lt;br /&gt;
 &lt;br /&gt;
 public class QTSessionCheck {&lt;br /&gt;
 &lt;br /&gt;
   private Thread shutdownHook;&lt;br /&gt;
   private static QTSessionCheck instance;&lt;br /&gt;
   private QTSessionCheck( ) throws QTException {&lt;br /&gt;
       super( );&lt;br /&gt;
       // init&lt;br /&gt;
       QTSession.open( );&lt;br /&gt;
       // create shutdown handler&lt;br /&gt;
       shutdownHook = new Thread( ) {&lt;br /&gt;
               public void run( ) {&lt;br /&gt;
                   QTSession.close( );&lt;br /&gt;
               }&lt;br /&gt;
           };&lt;br /&gt;
       Runtime.getRuntime( ).addShutdownHook(shutdownHook);&lt;br /&gt;
   }&lt;br /&gt;
   private static QTSessionCheck getInstance( ) throws QTException {&lt;br /&gt;
       if (instance =  = null)&lt;br /&gt;
           instance = new QTSessionCheck( );&lt;br /&gt;
       return instance;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   public static void check( ) throws QTException {&lt;br /&gt;
       // gets instance.  if a new one needs to be created,&lt;br /&gt;
       // it calls QTSession.open( ) and creates a shutdown hook&lt;br /&gt;
       // to call QTSession.close( )&lt;br /&gt;
       getInstance( );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;warning&amp;quot;&amp;gt;&lt;br /&gt;
'''Warning'''&lt;br /&gt;
&lt;br /&gt;
It looks like &amp;lt;tt&amp;gt;QTSession.close( )&amp;lt;/tt&amp;gt; hangs on some Windows installations. It might be safer to use &amp;lt;tt&amp;gt;QTSession.exitMovies( )&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What just happened? ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;QTSessionHandler&amp;lt;/tt&amp;gt; class uses a singleton pattern. The idea is that all the work is done in the constructor, which will be called only once (to create the singleton), so you're free to call the static &amp;lt;tt&amp;gt;QTSessionHandler.check( )&amp;lt;/tt&amp;gt; method wherever and whenever you like, knowing it will have to run only once.&lt;br /&gt;
&lt;br /&gt;
When you call &amp;lt;tt&amp;gt;check( )&amp;lt;/tt&amp;gt;, it makes a trivial call to &amp;lt;tt&amp;gt;getInstance( )&amp;lt;/tt&amp;gt;, which creates a new instance if and only if one hasn't been created yet. The constructor calls &amp;lt;tt&amp;gt;QTSession.open( )&amp;lt;/tt&amp;gt; to initialize QuickTime, and then sets up a shutdown handler that will call &amp;lt;tt&amp;gt;QTSession.close( )&amp;lt;/tt&amp;gt; when Java is shutting down.&lt;br /&gt;
&lt;br /&gt;
=== What about... ===&lt;br /&gt;
&lt;br /&gt;
...managing the QTSession myself? Absolutely. If some other arrangement works for your application, go for it. This class is merely a convenience, and is arguably overkill—closing the QuickTime session is handled automatically on Mac OS X when you use the default Quit menu item, and I've never seen a problem that was definitely caused by improperly shutting down QuickTime on Windows. But, as this class shows, getting it right isn't ''that'' hard.&lt;br /&gt;
&lt;br /&gt;
...making multiple &amp;lt;tt&amp;gt;open( )&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;close( )&amp;lt;/tt&amp;gt; calls? According to &amp;lt;tt&amp;gt;QTSession&amp;lt;/tt&amp;gt;'s Javadocs, if you issue multiple &amp;lt;tt&amp;gt;open( )&amp;lt;/tt&amp;gt; calls, QuickTime won't be shut down until an equal number of &amp;lt;tt&amp;gt;close( )&amp;lt;/tt&amp;gt; calls are received. There's no benefit (or harm) to multiple &amp;lt;tt&amp;gt;open( )&amp;lt;/tt&amp;gt; calls, so this is probably just trivia.&lt;br /&gt;
&lt;br /&gt;
Running inside an applet? In an applet, it might make more sense to put your &amp;lt;tt&amp;gt;open( )&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;close()&amp;lt;/tt&amp;gt; calls in the applet's &amp;lt;tt&amp;gt;init( )&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;destroy( )&amp;lt;/tt&amp;gt; methods, respectively, instead of banking on a particular browser's behavior vis-à-vis taking down the entire JVM and executing shutdown hooks.&lt;br /&gt;
&lt;br /&gt;
== Playing an Audio File from the Command Line ==&lt;br /&gt;
&lt;br /&gt;
To finish this chapter, we'll look at a very simple example of QTJ code that actually plays some media. To keep things simple, I'll completely ignore the GUI, so all this will do is take a file path from the command line—presumably an MP3 or other audio file—and play it in QTJ.&lt;br /&gt;
&lt;br /&gt;
=== How do I do that? ===&lt;br /&gt;
&lt;br /&gt;
Compile and run the source for ''TrivialAudioPlayer.java'', shown in [[QuickTime for Java: A Developer's Notebook/Getting Up and Running with QuickTime for Java#quicktimejvaadn-CHP-1-EX-5|Example 1-5]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;quicktimejvaadn-CHP-1-EX-5&amp;quot;&amp;gt;&lt;br /&gt;
'''Example 1-5. Playing an audio file from the command line'''&lt;br /&gt;
&lt;br /&gt;
 package com.oreilly.qtjnotebook.ch01;&lt;br /&gt;
   &lt;br /&gt;
 import quicktime.*;&lt;br /&gt;
 import quicktime.app.time.*;&lt;br /&gt;
 import quicktime.io.*;&lt;br /&gt;
 import quicktime.std.*;&lt;br /&gt;
 import quicktime.std.movies.*;&lt;br /&gt;
  &lt;br /&gt;
 import java.io.*;&lt;br /&gt;
   &lt;br /&gt;
 public class TrivialAudioPlayer {&lt;br /&gt;
  &lt;br /&gt;
   public static void main (String[  ] args) {&lt;br /&gt;
       if (args.length != 1) {&lt;br /&gt;
           System.out.println (&lt;br /&gt;
               &amp;quot;Usage: TrivialAudioPlayer &amp;lt;file&amp;gt;&amp;quot;);&lt;br /&gt;
           return;&lt;br /&gt;
       }&lt;br /&gt;
       try {&lt;br /&gt;
           QTSessionCheck.check( );&lt;br /&gt;
           QTFile f = new QTFile (new File(args[0]));&lt;br /&gt;
           OpenMovieFile omf = OpenMovieFile.asRead(f);&lt;br /&gt;
           Movie movie = Movie.fromFile (omf);&lt;br /&gt;
           TaskAllMovies.addMovieAndStart( );&lt;br /&gt;
           movie.start( );&lt;br /&gt;
       } catch (QTException e) {&lt;br /&gt;
           e.printStackTrace( );&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once compiled, run it with the path to an audio file as a command-line argument. Note that if you downloaded the book examples and compiled with the &amp;lt;tt&amp;gt;ant&amp;lt;/tt&amp;gt; buildfile, the classes will be in the &amp;lt;tt&amp;gt;classes&amp;lt;/tt&amp;gt; directory, so you'll need to extend your classpath into there:&lt;br /&gt;
&lt;br /&gt;
 cadamson% java -classpath classes&lt;br /&gt;
   com.oreilly.qtjnotebook.ch01.TrivialAudioPlayer&lt;br /&gt;
   ~/mp3testing/Breakaway.mp3&lt;br /&gt;
&lt;br /&gt;
=== What just happened? ===&lt;br /&gt;
&lt;br /&gt;
This application provides a bare-bones load-and-play example. After checking that there's a valid argument, it does the &amp;lt;tt&amp;gt;QTSessionCheck&amp;lt;/tt&amp;gt; from the previous task to set up the QuickTime session.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
'''Note'''&lt;br /&gt;
&lt;br /&gt;
''Any dynamic content in QuickTime is going to be a &amp;quot;movie,&amp;quot; even if it's an audio-only file, like an MP3. This program also works for AACs, WAVs, iTunes Music Store songs, and anything else QuickTime can open''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interesting part is in converting the argument to a &amp;lt;tt&amp;gt;java.io.File&amp;lt;/tt&amp;gt;, then to a &amp;lt;tt&amp;gt;quicktime.io.OpenMovieFile&amp;lt;/tt&amp;gt;, from which we can create a &amp;lt;tt&amp;gt;quicktime.std.Movie&amp;lt;/tt&amp;gt;, which represents any kind of playable QuickTime content, in this case our audio file.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;start( )&amp;lt;/tt&amp;gt; method begins playing the movie, so once the program is running, you'll hear your MP3 over your speakers or headphones. This program doesn't provide a way to stop playback, so when you want to end the program, you'll need to type &amp;lt;tt&amp;gt;'''ctrl-c'''&amp;lt;/tt&amp;gt;, use the Windows Task Manager, or hit the Quit menu item that's provided on Mac OS X.&lt;br /&gt;
&lt;br /&gt;
=== What about... ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
'''Note'''&lt;br /&gt;
&lt;br /&gt;
''There's more information on taksing in the next chapter''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...that weird &amp;lt;tt&amp;gt;TaskAllMovies&amp;lt;/tt&amp;gt; call? This is required because our program doesn't have a GUI, which ordinarily gives QTJ some cycles for decoding and playing the audio. Most of the programs in this book have on-screen GUIs, so they don't need to do this.&lt;/div&gt;</summary>
		<author><name>Docbook2Wiki</name></author>	</entry>

	</feed>