WWDC1997 Session 308

Transcript

Kind: captions
Language: en
good afternoon my name is Peter hottie
this is over here is Kevin Calhoun which
is somebody moved my slide yeah gay
Kevin welcome to the quick time future
session also known as hyper card session
I should start off by saying quick time
has many many different facets and the
future quick time is going in lots and
lots of different directions of course
we're going to keep working on all the
stuff that you know and love about quick
time but every once in a while we need
to add some sort of new features to it
that just sort of twist the idea of what
quick time is just a little bit further
than we have before
we showed you a little bit about quick
time interactive and what we're doing
with HyperCard last year we're still on
target with that plan our dates keep
sliding around but we still think it's a
great idea
and what we're going to do during this
session is really concentrate on the
interactive future of quick time
technology we call quick time
interactive and how that fits together
with a number of different tools quick
time interactive the most important
thing to remember is it's adjusted quick
time it's just building on the idea of a
platform for delivering media click time
has always been a great container for
putting media and as you've seen we can
really add some complicated behaviors
for that media even today with QuickTime
two-five and QuickTime 3 Oh with the
ability to animate things to have
special effects just all kinds of things
going on
QuickTime Interactive will add one more
element to that which is behaviors so
it's really a pretty at some level it's
a very simple addition and yet the
implications are really profound because
QuickTime has all this great multimedia
technology built into it all the
different aspects of the QuickTime media
layer we get to take advantage of all of
those in QuickTime Interactive and
because quick times always been modular
and open you'll be able to plug into
everything you're seeing here today to
enhance it in all sorts of different
ways so you'll remember one of the
things that made HyperCard great was
that you could plug in your own X
commands your own X objects the
QuickTime interactive you'll be able to
plug in all kinds of different things
much richer set of functionality with a
much tighter level of integration
we use the same file format HyperCard is
now just a quicktime movie editor it's a
little bit strange but i HyperCard stack
is just a quicktime moving you're seeing
a little bit more of that the same api's
you know and love-- still work there's
some new ones of course I'm the only
thing we really need you to be able to
do that was different with the movie is
feed events to it we needed to be able
to give it mouse click so that when you
click on it it would know to respond and
so forth
fortunately we have some experience
doing this already in the media layer
with QuickTime VR which is another
example of a mildly interactive
QuickTime movie we're just taking it one
step further of course we have really
fantastic services in QuickTime to do
all sorts of things you need in
interactive media we have really great
timing services as you saw we have
special effects and transitions we have
built into QuickTime 300 over 130
different transitions it's more than
most multimedia packages have animation
facilities sprites music so forth so a
really rich environment to build on now
one of the things that people always
sort of comment on if these
demonstrations of Apple technology is
well you know how are you going to get
people to adopt this it's great if Apple
shows the tools it's working on but you
know it can't just be an Apple only
solution and you said it's open well how
open is it as you know we showed this
technology last year there were a bunch
of you in the audience who saw what we
were doing and said you wanted to get
involved even though you know it looked
like it was a little early one of those
people was a company in Israel that
makes a product called quick works it's
a little it's a multimedia authoring
tool with a really fantastic user
interface that fits very nicely into the
QuickTime interactive model so we've
been working together with the tango
with a engineer there by the name of
Reuben Sherwin and rather than starting
out by showing you what we had Apple are
able to do with QuickTime interactive
what I'd like to do is invite Ruben up
to show you for a little bit here
exactly what he's able to accomplish
with QuickTime interactive and what his
tool can do with it
Ruben thank you
well I've heard it's right they never
know what they mean and okay so Peter
gave me a great introduction so so I'll
just start with some demo and it's a
good practice to start with it then I'll
show you some cook time interactive
which we've pre created from click works
[Music]
[Applause]
okay what you've just seen is not only a
QuickTime movie
it's a Heinlein's interactive promo
we've prepared in click worth fully
interactive it responded to my mouse
interactions and obviously to launching
it and it's behavior was fully
controlled by whatever I did at the
tango we consider clip work and right
click what's actually to be a very good
authoring tool very easy to author and
last year when we saw a custom
interactive itself there the concepts
include some interactive map very easily
and very comfortably into the concepts
we have in click works so let's just go
through some demo I've prepared we'll
build some simple demo and click work
and we've written worked in click works
is a extensible application it once and
a lot create extensions to it and pickle
applause and we've created such an
extension which exports our internal
format in to put some interactive and
click works is very easily in lets you
very easily author media base in
interactive and multimedia base the
files part okay so I'll just open the
first thing I prepared here we'll get
rid of some of the pallets to begin with
okay we'll pick some background image
button in the background you can see it
here will take a move into this box as
you can see down here I have my media
pallet so all media that I add to the
movie is immediately added into that
media pallet we can control some of the
aspects of the media here so we'll do
that in order to achieve the nicer
performance will control for example
this BMW movie or requested to play
directly to screen as well as there the
our movie I just drag
okay so we have here one thing we just
finished the layout for it let's add
some interactivities I'll open our
events palette which lets you with no
programming only pop-up menus do
whatever it is you want to do so I'll
select the background block and I'll say
as you click you'll release the mouse
mouse up then you go to the second
screen which I prepared I'll select this
BMW movie and I'll say that I'm mouse up
or start playing it start playing myself
actually I'll toggle it if that movie is
not currently playing is not playing
then start myself else and myself and
the VR movie will request it to have a
controller visible in order to control
the VR movie with a standard movie
controller and let's not move on to the
second screen and put some interactivity
we have already the background from
before since we have some template
mechanism which in which case when you
alter one scene you have the other
scenes inherited interactivity will
place in a nice blend in the background
of one of the boxes here and I'll want
to bring some media from the web so what
I'll do is I'll open our web link
extension this lets you offer web CDs
file presentations I'll copy some URL we
prepared previously I'll paste it into
the screen and you can see it pops into
the box that's all we'll do for this box
and again once one click the background
box now stop then we'll go to the third
screen we've prepared and in the third
screen going there we'll take one of our
transitions were actually will take a
random transition I don't know I don't
want to know what your transition will
actually have okay we'll move on to the
third screen and the third screen will
again have some nice blends in the
background in here we'll add some text
to this and we'll set the need there so
we'll set the attributes of the text so
and select the text will change it to be
something more visible so one can read
it from the background from the back
okay and let's add there's a
text-to-speech object in the equip them
interactive but we'll say that as the
mouse enters this box then speak with
the good old roll wherever he might be
hiding there you go start speaking
myself again and as a mouse leave this
box we'll stop speaking Rolfe actually
myself and once we click in the
background box let's see some more
transitions now stop then go back simply
to wherever it is we're saying from this
time I want to know I like the dissolve
transition so we'll select the dissolve
transition okay basically this is all
I've authored this is our internal
format and all that's left to do is
actually export this as a custom
interactive movie and the export process
started what this does now is moves over
the iterates the clips internal file
format it reads the geometry the layout
of the movie of our presentation and
translate that into quick and
interactive object and then the look and
feel the pictures it plugs in the movies
that they are plugged in and then the
interactivity we concatenate pieces of
code that's that represent our inter
activities in the QuickTime interactive
format and compile them there's a built
in compiler in QuickTime Interactive
which lets you compile high-level style
code into quick QuickTime low-level
style code and we're finished we open
this movie where here it is it will
launch the standard movie player which
was actually launched from the last time
where I show the promo
promo which was already good time okay
so we see basically the exact same
looking feel we have the movie
controller here we can navigate this VR
movie we can zoom in and zoom out
anything standard for your movie does
first click on this movie starts playing
it
and the next click stock stops playing
it actually set the curses if they did
that too fast for you to see I'm sorry I
forgot all about that
but you can see we have different
cursors for this box we have the
standard VR in this box we have the some
blueish cursor here we have the hand
cursor
next click moves on to the second scene
and you can see the text you haven't
seen before this this was brought up
from an HTTP server you can also
download FTP and do some information I
wanted to provide about why we actually
did this effort we have our own runtime
environment for Macintosh and PC but
once we combine click works and put them
interactive it provides us a very easy
way to deliver click works titles over
the web in basically any web browser or
whatever other application that supports
a good time at let us export clip books
titles to a state of the art or so we
say multi need a standard solution
QuickTime which we all know and love by
now and we sometimes as a multimedia
develop right until it sometimes you get
heat for not being fast enough not being
good enough well it's not my problem
anymore I did this QuickTime movie now
peter has to run it fast
[Music]
he does I mean not only Peter I mean
this is the next part if we harness the
ease of use the fast powerful multimedia
authoring of click words and we made it
to be the first third-party tool for a
QuickTime interactive and actually I'd
like to take this chance to take this to
thank the QuickTime team for all the
help they gave me except for the
developers specifically and especially
I'd like to thank David Burnham who
saved my disk from crashing last Friday
and as I move onto the next thing to see
one of these transitions you moved on
and as the mouse enters always listen to
experts they will tell you what can be
done and why then do it and obviously
when we make often a crowd starter next
time I click we go back and another I
think one of the nicest renditions of
this ugly found Audi very nice and thank
you so
basically very fast to do all together I
say three to four man programmers nights
a week weeks of programmers a nice I'm
sorry and we'll expect to have this
working shipping by the time cook time
interacted with working in shipping
thank you very much thanks ring so I
think I just want to point out a couple
things from what you've just seen one of
the things that was always requested of
hypercard was for other applications to
be able to create hypercard stacks
please publish the format please support
that well Reuven is the first
third-party application to do that in
the supported way because I told you
hypercard is just a movie editor so
that's kind of neat also we could open
the same project that was just made and
continue to do scripting and add other
elements using hyper card or other tools
the other thing that Rueben showed you
which I can't believe he got through in
the time he did was about a thousand
different features of the runtime
including things like text-to-speech
transitions the ability to pull in data
live from the internet you even went out
there and pulled text and directly from
the internet and so there's just all
kinds of different capabilities in here
as well as great video and VR support
which you'd expect with that I'm going
to do is turn this over to Kevin Calhoun
is going to guide you through the rest
of this presentation and a deeper look
at what QuickTime Interactive is I guess
known as QuickTime for Oh sometimes
hyper pardon some other tools as well
Kevin
okay Peter mentioned that nothing has
essentially changed in the quick time
model in order to support interactivity
that's really true the abstractions that
you use to describe movies movies tracks
and samples in QuickTime are still valid
for a QuickTime Interactive in a video
track in a QuickTime movie that you're
probably most familiar with if you go to
a particular time in the movie collect I
needs to do is to fetch a sample which
is essentially a bunch of bits that are
compressed on disk that have to be
uncompressed and rendered that's a video
sample in the case of an audio track
what it is is at a particular time
there'll be a sample that represents a
waveform that needs to be played in the
case of QuickTime Interactive there's a
new type of track it's called an
interactivity track or container track
and samples of those tracks contain
trees of objects that are instantiated
and they can display content and
interact with the user we'll be talking
about these qti objects and what they
can do essentially when you saw Reubens
demo you saw a movie controller object
playing a video movie you saw a VR
object playing the VR movie and you saw
a text-to-speech object or you heard
effective speech
object reading some text there are lots
of teach eye objects in the system and
the system is open to yours as well
these objects can communicate with each
other and they can respond to user
interaction by means of messages and
actually there's a complete messaging
system built into qti so objects can be
told when the user clicks on them or so
that one object until another object to
redraw itself or something like that
we'll be talking about messages and
message handlers which is another way
for you extend quick time interactive
these objects where you probably want to
sequence their behavior and play back
their behavior very good ways to
describe sequence of behavior have
already been invented
they're called programming languages or
scripting languages there's complete
support for any number of languages in
qti as well you can plug in compilers or
you can plug in compilers and
essentially executives or interpreters
that run the compiled form we'll talk
about that in a moment finally another
area in which qti is open is that you
probably want to get data into
system you want objects to be able to
display images etc different kinds of
import are possible and you can write
your own importers finally Reuben and
the Peter have both mentioned that it's
possible to pull data live off the
internet any kind of data access is
possible in qti by URL via alias in
memory or any other forum that can be
defined and supported in a protocol or
in any way to resolve references I'll
show you a way to plug in a reference
into qti okay so let's take a deeper
look at all of this working together I'd
like to introduce Ron Peters of the
quick time team Ron is going to come up
and show you some objects wired together
CGI objects wire together in QT I make
[Applause]
alright if any of you we're at the quick
time keynote yesterday morning you might
have seen a couple of movies a Martian
shooting and running and George of the
jungle where a slider and a controller
were controlling the rate and speed of
the movie and so today I'm going to show
you how easy it is to do that kind of
thing in in qti with a minimal amount of
code going to use an application we use
in-house called QT I make which is
basically like a cross between movie
player' dumpster and rez edit for qti
movies but may not have the prettiest
user interface but at least it does
allow you access to just about all the
qti features so I'll just make a new QT
iMovie and I can even find my media
I'll drop in the George of the jungle
movie and a knob so the first thing
about Katie I make is that it allows you
access to things like message handlers
for an object so all the code that's
attached to the object as well the
properties which brings you up an
inspector for all the different
properties of an object and as well as
the resources now the resources are a
list of assets for that object so you
can see here are the different knob
positions for that knob and it's pretty
much like the resource manager which
means you can put any kind of data you
want into the resource map and it will
travel with the object and the data can
be completely internal to the object or
can be externally referenced like file
alias or anything like that any of the
data reference mechanisms that QuickTime
supports so when I pull up the inspector
on actually I'll pull up the hierarchy
so here you can see the movie object the
qchat container track and all of its
children so the background picture in
the movie so just to show you that all
this is really going on live I'll grab
the rate property of the movie and start
it playing in a bird now you can control
the door to the jungle and while I'm
here I'll set the looping property of it
as well so to connect I want to connect
the knob to control the speed of the
movie the rate of the movie dynamically
so I'll just grab the rate property of
the movie drop into the patch Bay then
grab the control value of the knob
connect the two and now very simple in
very little code
I've dynamically hooked together there
we go
I've dynamically hooked together the
properties of the objects and spirit
it's very simple but it's not quite good
enough I've got it stopped and I've got
it going full speed what if I want to
shuttle where on one end goes fast
rewind on the other end goes
fast-forward and there's a gradient in
between patch beam mechanism allows you
to do range mapping so I can take the
fact that the knob goes from zero to one
and translate those values from say
negative 3 to 3 and Qt I will do that
range mapping for you dynamically and
leave and convert between data types so
do it from fix to float so now when I
grab this light
[Music]
and patches can also be bi-directional
so I can connect multiple sliders
together and they can control each other
and we also do make sure that if you do
have a cyclic loop we don't go into an
infinite loop it'll stop and do the
right thing so that's a patch beam
mechanism and it's it's very simple page
of code thank you very much thanks Ron
yes we the difference definitely okay
help me with my slides I'd like to
introduce Chris flick who works on the
equip time interactive runtime Chris is
going to come up and help us step
through these slides while I stand back
here in case the thing blows up all of
you behind the desk you'll be out there
okay we talked about the architecture of
qti we did a quick demo
I'd like to dig a little bit deeper on
the subject of qti objects objects in
the system obviously objects have
properties you saw ron open up a
property editor and Coogi i make for the
movie controller object rate and looping
or properties that it has properties can
be persistent they can be saved to disk
or they can be ephemeral if you just
need something at runtime you need to
throw it away that's fine to cute.i
objects also respond to messages we
talked about that a little bit earlier
two of the obvious messages that you'll
want to support our get and set property
so for example a script could set your
rate property if you were a movie or
you're looping property but there are
other classes of messages as well
defined in the system the event classes
messages for example allows you to
respond to mouse clicks what happens is
that the movie controller receives a
mouse click from the application that's
playing the movie and it synthesizes a
message from that mouse click that it
then sets sends to the target that's the
message that you'll get to respond to a
click and you can do whatever you need
to do there a similar thing is true if
you're the key target you can get key
presses for other kind of event messages
as well you'll probably see a few of
them scroll by a little later when you
do some scripting spatial class timer
class things that you'll need to do if
you take up space on the screen or if
you pay attention to clocks as time goes
by but a last class of message that I
wanted to mention is the user-defined
message obviously there are things that
the user is going to do with your object
that are not implemented by you and it's
possible for the user to add behavior to
your object
user-defined handlers of messages for
example on foo do something that falls
under this collapse of messages so your
objects can be extended through
scripting and other means
finally the obvious thing that objects
do is manage content they display it
they play it they manipulate it whatever
have you I want to show you a demo now
using the API of qti objects it was
possible for us on the hypercar team to
add to quick time without any support
from peter Hadi whatsoever that's not
what I meant he give us the the header
file it was possible to create a hyper
card button object which we needed for
compatibility support with the old hyper
card stacks that we're going to be able
to translate to this new format so we
were able to create this button object
as a quicktime component using the API
to component API for a few key objects
and obviously we were able to define all
of the classic properties that hyper
card buttons have always had and used
the same user model for them if we can
set the style to default or a standard
or all those other wacky things whoops
didn't redraw sorry and but because we
are in quick time instead of in
hypercard the runtime actually supports
full color so we're able to support more
properties than just that we're able to
support such things as well what color
should the frame be let's make it a nice
blue here obviously the user interface
needs a little tuning we'll get there
what color should the outline be oh
let's make it this one what color is
that so many I'll make it want to do so
you can see that it really does change
so not only thing we support the classic
set of behavior on this object we can
extend it as well all by means of the
component API ok if I go back to slides
a second way that QuickTime interactive
can be extended less interesting than
objects are message handlers and the
reason that I mentioned this in this
session knowing now that I as I know
that it's the hypercard session and not
the quick time future said I thought it
was called the quick time hidden agenda
session
mentok handlers are important to
HyperCard because in particular because
this is the way that you would extend
the reach of quick time interactive if
you want to do a simple subroutine call
you don't need persistent storage you
don't need to draw to the screen you
want to do something that an X command
would typically do I don't know reach
out to the currently chosen printer and
get the printer name or something like
that
a message handler is a difference of
component ATI the nice thing about this
is that it's possible to package many
message handlers together into a single
component instead of having separate
resources for rejects command way
they've used to do this also it's
possible because components can own
resources for us to define a way for a
message handler to declare its own
parameter list and even some help on how
to use it that an authoring tool would
allow a user to browse this is something
we've never had a standard way to do
with X commands in the past so this this
mechanism exists I'd like to show you a
very interesting method channel that we
wrote late one night when Jin Batson
said we're doing all these visual
effects but we're not gonna have time to
do the visual effect to max bugs so I'm
wondering if you could write for us a
message handler that supports it so if
you go back to the demo machine here's
the same button that's been sitting here
all this time live in chatting away let
me write a hyper talk script here on
mouse up debug stir and debug stir is of
course a message handler that we
introduced into QuickTime by means of a
separate component it's not to actually
integrated with the system so those of
you who require this functionality be
available in the shipping version send
email to Peter but of course so now that
I have this message handler I can use it
anyway even though it wasn't implemented
by QuickTime I can go to max bug and
back
just imagine all the useful things you
can do with that and go back to slide
please
all right so we talk about objects we
talked about message handlers those are
ways to get interesting behavior
interesting things first-class things
into the system but of course you want
to be able to extend the reach of those
objects those metrics handlers by
sequencing what they do etc language is
good for this hyper talk see other
languages as well are very good at
describing what objects should do over a
period of time or in sequence so because
we're the QuickTime team instead of
defining a single solution that you
could use for scripting the system is
entirely open to any language that you
should choose to use there are two
levels at which languages can plug in
the first level in the most portable way
for languages to plug in is to use the D
byte code format that QuickTime is
defined it's called cue code there is a
byte code format format and an
interpreter of that byte code that will
be deployed
wherever clicked on interactive is
deployed so if your language compiles to
this byte code format wherever it's
compiled on a Mac or Windows or anywhere
it will run everywhere and that's the
strategy that we're using for hyper talk
in HyperCard 3.0 it compiles the two
code that will run on Windows it will
run on Rhapsody it will run wherever
QuickTime is deployed it's also possible
for languages to plug in and perhaps the
less portable manner but nevertheless
there are valid reasons for doing this
if you already have your own VM for
example there's a language called Java
is an a-lister
which of course is a complete solution
and so therefore you want to be able to
attach Java code directly to a QT object
and that is possible what you would do
is write some glue essentially a
compiler component for a quick time that
would allow an authoring tool like hyper
card to call through that component to a
Java compiler then you would also supply
what's known as a QuickTime interpreter
component really all that does is take
the executable code that's loaded and
hand it off to some runtime and what you
can do of course is invoke the Java VM
in order to do that we've already done
that in the lab I won't show it to you
today but it can work it's also possible
to support this of same mechanism for
OFA scripts such as Apple script or user
talking we've done a proof-of-concept
implementation of that as well what we
are committing to support our hyper talk
and see a Peter once revealed in the in
a weak moment perhaps or unguarded
moment that the reason that he is
working so hard in this project is in
order to do multimedia titles entirely
in C however you might choose a
different language if you should prefer
so let me show you that a language
component is as portable as any one of
these other components let me go back to
the demo machine here and show you that
hyper talk is usable in any qti tool
you've seen two authoring tools here on
this machine that operate directly on
QuickTime data formats one of them is
cute I make and the other is hyper card
you would expect hyper talk to be
available in hyper card but what if it
were available in your application as
well
here is the hyper talk compiler
available as a standalone component what
I should be able to do then is open QT I
make and script objects in hyper talk
why not let's create a new interactive
movie in QT I make will give it the
creative name of two-time movie don't we
already have one of those let's make
another one and just for demo purposes I
will grab a picture object here and open
up the message handlers for this this is
the way to get into the scripting or
programming environment here what I want
to do is stay o on event
click I want to use the hyper talk
language and let me open up this
clipping which I so cleverly prepared in
advance and now there are some odd
things about the syntax here such as on
nay never mind that this is a
demonstration I should be able to
compile this and having done so well I
guess that was painless I'll put it away
and click here and sure enough hyper
talk works inside another authoring tool
[Applause]
okay back to slides I'm just pounding
through these demos ten demos count them
ten demos in one session
okay now objects can do things they can
draw to the screen they can play sounds
they can do stuff now what do you want
to get data into them you want to get
images in you I get stuff in obviously
QuickTime has support already for
various kinds of data import you might
be aware in QuickTime 2/5 of the
introduction of grips or graphics
importers we're going to use that
facility also in QuickTime 404 getting
image data into objects in CGI but there
may be types of data that QuickTime has
never heard of or types of data that are
defined after a release of QuickTime
becomes available it's still possible to
provide support for importing that data
into these interactive movies by means
of something we call resource importers
Ron showed you earlier that objects have
resource maps resource maps just are
groups of stuff content that the object
can own and do things with draw them
play them or just own them for whatever
purpose whatever nefarious purpose it
might have in order to get the data in
you can supply a resource importer that
knows how to import a particular data
type the QuickTime itself doesn't know
about we've been watching the QuickTime
3.0 demos that Jim and Peter have been
doing and we were really eager to use
those special effects that they've been
showing fire and clouds and ripple stuff
we thought now would it be great if we
could import those rendered images into
a picture object and script it in
HyperCard so we did
now all this requires is a little bit of
ingenuity and perhaps some late night
though hacking by Chris flick who wrote
what's known as the sfx hack resource
importer we're still working with
product marketing to determine whether
this will be the final name
now this is a separate file I've loaded
it I've registered with the component
manager and now if I should launch
hypercard 3 oh if all goes well I should
be able to create yet another untitled
movie rather than doing a typing demos
for you I will simply stick with the
default this time going to create a
picture object in fact nearly every time
I create picture objects but in this
particular case instead that instead of
having a picture object render a static
image I want it to render an effect that
changes over time so you saw in QT I
make the realest of resources in
hypercard we're calling that the media
panel of the info window doesn't that
sound more mellifluous and we have the
ability to import data into this these
files are on disk representations of
those effects that you saw let's go for
a little fire here I'll import some fire
into this object now I have fire in here
and I should be able to make this the
default a Content that the object
displays and so there I go I have an
object that that essentially draws fire
but now what I wanted to do is to change
over time so I'll open up its script and
I can script fire the script that I want
to use is not particularly pretty right
now essentially I just want it to redraw
itself as often as possible so I'll
compile that hyper TOC script one of the
bizarre ones I've ever seen and if I
enter the mouse into here I just burn
now of course what you might want to do
here is set a property on there for it
to be to use a particular graphics mode
to superimpose it on top of another
object all that support is here as well
I should mention I'll show you more
demos that are particularly focused on
the features of hyper card in a moment
but one of our philosophies here is to
provide two levels of access one is more
comprehensive especially for people who
are coming to this from using hyper card
before so here is a view of the
properties of picture objects which is
not as rich as it will eventually be but
it's still simpler and then if you go if
you click more here you see all of the
properties that are available to find in
QuickTime or by the object so you have
complete control but you don't
necessarily have to understand it all to
use it
ok back to slides so you can get data in
and you can operate on the data you can
display it wear it for the day to be
anywhere on the internet in your
database
it could be under your chair right now
since QuickTime 1.0 was released it has
supported a component type called a data
handler which is what's in document is
immediately there's documentation for
data handlers in the QuickTime 2.0 SDK
and presumably it will also be in the
two-five SDK hasn't changed except to be
expanded upon
but essentially data handlers are quick
times abstraction for how to fetch stuff
the abstraction is more or less based on
the model of files but it doesn't have
to be a file that it fetches stuff from
already in QuickTime it supports
fetching stuff out of handles in memory
or out of macintosh' resources on the
Macintosh you've already seen demoed if
you've been to the internet session the
URL data handler so you can fetch data
off of the internet live I'll show you
that in a moment
the reason that I am making such a big
deal out of data handlers right here is
that we know that this QuickTime
interactive technology will be useful
for building front ends to data no
matter where it resides because it's so
powerful for display for combining
objects for for doing things that people
would like to look at here's a here's a
demo of grabbing some data out of a
database
this is pretty weird so stay with me
what I have here is a filemaker pro
database and it's a very simple database
it just contains two records one record
while each record contains one field
obviously I cracked earlier but in any
case each record has one field it
contains a picture pretty simple now
what I wrote was something called an OS
a data handler OS a is the open
scripting architecture what that would
allow me to do is to use OS a scripts to
fetch data this is pretty strange but
essentially I'm using in this particular
case Apple script has a data access
language so once again I'll drag out a
picture object here and this time I'll
bring up the media panel and go to the
add reference dialog instead of dragging
some media in here directly I'm going to
say that I want to refer to external
media so hit this guy up comes this
dialog you can see that one of the forms
of reference is URL another is OS a
script tell whoops told you I shouldn't
the gentleman typing he'll application
FileMaker Pro cell 1 and tell that of
course is a simple script that tells
FileMaker to return the data that's
contained in cell 1 so click OK and I
created a resource well hang on how
district no problem I'm going to look
for my OS a data Handler and register it
again
just to show you that it's really
component I'm registering on the fly
let's try this again okay there it is
that's the picture out of all right
let's try it again just because I'm
tempting fate this time I'm going to
type better and say that I want cell ID
record to field one that should be the
second picture let's click OK here now
say that we want that lemon why is that
breaking every single time oh did I hit
it wrong okay
let's make another one I have a real aim
in mind which is to exhaust the Q&A time
at the end of the session don't worry
I'll change it I will not make the same
mistake twice
okay and of course the reason that URL
didn't work was that wasn't in valid URL
however is a valid OS age grid
[Applause]
okay back to slides clearly what we have
here is a very powerful system and what
it begs for is not just your objects and
your message handlers and your data
importers or resource importers and your
data handlers although that's great that
we'll all of those things will make the
runtime more comprehensive and more
powerful what it begs for especially is
offering tools there are already great
authoring tools on the market what we
want you to do if your authoring tools
is take advantage of all this technology
that we're providing its open it's
available it's going to be there
cross-platform wherever you need to
deploy so instead of having a right of
player for your authoring tool for Mac
and Windows and port it's Rhapsody and
wherever else you can simply deploy to
QuickTime and we'll write your player
for you and as Reuben said Peter will
tune it for performance now I told you
that the abstraction for these
interactive movies is identical to
QuickTime has ever been movies tracks
and samples but this abstraction can be
adapted for a broad range of content
models actors and scenes for example
such as the director or cards and stacks
such as hyper card or similar tools of
controls and forms such as other tools
which might not be immediately
identified with multimedia but
nevertheless it's the content model
which might very well be useful on top
of this stuff architecture not only
different content models but different
usage models are possible as well how
should objects work in the hierarchy
which objects should be able to share
media with other objects
how should messages propagate to the
system should they be propagated
according to hyper cards message path or
some other form all of these things are
open and you can decide what you need to
do as you authors a movie where the
message should go where the media lives
and where it comes from it's all open
you've seen click works can use this I'm
going to do a demo just a little bit
later amt can also take advantage of
this technology finally there are
different ways for assigning behavior to
objects in differ
offering tools configuring is one way to
do it setting properties or using a
feature like using click works to use a
graphical interface user interface to
specify behavior wiring is also possible
such as you saw in Ron's demo of QT I
make or perhaps there's wiring available
elsewhere at the show finally scripting
or programming is also a good way to
assign behavior all these different ways
of assigning behavior can be adapted for
QT I let me do some demos now of
different authoring tools you saw CCI
make you saw a hyper card and then show
you little more you saw click works
let's do some AMT let's see I'm running
low on time so I instead of just
actually launching a project in AMC I
will show you converting an AMT project
life here's a folder that contains a
project and a MT project apparently AMT
was never loaded on this machine so you
don't see the icon
they'll have to trust me on this one but
what I'm going to do is launch an
application that's capable of converting
that a MT project to a QT I formatted
the way that's very similar to what
Rubin has done with click works let's go
ahead and convert it okay guys find the
media since some of the different drive
that's easily accomplished ok now as
this converter grinds through the
project it's in the format defined by
Apple media tool AMT what it will do of
course is to create the interactivity
track for a movie add the samples to the
track add the media to the samples and
so forth and what it's also doing and
what's interesting to mention is that it
takes actions that were assigned in AMT
and expresses them in C code then it
compiles that C code using the C to Q
code compiler that's available in QT I
and then when it's done not only will
the movie run as an interactive movie
it's also possible to open it up with
another authoring tool such as QT I make
look at the C code and edit it and
change the behavior or add new behavior
to it so let's take this movie which was
just created
let's open it with QT I make some of you
may recognize this it's one of the
samples that comes on the AMT CD type of
louder than I do so some basic features
here are some rollover buttons change
the picture over there I'll click on the
picture go to a different screen and
this particular screen we have some
ambient sound we have a VR movie we have
a scrolling map this goes faster name
key right now than it does in Nook you
see I here I can rollover the other guy
and this will follow the mouse around
maybe I want some more behavior that's
not possible in AMT here so let's go to
authoring mode and to catch that guy
there stop doing that and go to the
message handlers what I want to do is
add some behavior that isn't possible by
AMT actions so what I'm going to do is
come back over here and let's see that
is the folder I have a text clipping
here alright open in simple text knock
yourself out and I have some C code that
I can add to this particular object on
mouse-over what I want to do is
something that I can't do in AMT I want
to make this object follow the mouse
around anywhere on the screen not just
in a particular direction so let's go
ahead and add that code let's see we
want to use the c2q code compiler and
that ought to do it let me compile this
and having done that I should be able to
have this guy follow me around there you
go can't do that
okay so believe it or not I got through
all of those demos and I still have some
time left to talk about
hypercard so let's talk about HyperCard
last year we got up and said that we
were going to rebuild hypercard on top
of QuickTime interactive obviously we
have continued to do that and we are
committed to completing that
implementation at the moment a couple
things have affected our delivery
schedule one of them is the absolute
requirement to deliver as a portable
version of QuickTime on Windows and
Macintosh before the interactive piece
comes out I'm sure you'll agree with me
that the interactive features of
QuickTime are a lot less interesting to
the market if they're not available in
their full splendor on Windows as well
as Macintosh so we've made it a priority
to complete the windows implementation
of QuickTime 3.0 before putting this
through the product shoot so here we go
hypercard what I want to do I want to
build a movie except I want to use stack
like content model and HyperCard like
ways to do I'm going to call this whole
movie mom why because Steve Jobs told me
to actually the reason I'm doing that is
because of a limitation that we will
shortly remove we open some media up
here I haven't had some media that that
was created with really high tech tools
I have a JPEG image that was created
using our quick take quick take camera
at home and I have some movies that we
did with our home video camera and
simply digitizing them using Apple video
player so no fancy stuff here we the
rule for this demo was not to do
anything you couldn't do on a Performa
as configured so let me grab a picture
of my son in his early stage of learning
to dance then one in his early stage of
locomotion and finally an early stage of
elocution
open up some info for this last movie
because what I want to do is to give it
behavior by means of the hypercar tasks
feature that we introduced in HyperCard
two three this is a way for objects to
have behavior without scripting this
particular case whoops when the mouse is
entered when the mouse enters the object
I want the thing to play and I want to
hear what the movie is doing obviously
the user interface needs some tuning
then when the mouse exits I want it to
stop playing and I want it to stop
sounding like anything so I'm just
having done that without any scripting
whatsoever I should be able to put the
mouse in there Oh draft mount Center at
test pardon mounts internet test now
enter no I click that I know what this
is
can't fool me I have to find that
QuickTime component so once again live
in Cupertino
whoops sorry in San Jose oh really your
hair point and play
now if only we're possible for you to do
point and play on your web pages lens
that'd be great okay let's try it
say for Internet so what I will do with
our safer internet command and HyperCard
3.0 is merely save an HTML document that
embeds this movie by means of the
QuickTime plug-in let's quit HyperCard
here I have my HTML document hanging
around here somewhere
should be able to open it in Netscape
Navigator oh I forgot Java sorry
see the key and here's that very same
movie inside of Netscape Navigator and
now point play
okay I'm really running low on time so I
have to talk to the cops right now okay
let's go I needed to QuickTime media
scripting so we're going to do some
scripting and HyperCard 3.0 and what its
gonna look like
first of all what we want to do is
import a VR movie we can just drop it in
there inside of Hydra car to get a VR
object certainly that's very easy
however perhaps what you want to do is
some scripting with the subject on mouse
within set the pen angles to pen angles
plus or widen oh how about 20 degrees
where's the plus sign on a keyboard
thank you very much now compile and Link
to cue code enter the mouse then dump it
up thumb thumb
but that's not all how about some 3d
let's put a teapot inside of the hyper
card card which is card number two in
the sticker stash and drag it in there
when you get a VR object let's go back
to play mode and of course just move it
around like that but perhaps what you
want to do is script it so let's go to
the script editor and say on Mouse
within a very similar thing except in
this particular case set the oh I don't
know why rotation to Y rotation plus I
have a three degrees which of course we
need Express in radians this is quick to
our quick draw 3d of course what we'll
do is we will we'll create a rotation
abstraction in QuickTime interactive so
you can use degrees or radians whatever
you like so now let's go back to play
mode and stick your mouse in there and
there it goes
but wait there's more what I want to do
is add a file of my alias you have to
does Julian fries it cuts it straight
just falls down and goes bang okay let
me find my media file there it is let me
open it up now I want to import another
3d model via Illiad via alias let's do
that unless we create another one let's
change it to make the default the
airplane instead of the teapot that's
kind of boring let's script now again
and say on Mouse up set the resource ID
- this is kind of weird 3 - resource ID
why because it works now if I put the
mouse in it will certainly spin but if I
click it will change to the other 3d
model
okay so we really do integrate QuickTime
technologies how about that internet
stuff all right I want to Mack my launch
Netscape Navigator five minutes ago will
it crash what I want to do is go to my
local web page QuickTime com I'll try
this on your browser at home now I want
to go to one of these guys here I'm
going to grab some images live off the
web how about from this nice Apple page
how about an option key press thank you
so I'm loaded this page naturally have
JPEG and gif images here but I really
want to use them inside of paper cards
so what I will do is drag the JPEG image
off of the server live I don't know if
the jet who cares drop it into hyper
card which one is it in I am an offering
mode but I'm waiting for is the data to
be downloaded live off the internet what
I've done is just by dragging out of
Netscape I created a picture object and
if I take a look at the media panel you
see that I'm doing this by reference and
what's the reference it's the URL it's
the URL there it is
okay I'll just do one more of those if I
can hit the M please there we go
so from a different website I can grab a
different logo and do the same thing
okay
the question then can we do this without
the browser all right let's get rid of
the browser let's take this particular
movie that I've been so assiduously
creating for you as you can see it has a
number of cards it has the VR card it
has a 3d card and it has the card with
live images off the web but I'm going to
do since I'm at a time I was going to
script some digital effects you saw
Rubens visual effect so trust me we can
do them in hypercar too and yes the
command is digital effect what I'll do
to save this movie without recourse to
the browser I should be able to open
this movie inside of movie player' and
all the same things should continue to
work pulling the data off the internet
live there it is
okay we got two minutes left so let's
call up Tom Becker of the hypercar team
he's going to show you some basic oh I
don't know what do you need in a
scripting language how about debugging
Tom Lopez running here so that's just
just make a stack here and let's create
an object so we can script I've got a
nice hypercard button and I really don't
like a blank buttons okay and let's
bring up the script and that's got it
has some scripts around here somewhere
let's see as you can see
typing and hypercard is very fast now I
was going to actually demonstrate the
max bug debugging approach well first
off let me show you what we got right
here this is user-defined handler and
then here this is an override of a hyper
card system message which is defined by
the system so what I should be able to
do is go back here and run the thing get
two beats okay so it actually is working
let me turn on message trace and watch
what's happening okay you see the mouth
enter Mouse leaves okay so I got how
there's the mouse out and there's the
user message call now QuickTime is busy
that's why we have these check boxes
here is so that you don't see all the
messages that are actually going on here
however at least it's very efficient and
okay now the other thing is let's go
back to the script editor and let me set
a breakpoint and run the thing actually
let me close the window it's more
dramatic that way one be okay here I am
Emma I'm at the break and it's even
selected the right line and now I can
say go and I'll do get Abbey
okay obviously we'll support the other
features that you're used to in
hypercard debugging I'm sure tom is
going to mention that yeah I actually
wanted to mention is we have things like
we support multiple compilers and and so
if you're going to do a compiler for two
code you know will tell you what the
symbol format is and then you can just
horse debugging so okay as much as I'd
like to show you more we're out of time
the big bomb is up in the back of the
room so come to the quick time feedback
forum which is at 4:30 in room j4 and
we'll answer your questions thanks very
much
[Applause]
[Music]
to make it