Digital Media • 1:07:38
Learn to take advantage of web server and QuickTime interaction to customize your users' experience. We include discussions on technologies such as QuickTime embed tags, SMIL, CGI scripts, and WebObjects.
Speakers: Ian Ritchie, Jim Batson, Ron Lue-Sang, Matthew Peterson
Unlisted on Apple Developer site
Transcript
This transcript was generated using Whisper, it has known transcription errors. We are working on an improved version.
Please welcome Ian Riitchie. Well, hello everybody and welcome to WWDC. I always look forward to this conference every year. The whole QuickTime engineering team always puts a lot of effort into what we're going to be showing you. A lot of different ways to use QuickTime and also have a lot of fun with it. I'm encouraged that so many of you made it safely across the street to come over here and join us in the Civic Auditorium.
This morning when you got up, or most mornings when you get up, do you find yourself gravitating over to the computer? Turning on your browser, perhaps much to the chagrin of your wife or children, and checking out your customized news page. Mine happens to be an Excite page that tells me what I'm interested in, mostly in technology, some of the sports, the basketball playoffs, follow that. Absolutely no horoscope is on my page.
And yet my sister goes out to a web page and I think all her page is is astrology and horoscope and kittens and these type of things and Noose of the Weird. So basically what's going on in these situations is unlike the early days where I'd go out to a web page and it'd be the same thing every day I'd go back to it.
Even a few minutes after that I'd go back, it's the same. Nowadays, I can come back to some of these Like Excite or Yahoo, Microsoft, they have customized web pages that change for me every time I come there. So I'm going to go back to these sites more often because it's a better experience for me.
So, the way that you've set up your own custom pages and your preferences for your own experiences on the web, we want to show you a little bit today how to do the same thing with QuickTime so that your multimedia experience for yourself or for your clients is much more beneficial.
So I'm sure everyone here has played movies from the web. Typical response is you'll go out and click on one of the trailers or click on a page and a request is sent from your browser or from QuickTime player out to the server. Hey, I want this movie. And then it plays and everything's really good. And that's the end of that conversation.
Sometimes you'll be using CGI's and it'll go out, talk to that application, it'll send data down. So we're going to go through some of these techniques that, on the server side of things, and somewhat inside of movies, that you can-- not necessarily tricks, but techniques and the technology that's there today. So you can take advantage of it. So let's look at a typical URL. This is what you send up to the server from your machine.
and first part, let's break it down. When you're having a conversation with someone else, you always want to make sure that you're speaking the same language. So the HTTP is a protocol that we're using. and we're going to the server at apple.com so we know what machine we're going to be talking to. And then we'd also like to know what file we're requesting.
So when this happens, we get the file back and that's the end of the conversation. Here's another very common URL using a CGI. Common Gateway Interface, whatever, CGI. Okay, it's an application that's out there on the server that's going to take your request and do something with it.
So once again, HTTP is a protocol that we're using. We're going at this time, the search engine Google, or the search site, and we're asking for their Search.cgi application running on that server to respond to the parameters that we pass into them. And so it'll take that. It's just an application. It's very simple. And it will run, and then it sends us back something. Now, usually we don't know what we're going to be getting back. So let's look at a typical request for a web page.
Okay? We send out, we say, "I would like mywebpage.html." We send this information up to the server. This is what it gets. It says, "Okay. I now have this data. I'm going to send it to you. But first, let me tell you what type of data it is. This is HTML in the format of text. And then you see after the return the head and the meta name and the rest of it following down. So we know how to respond to this on the other side. Another request, we often get GIFs.
And in this case, it tells us the image is of type GIF. And so now on the client end, we know how to respond to that differently. So the idea here is that we request for something from the server, and then it responds to us, often in predictable ways and often not. Let's go through some of the requests and responses that we can get. I'd like to bring Jim Batson out. He's our chief QuickTime architect, long-time friend, and the guy leading the QuickTime effort now.
So now we're going to talk about things that relate more closely with QuickTime. So let's skip the redirect for right now and go down to some of the MIME types. Now the first two are common, just binary versions of data that will come down that you play inside QuickTime. There's video/quicktime, which says it's a QuickTime movie, please play it. Image, xQuickTime, is for image.QTI kind of files, QuickTime image format files. And there are the other ones.
We'll skip the binary ones because those are typically hard to generate from a CGI script. Okay. Instead we're going to talk about things that are more natural to CGI's. And the first one is a redirect. Okay. Where you go to one place and you jump somewhere else. And the other three are text types. There's HTML, plain text, and SMIL files. We're going to go over those individually. So let's take a quick look at what a redirect looks like.
So what will happen is you do a request, and in the head of the request you say, "I want to go some player specific. I want this file from the net." In this case it's from QuickTime.com. Let's imagine we're calling a CGI, randomMovie.cgi, and we set it the parameter genre is comedy.
And then a redirect could just come back and say, "Well, Instead of the URL you originally thought, go to this one. In this case, a movie with Laurie Anderson. So how does this happen in an HTML request? First there's the request, and in that is once again here mywebpage.html.
and what comes back is a 302 redirect which is in the header of the response. And here we can see there's the location. And it doesn't have to stay on the same webpage, excuse me, the website or server. It can go totally somewhere else. In this case, xyz.com and different file name. Okay, so we're going to show an example of redirect here.
First, I'm going to go ahead and get demo machine one. Great, thank you. Okay, I'm going to just open a URL. And I'm going to drag and drop here. And so let's look at that request. First of all, HTTP. Here's the server. and here's the CGI we're running, which just happens to be on this machine here.
And here's the parameter to that. So it sends it and redirects to this movie. We'll play it. Ian RiTchie: A leader has to be able to take responsibility without letting it turn his head. Now some fellas, when given a little authority, they seem to change. Some in one way, some in another.
Okay, so let's open that same URL again. It's time to get redirected somewhere else. I know dear, but I'm thinking of something else too. It'll take a little conspiracy. Conspiracy? A nice little conspiracy. Okay. Of course, we can just keep doing that over and over again. We'll just get another movie. This contemporary home shows how modern asbestos materials can be adapted to any style or design. Notice how the asbestos cement side walls help add dignity and charm. So back to slides please. So hopefully that was informative as well as entertaining. Back to slides please.
So let's talk a little bit about the text data that comes back in the form of HTML. So HTML is the format that you get data for a web browser. So how does that relate to QuickTime? Well, QuickTime will play inside a web browser through a web page with href tags or embed tags.
And embed tags are what you use to actually embed a movie right in the middle of your web page. So you see that all the time, right? You go to movie trailers, you play a movie, it'll come down. So the standard form of the embed tag is embed source equals, and in this case, the name of the movie, hip.move.
Okay. So what can go wrong? Well, QuickTime has to get the movie, has to get the data in order for us to actually see the movie and play it and hopefully life is all good. But unfortunately, that's not true in all cases. There are two reasons you might not get that. One is that QuickTime is not installed at all. And the second is that someone's hijacked the MIME type.
and the user's machine is not properly configured and instead of QuickTime getting the movie, video/QuickTime then goes, jumps off to some other application that can't even read that movie. So let's take a look at solving that first problem. How do you check for QuickTime on your pages? First thing you can do is you can just run some JavaScript, okay? You have to figure out what OS am I running on? So your choice is Mac or Windows. If you're on the Mac, then you need to check the browser, okay? and then if you find out you're running Netscape or IE5, then you can run some JavaScript to check for the plugin.
and then if you have plugins there, you know you've got QuickTime installed. If it's not there, QuickTime's not installed. Now in the case that it's not IE5 or some earlier version of IE, you can just assume yes on the Mac platform. Okay, because the other choice is just say, "Well, I don't know what to do." Now on Windows, slightly different situation. On Netscape, you do the same thing. You can run some JavaScript to check your plugins. It's kind of cool that the same technology works, you know, technique works for both.
But not for IE, okay? So for IE on Windows, what you have to do is until QuickTime 4.1.1, and others. You're kind of out of luck, okay, because there was no way that you could really see if QuickTime was installed. With 4.1.1, we've shipped an OCX called QuickTime Check, which you use to invoke, actually instantiate it from a VB script and call it, and that will do the checking for you, and it will return that, well, QuickTime is installed or not.
So this has answered the question, is QuickTime around at all? So the next thing you have to do is worry about, is it configured? Okay, and there really isn't a great solution in terms of making sure the machine's always configured for QuickTime, and so you can just use source equals movie. And the problem is that there's no real web etiquette for MIME-type management. What'll happen is that whoever installed last wins.
So, the solution we have is to kind of work around the problem by using a file type that you ask for, which, at this point anyway, no one else has hijacked. So that type is the .QTS file, the QTI file, excuse me. Okay, so what's happening if you look at the embed tag is that you say source equals, you know, some file name dot QTI.
Now this file doesn't actually have to be an image. It could just be zero length. It just has to exist on the server. And then QT source. In this situation then, the plugin will get it. And then with the QT source added to the embed tag, QuickTime will play that movie.
So now that you've been able to actually make sure QuickTime's going to be invoked with your embed tag, there's some interesting things you can do. There's a whole list of different kinds of things you can add to your embed tags. But one of the cool ones is Qt Next. So the first example here is it allows you to just chain movies. So you can easily put together a little page that then will play movie one, two, and three and stop.
There's all sorts of things you can do. And the second example is where you say, doing the same kind of thing, I'm going to start with an intro movie. And then I'm actually going to call CGI, which will generate a random movie. And then the special interpretation of GoTo1 will then go to reload Qt Next 1.
So what will happen then is then we'll just play the movie again. But this time, since we're using a CGI that we just showed before, you get a long playing, infinitely long playing movie inside the browser. Can we go back to, go to demo one please? So first let's look at the HTML page.
and here it is, standard kind of HTML looking. Probably a little bit light for everybody. And here it is. Here's the source. We're just using QTI to make sure that QuickTime gets a chance to play the file. And here's the real movie. It's that same CGI we were using before. And one thing to note is that width and height applies to source and QTSource.
If you're in a situation that QuickTime isn't there, the source file will try to play and in fact what will happen is you'll get a broken icon. That's why it's really important to make sure that QuickTime 4 is installed on that machine. and this will just reload Qt source. So go ahead and play that in the browser.
This is the American dream of freedom on wheels. An automotive age traveling on time-saving super highways. Futurama's free-flowing channels of concrete and steel. While metal coins are handy for dealing in small amounts of money, when transactions require larger amounts, paper money is far more practical. A five dollar bill, for example, is much easier to handle than, say, five dollars in dimes. and just imagine buying something that costs $100 and paying for it with 10,000 cents. Important information for all to keep in mind. Back to slides please.
So let's go back to some of the other types that we talked about that are really applicable to CGI's because they're textual in nature. And the next one is and other engineers are also involved in the development of QuickTime. The content is very simple. You just need to create a text file and it will be uploaded to QuickTime.
The text can be styled, color and size, and other interesting things. Ian is the master of all text movies. Remember a few years ago I met a bunch of developers at a conference and they said, "Oh, you work on QuickTime! That's cool!" Oh, text, huh? Well, someone has to.
And I try to feel good about myself. Actually, there's an awful lot of text in everything that we're doing with the internet these days. So there's almost a resurgence of text inside of QuickTime. And some of the stuff has been laying dormant there that you can take advantage of. Let's show first a simple text file with simple text. And let's open up QuickTime Player and import this file.
And typically what you get is the 12-point Helvetica text. You can go from one slide to the next. And typically we used it for closed captioning or for subtitling your text. But you can go in and add a lot more to the text. Up here it's a little bit complicated, but you can create your simple text file and export it with the text descriptor settings and all this will play out for you.
And we also have a web page up that will show you how to use all the text descriptors. But the idea is I took that same text that we had and we went in here and we added different sizes, like we can make this one, you know, We also include a lot of different ways to customize your web server.
We can make it all red. So then when we take this file and import it into QuickTime again, It just takes on the attributes of whatever you put inside the text file. The great thing is your CGI's can automatically generate text real easy and in this format and pass it down into QuickTime. And it can be embedded as data or it can be tagged as of type move. And we'll just play it automatically as though it's a movie. You'll see more on this later being used in the WebObjects demo. Each one of these have URLs.
[Transcript missing]
Okay, now we're going to move on to SMIL files. The other type of file that will come down for you that's really useful in the context of CGI's and server-side stuff is SMIL. SMIL allows you to create presentations where you can Compose the temporal data, so you can play movie after movie or image after image or layout audio tracks in any order that you want.
And also spatially for image related things. So let's take a quick look at the structure of a SMIL file. If you know anything about HTML, this looks pretty familiar. SMIL is XML based and thus has pretty related to HTML. So you see there's a head and a body inside of a SMIL document.
and typically in a head you'll have a layout area which describes the presentation area. If there's no visual aspect of it, you don't need to have a layout area. But there's a root layout which defines the complete enclosing area. and then you have to define regions inside that root layout that you have images or videos play into. And so what you can do is you can have one root layout and create a bunch of different regions and then play into them.
Now, inside the body portion is where you say what media you're going to play. Okay? And... In this case, we have a couple of videos that are playing in sequence. The default in the body section is that this is sequential playback. So first, intro.move will play, then main.move will play.
So that's an implicit sequential block. If you want to make it explicit, you just add the seek tags. and once you have this section of Seq that becomes like its own block. That will become evident later. Now, if you want to do something where you do things in parallel, use the pair tags. Here we have an image, the picture.jpg, that's being displayed at the same time we're playing audio.
And instead of using image or audio, you could put in a block of sequence, of a sequential section and just play another sequence of stuff. So we're going to go to demo and do a quick example of SMIL.
[Transcript missing]
Let's go back to the full-blown thing here before, and we'll take a look at this. There's a lot of these extension tags we'll talk about in a minute. Here's the layout information in the head section. We're using a meta tag here to give it a name. And we just have one region for an image, and here's the image down here.
We have a sequence of audio tracks, and then in parallel we're going to show an image. I want to do is save it, go back out, drop it on QuickTime Player, and here we have basically an album cover with the tracks in there, and we can use the chapter tracks to go between the tracks.
So there's... go back to slides, please. Now, there's the basic layout of... Ordering your media and putting it on the screen and also just in time. QuickTime's added some extensions to SMIL, which we find really useful for doing QuickTime presentations. And how that gets expressed in the SMIL document is in the SMIL tag at the top is you have this XMLNS, which means XML namespace, and you're saying, giving it a name. Here it's QT.
And then you have this URL which then specifies that extension uniquely across different presentations between any SMIL file. Now the QT is something that you get to make up. I conventionally just always just use QT, but you can make that foo. And then when you use that down below, like for the autoplay, instead of saying QT:autoplay, it could be foo:autoplay.
What are some of these extensions? There are some attributes that apply to the root, which is to the whole presentation. There's autoplay, which says when I open the movie, as soon as you can, start playing it. There's next, which is just like QTnext that we saw in the embed tags for HTML pages.
There's timeslider, which lets you control whether to use the timeslider, because sometimes, depending on the kind of presentation you put together with the SMILE file, you see in the time slider, it's very confusing, it's very erratic, and so you just don't even want to see that. The things that we've shown today, they make sense, you can see the timeslider, but sometimes they don't.
And there's chapter mode that says, when you give me a timeslider, give me something which is for the whole movie, or only show me the slider for when I'm inside this chapter. So I'll see when I'm at the beginning and end of the chapter. When I go to the next chapter, I'll see when I'm at the beginning and end of the chapter. I'd go back to the beginning of the time slider.
There's also media attributes that you can set, which you can have are AttachTimeBase and Chapter. AttachTimeBase is used when you have something like a sprite movie or a wired action movie that you don't want a time base attached to it, okay, because then it'll just confuse the movie.
And there's also Chapter, which allows you to define what the chapter name is, and that's how the popup, not the popup, but the chapter names work in the controller in the previous example. You can also do anchor tags so that you can click on an area and then you'll jump to a URL.
And the other very useful one is a target of QuickTime Player. That way, wherever this movie is played, if it's in the browser or your email app or whatever, if you then click on it and then you launch, go to URL, it'll open it in the QuickTime Player. Okay, we'll show this a little bit more in SMIL.
Here's an example which actually defines three different regions. and puts in, so we have left half, right top quarter, right bottom quarter, and then it's using href tags. And this is all shown in parallel. So,
[Transcript missing]
and David Dornan are also on the panel. Thank you. Here's a SMIL file that does something you might not expect. But this is an example where it kind of Paul S. The Small File is actually just laying out two movies. This bottom portion of the movie is a wired action movie.
Look on the button and things change. Notice that every time I get to play, a new movie comes up. So that's actually using that redirect technique by going to the CGI and saying, give me the next movie. And let's play-- You can increase your profit. You can bring many potential customers into your store. You can add dollars to your volume.
The interesting thing with this guy is that we've got these thumbs up, thumbs down buttons. So you can say, "Oh, I like that movie." will then send another request of that same CGI, which will then tell us How many other people like the movie? Okay. And this is actually coming back in a SMIL form with some embedded text which gives us some formatting capabilities and some colorization of the text. Okay. So we can go to the next one.
Okay, so we'll go ahead and click here. And you can see that it's live by, well, we're the only one that watched it. So let's pretend we liked it this time. So we just click here. And it loads it again. It just changed. OK. Back to slides. And I think it's time for Ian. Thank you, Jim.
As you've noticed over the last few years, in particular in this session, QuickTime has taken a lot of steps to take advantage of people being connected to the web. Here at WWDC, the WebObjects team has, I believe, 18 different sessions going on. And we are lucky to snag one of their engineers to come show us how they've have written some SMIL export components and tied it in with WebObjects and interact with QuickTime.
And there'll be more of this shown in tomorrow's interactivity session, but we ask them to come give us a glimpse here. So if you could welcome Ron Lu-Saang, WebObjects engineer. Thanks, Ian. So I started off with WebObjects and wanted to hook it up to QuickTime using SMIL. So I wrote a simple little framework, semi-simple, that actually brings all the power of WebObjects and all the power of QuickTime together using SMIL.
So putting them together, we have what I call client-server movies. So what I want to show you is how I got WebObjects talking to QuickTime without necessarily using any SMIL, but generating QuickTime compatible content. Some of the QT text stuff that was shown earlier. And the point of this was to actually bring some interactivity to the client just by making the movies dynamic and talk to the server. Whereas the WebObjects and SMIL stuff that I did was kind of geared towards generating the movie dynamically versus having dynamic movies. Two different things in my mind.
So let me show you on demo one here. My idea of making movies dynamic. Let's see if I can get this up. So I've got Live Stage Pro here. demo version of Live Stage, and got a movie track and a sprite track. If you can see here, there's a little icon here. That's the actual sprite.
The whole, the sole purpose of the sprite is to go out to the net and load a movie. The URL that it goes to, actually, is the URL of a WebObjects app that I've got.
[Transcript missing]
[Transcript missing]
If I can show you this. I have my app running here. What should happen is that the app But isn't happening. Hello. Well, okay. What should happen is that each time you click you bring up a new movie. It's similar to what was shown before, but talking directly to WebObjects. Demo errors. Oh well.
Okay, back with the slides though. I can, so that's, what should have happened there was every time you click, it goes out to the WebObjects application. The specific URL that the sprite action, the sprite invokes, or goes to, is a trigger to WebObjects to go into the database, look for all of the movies with a certain genre, and then, oh, okay, back up a little. So I've got a small database here where I put in some information about some QuickTime movies that I've got on a streaming server.
So things like the title, the artist, duration of the movie, and URL on the streaming server to go to. Could I have the slides back up, please? So what WebObjects will do, that URL triggers some logic to go through the database, find all of the movies that are pop rock music videos, and deliver one of those movies at random back to the QuickTime engine in live stage.
Let's see. So for dynamic movies, my idea is that the user asks for the resources and talks to the server, versus dynamically making movies, creating movies dynamically on the fly, where the layout of the movie, the resources of the movie change depending on some state, either user defined or something in your business logic, in the database, time of day, you know, shades of the moon, all that stuff.
So back on demo one, and demo, actually demo four please. Thank you. So this is my WebObjects application.
[Transcript missing]
So, how many of you are familiar with WebObjects actually? Oh, good. Very cool. Have you guys tried connecting QuickTime and WebObjects before? How many? Ah, very cool. You're on the right track. Very good.
So... So what I've done in my framework, I've got some code and some resources that actually implements a lot of the elements in the SMIL spec. A lot of the classes, the root layout, regions, media elements of the media objects. And what this lets you do is build a WebObjects application, include this framework in your web app, and you're able to layout SMIL documents using our very cool WebObjects builder. So here's a video page I've got.
It's already up. Now, the unfortunate thing is, because WebObjects was kind of, and WebObjects Builder is kind of geared more towards, originally geared towards developing web pages, the UI for XML isn't that great. But you can see here all of the elements that go into my SMILE movie.
What happens is a lot of these elements are bound at runtime to things in your business logic on the app server side. Here I can figure out the artist and title from the database, what the next song is, and then I can You get a lot of this stuff for free with WebObjects, whereas you could do it in CGI's normally.
You get things like session management for free using WebObjects. You get things like resource management, connections to the databases for free, being able to tie in a lot of really advanced technologies into the cool QuickTime technology that we've got. Let's see if I can have the slides. Thank you.
There we go. So that's the whole point of trying to use WebObjects to generate SMIL content for QuickTime, using WebObjects as your server side scripting solution. I'll actually have the framework and a working example up on enterprise.apple.com/wwdc2000 about Thursday. I've actually got another session, a WebObjects specific session, session 4.11, if anyone's interested, for going further into detail at how WebObjects is doing all this stuff and larger examples of using QuickTime with WebObjects.
And plus, because WebObjects is now on sale for 98% off, there's no reason to not try it out. You should go out and you've all got demo versions of WebObjects, and once you pick up my framework, you should be able to try this out. I think you'll be very happy with it. With that, I'll hand it over. Thank you. Thank you, John. Excellent. So when you think about it, 98% off. We're all going to rush out and buy one right now. Just think of the gentleman that bought it Friday.
[Transcript missing]
sure they'll figure it out. So some of us here in the QuickTime group have written our, in fact Kevin Calhoun wrote a CGI with HyperCard, which is, so you, you know, some things that you can do today with very, I wouldn't say basic tools, it's actually pretty extensive. But a long time friend, I guess, is how you think of HyperCard. And so you can see that tomorrow in the interactivity session. We'll show slides afterwards for the road map.
A lot of excellent things that people are doing with Smile and using QuickTime. So we look forward to that. And get it in the hands of you guys, because we thought, you know, in the, in the QuickTime group, we sort of looked at it as, you know, we thought, you know, Not the rogue group, but sort of that connotation within Apple, that you go out and do your own thing and you're thinking out of the box. And, you know, we thought we were a bunch of crazy and somewhat, sometimes clever individuals. And then we come across a gentleman that's more crazy and more of a lunatic than any of the rest of us on the team.
This guy just takes QuickTime to the next level. We go, "Man, you're just insane. I mean, it's great, brilliant, wonderful." Definitely thinking out of the box. And this individual is Matthew Peterson, a neuroscientist from Berkeley. And we'd like to welcome him now to show us some things he's been working on.
It's pretty bright out here. I'm going to get a suntan on the back of my neck. Apple. So I'm going to be talking about QuickTime applications. So I'm not going to be comparing QuickTime to Reel or Windows Media Player. It's more on the same par as Java and what you can do with Shockwave. And mostly what I'm going to be showing you is just a bunch of demos.
So what is a QuickTime application? Well, here, the quintessential desktop accessory is a calculator. So this is all a QuickTime movie.
[Transcript missing]
This top, today's topic is how to interact with the server. How does QuickTime movies interact with the server? So this doesn't really interact with the server. But I'm going to, oh here's another little application. It's a little URL launcher. So let me launch up a web page.
and So this is coming off of France. So maybe it's a little bit slow. Are you still there? Okay, good. So this right here is a little clock. And how does this clock interact with the server? Well, I can set the alarm. And if I close the movie and I reopen it, should remember my setting.
So it saved this into a little cookie. There's a lot of ways that you can have a information in the movie saved. Either it can be saved on the server, saved locally in a cookie file, or it can, there's, you can actually, there's ways to save things on little text files on the local drive. And I'm going to be getting a little bit more into that.
One other way to pass information to a movie is what I'm going to show you in here. There's not very many ways to communicate with a movie, but one way is you can just have the server send you a little movie. So in this one, this little thing right here, this is a movie that contains a bunch of sounds for each number. And when I type in a number here, Can we increase the volume for that? Did you hear that? I don't think the volume is working here, so let me enter a number.
and So this right here is this text field. This is an HTML text field. And then when I type in a number right here, It requests a small movie to be sent and that movie passes information to this top movie which is a bigger movie and contains all of the sounds and also the logic to put the sounds together to speak out this movie. This is something a little bit more-- so this is used in conjunction with this next thing I'm going to show you.
This right here is data coming from my lab in UC Berkeley. It's being passed into the movie. In the other demo I just showed you, the movie was being passed into a little frame. You can make that invisible frame, but I let you see a little blip of the QuickTime loading. In this one, data is being passed directly into the movie, into a movie track.
The server just keeps on passing data into that movie track. That data gets sent off to a local sprite track, which calculates the height of bars, and it puts those bars up on this graph. In this way, I can monitor an experiment from anywhere in the world. In fact, I can also turn off the CO2 in my experiment, and you can watch the change of that. Instead of plotting temperature, I can change plot pulse rate. I can change the humidity and the stroke. This is all a movie. This is just a QuickTime movie, and it can run anywhere a QuickTime movie can run.
Next thing I'd like to show you is all these things are little applications, and a lot of you maybe aren't interested in having QuickTime work as an application. But you are interested in having QuickTime show movies, which is what it was originally intended to do. And why would you want to have all these application features in just a normal movie? Well, what I'm going to show you here is something I developed with iFilm. This movie is an intelligent movie. You haven't purchased this movie yet, so it knows that. As soon as you launch this movie, it says, "Do you want to watch the preview?" which it allows you to watch.
would you like to purchase the movie? So let's purchase the movie. It goes off to a web page and I hope this is a little bit quicker this time. Maybe not. So right, it's usually faster. So right now it's launching a URL on my site and it's going to give you a web, a form to enter in your credit card information. Let me take out my wallet real quick.
and you can purchase this movie. And in fact, the other movie doesn't even have to be open in order for me to purchase the movie. Let me enter my name real quick. Purchased it. And now my movie has been purchased, and now this machine will be enabled to watch this movie.
www.iitc.com/serviced-services This is putting application into just a... so it gives you a DVD-style movie and it talks with the server, says, "Is this computer enabled to watch this movie?" And therefore, we've implemented pay-per-view downloads all within the QuickTime applications, all within the QuickTime framework. We don't have to invent any new media type or any new methods like Microsoft is doing. All... QuickTime already has the ability to do all that.
It's got all this wired sprites and the ability to talk to servers, and you can build custom, novel applications that other people haven't built before. Um, here is something where a movie actually returns something to the user. So that one, the server was talking to the... to the... the movie was talking to the server to see if this computer is allowed to watch a certain movie. And what I'm gonna show you right now is the server is going to return a file to the user based on what the user does. So here, this is a simple drawing program.
Just make a little interesting drawing. How's that? I'm not an artist. There you go. And then when I click on this PDF button, it should load-- oh, save file. And it just saved the files from my disk. And that was the drawing that I just... Oh. Launch Code Warrior. Sorry about that. And there's my drawing.
Now, a drawing is, yeah, sure, there's a lot of things that can make drawings, and, well, not that many that can write PDF files unless you have a distiller on it, but there are lots of drawing applications. Why would you want to have QuickTime do your drawing? Well, you don't have to do a drawing. You could design, like, a T-shirt and use, the person says, "Oh, I want my logo here, and I want this here," or greeting cards.
They want to have, like, business cards made up, and they said, "I want my logo here, I want my name here," and they can do all that within a QuickTime, um, within a QuickTime movie, and say, "Click this, I want that," and they can send you back a PDF, say, "Is this what you want?" You say, "Yes," and they produce it and send it to you. So there's a lot of e-commerce applications for this. Um, basically, a movie can send something to the server, and the server can send you back a file, and that opens a lot of doors.
But why would you want QuickTime to do that? Well, QuickTime has a unique property that is, I'm going to make a new word that I coined last year, is ploppable. It's the most ploppable thing I've ever seen. You can take a movie, you can stick it into a PDF file, you can stick it into a word processing file, you can stick it into a web page, you can stick it in all these places. You can't stick a Java application inside of a PDF, or maybe you can, but not at a standard Acrobat reader, you can't stick Java in a PDF file.
You definitely can't stick Reel in Windows Media Player, and you can't stick many applications. So here's an example of using my drawing program in a real world situation. Let's see, where is that? In this application I'm using at UC Berkeley, I'm a neuro...
[Transcript missing]
Okay, where are we now? Looks like I'm going fast. That's okay. So, I'm gonna get, okay, another place you can put a QuickTime movie is in a PDF file. Here's a PDF file from my friend, Joe Nowak, who will be entering the demo in a little bit. And he said, "Okay, I got your Lego robot ready." Everyone knows what these Lego Mindstorm robots are, right? Who has -- how many people here have one of these? Okay, cool. You'll like the demo coming up. So he says, "I got it, and when you're giving this talk, just page me. And to page me, just click on this button." And here's a little QuickTime type in a thing, so... RoboTime.
And I just hit Enter, and it says, "Oop, page set." And so this is a simple little application that talks to the server, and basically it's using a little, um, email module that I have that I use with QuickTime. So you can actually make a whole QuickTime -- I mean, email client in QuickTime if you want. But here, this is just a little pager.
You don't have -- that person can send you a, um -- like, a technician can send you, like, little technical specs on something and say, "If these aren't right, just page me and tell me what -- or, like, just page me and tell me what your phone number is," or something like this, and put that into a PDF file, put that into a word processing file, or into the email client. They don't have to give you their pager number.
Um, and also, I can have it so that it only works once. So you have one time to page me, and that's it. And then never -- leave me alone. Um... So you're saying, OK, you can have a movie talk to a server, and you can have a server talk back to a movie.
Can't we have interactive games in QuickTime? Two people on different QuickTime movies both talking to the servers, servers talking and telling you what each other are doing. And sure, you can do that. So here is a, this is not a game, but this is a little chat program that I made completely done in QuickTime. See how many people are on this chat.
Nine people. Joe, see there's RCX Joe. He's sitting on there waiting for me to come see what... Bruce Brunser didn't have much to say. So how is this useful? Well, again, instead of putting a pdf, putting a pager inside of a pdf document,
[Transcript missing]
So, you can put a chat client in a PDF thing, or you can put a chat client within a movie, within a streaming movie, a live streaming movie.
You can have, MTV could have this new band replacing NSYNC, and they're going to have this new live video, and you can talk to them while they're performing the video or whatever. I guess they don't perform videos, but...
[Transcript missing]
I'm about to show you here. It's going to blow your minds if you guys like LEGOs like I do. So what I've made right here is a, well, I don't have the whole interface here for you, but what we've made is a complete LEGO programming interface all within QuickTime.
Many of you know that when LEGO decided to come out with their fancy Mindstorms, Robot, they said, "Oh, we'll just make it PC only." And they came out with a Windows version of this LEGO thing, and OnNOTCD didn't have any Mac version, which made me mad since I was one of the first people to get one and I don't have a Windows machine. I said, "I can't program my LEGOs." So I built a QuickTime LEGO programmer. And it has all the same functions.
and it's a little buggy so I didn't put the whole thing but I have two pre-built movies. Very simple, I didn't want anything to go wrong so I just have to go forward, on, turn the motor on, wait for a little while and turn off. There's the first movie, let's try it. Okay, let's see. Program 1. Here it goes, loading. Run.
Oh, there it goes. Okay. It took a couple seconds. Maybe... Oh, Bill Gates! Wait, what's he doing there? Okay. He says now he's sad because now Mac people can play with robots remotely. I have to tell you that this streaming server is coming from Chicago. My friend Joe is in Chicago and he helped me set this up.
And this robot is also in Chicago obviously. So let's run that program again. It was a little bit faster. So this shows that the program downloaded and it should get executed. So there's, who's that, Janet Reno? And now let's go the other reverse direction. Program 2, it says turn the motors to reverse.
On, wait. and TurnOff. Go back again to Bill Gates. OK. So, basically... and So basically this is what I had to show you. And I hope that opens your minds a little bit about what QuickTime can do and the possibilities and how you might want to use QuickTime in ways that you haven't thought of before. And it can talk to a server. And it does it in a most awesome way.
We didn't let you down, did we? The guy's incredible. And on behalf of at least four QuickTime engineers, myself included, we ran out and bought the LEGO Mindstorms when it first came out, and we also have the boxes sitting around our offices going, "Okay, now what?" So that's -- thank you, Matthew.
So, to recap, a lot of what we discussed today you can find in Steve Gooley's book QuickTime for the Web. I'm usually not a salesman pushing this, but this is like a great book. I have a torn up copy in my office that was before it went to press and all kind of pages all over. It's QuickTime for the Web, and this is just out. And it comes with CD and examples in the back. It's just wonderful. I highly recommend it.
So, a few more QuickTime sessions coming up later this afternoon and tomorrow morning. There's actually another one tomorrow afternoon. WebObjects, like I said, every day, all day, in Hall J.
[Transcript missing]