Preventing “Tasking” Problems
All the tasks in this chapter have managed to avoid one of the more obscure hazards in QuickTime. This example tempts fate and exposes the problem by playing a movie that would otherwise freeze up.
How do I do that?
Example 2-7 reprises the
command-line audio player from the first
chapter, which takes a path to a file as a command-line argument,
builds a Movie, and plays it, without getting any
kind of GUI.
Example 2-7. Playing audio from the command line
package com.oreilly.qtjnotebook.ch01;
import quicktime.*;
import quicktime.app.time.*;
import quicktime.io.*;
import quicktime.std.*;
import quicktime.std.movies.*;
import java.io.*;
public class BasicAudioPlayer {
public static void main (String[ ] args) {
if (args.length != 1) {
System.out.println (
"Usage: BasicAudioPlayer <file>");
return;
}
try {
QTSessionCheck.check( );
QTFile f = new QTFile (new File(args[0]));
OpenMovieFile omf = OpenMovieFile.asRead(f);
Movie movie = Movie.fromFile (omf);
TaskAllMovies.addMovieAndStart( );
movie.start( );
} catch (QTException e) {
e.printStackTrace( );
}
}
}Notice the line in bold. Take it out, recompile, and watch what happens. The program will likely hang or immediately exit, playing just a spurt of audio or none at all.
What just happened?
QuickTime movies need to explicitly be given CPU time to do their work: reading from disk or the network, decompressing and decoding, rendering to the screen, or playing to the speakers. This process is called “tasking.” ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access