このセクションでは、SMIL-Bostonアニメーションモジュールを定義する。 SMIL-Boston アニメーションは、時系列上のものとしてアニメーションを再現するための枠組みと、複合的なアニメーションを構成するための機構である。 SMIL-Boston アニメーションには、あらゆるXMLベースの言語で再利用可能なアニメーション要素のセットが含まれる。 これらの要素と属性はモジュール内で定義されており、他のXML言語のデザイナーは必要に応じてSMIL-Bostonアニメーションモジュールの機能を再利用することが可能である。
SMIL-Bostonアニメーションモジュールは、仕様画定目前のSMIL-アニメーション[SMIL-ANIMATION]モジュールの機能を元に構成されることになるだろう。 SMILアニメーションのタイミングモデルは、SMIL1.0[ SMIL10 ]ののものに対話型(イベント対応型)動作に関するいくつかの変更と拡張を加えたものを基礎としている。 加えられる拡張には、(まだ未画定である)SMIL-Bostonタイミングモジュールの機能の中核部との互換性を持っている。[The extensions are compatible with a core subset of the functionality expected to be included in the SMIL-Boston timing module.]
このアプローチは、SMIL-Bostonの策定作業前[before SMIL-Boston is ready to go to Recommendation status]に、最初のバージョンのSMILアニメーションにおいて、よりよいアニメーションモジュールのリリースを容易に実現するために用いられた。 SMIL-Bostonアニメーションモジュールは、それ自身にはタイミングモデルを含まず、SMIL-Bostonタイミングモジュールを用いることになるだろう。 特にアニメーションのためだけに、タイミング用記述が再定義されることもないだろう。
この版においては、こうした拡張がモジュールに含まれることになると言及するに留める。詳細については、以降のドラフトを参照されたい。
アニメーションは、本質的に時間軸にその基をおくものである。 アニメーションは、(SMILタイミングの属性と同様に)新たないくつかの要素に伴った、属性とその内容[semantic]によって記述される。 アニメーションは指定された属性の表示される値を、時間的に変化させる機能として設計される。[Animation is modeled as a function that changes the presented value of a specific attribute over time. ]
SMILアニメーションは、文書製作者及び仕様の実装者に対して一貫したモデルを提供し、アニメーションにSMILタイミングモデルを統合するための枠組みとなる。 アニメーション[モジュール]は対象の要素の属性を操作するだけのものであり、対象の要素の内容に関する特別の知識を要求しない。 また、ある言語の中で、SMILアニメーションを元にした一層高度で専門的なアニメーション要素が定義されることがあるかもしれない。
SMILアニメーションはSVG[ SVG ]のようにタイミング概念を持っていない言語に統合することを目的として構成されている。 しかしながら、(SMIL 1.0などのように)タイミング概念を既に持っている言語に対しても、平叙アニメーション機能を拡張してやる必要性は存在する。 SMIL-Bostonでのアニメーションは、SMILアニメーションの持つこうした限界を克服し、また他の多くの点においても、SMILアニメーションを拡張することになるだろう。
SMIL-Bostonアニメーションは、SMIL-Boston言語と、そのより強力なタイミングモジュールに完全に統合される。 SMIL-Bostonタイミングモジュールに含まれると思われ、SMIL-Bostonアニメーションにも継承されると思われる新機能は以下の通りである。
アニメーションモジュールに含むまれるであろう新機能:
このセクションでは、SMILコンテンツコントロールモジュールを定義する。 このモジュールは実行中の選択と最適化されたコンテンツ配信[optimized content delivery]の機能を提供するための要素と属性を含んでいる。 それらの要素と属性は モジュール内で定義されるので、他のマークアップ言語のデザイナーは、メディアコンテンツをコントロールする必要が生じたときに、SMILコンテンツコントロールモジュールの機能を再利用することができる。 あるいは、他のSMILモジュールを利用する場合であっても、既に他のコンテンツコントロール機能が存在しているなら、SMILコンテンツコントロールモジュールを利用する必要はない。
SMIL1.0コンテンツコントロール機能に対して提案された拡張
SMIL1.0は、ある条件が満たされているときにだけ(例えばクライアントが特定のスクリーンサイズを持っているときなど)要素に対してテスト属性機能を提供する。 SMIL1.0はまた、文書の一部が選択的であるときに、「条件を満たす最初のもの」を選択して表示するためのものとして、switch要素を提供する。 これは例えば、多言語版の音声ファイルが利用可能なときに、どの言語のものを利用するかを選ばせるのには有用である。 SMIL Bostonでは、これらの特徴を踏まえた上で、個々の視聴者に対し、制作者が提供してユーザーが選択した属性に基づいて表現をカスタマイズ可能なよう、新たなテスト属性機能を拡張する。
switch要素は、複数のうちから1つだけの要素が選択うる場合についての記述を可能にする。 SMIL Bostonでは、ある要素がデコード可能な(メディアタイプが宣言されている)SMIL Bostonの要素であり、そのすべてのテスト属性の評価値が真であるなら、1つの要素が受容可能である。 コンテンツコントロールを他の言語に統合する際には、何が「受容できる要素」であるかを明示しなくてはならない。
要素は、次のようにして選択される。 プレーヤー(再生機)はswitch要素中で記述された順番に、要素を評価する。 最初に受容された要素が選択され、switch要素中の他の要素は無視される。
従って文書制作者は選択肢を、最も望ましいものから初まって最も望ましくないで終わるようにに並べるのが望ましい。 さらに、文書制作者は(明らかに望ましくない場合を除き)最低でも一つの項目が選択されるよう、比較的問題の少ない代替案となる項目をswitch要素の最後の項目として配置するべきである。 実装系は、switch要素内の全ての子要素が選択不可能な場合には、なにも選択しないままにするのが望ましい。
HTTPやRTSPのようなネットワークプロトコルを配信に使う場合、switch要素を使って選択性を持たせておくことが有効な場合があることに注意すること。[Note that some network protocols, e.g. HTTP and RTSP, support content-negotiation, which may be an alternative to using the "switch" element in some cases. ]
属性(Attributes)
switch要素は次の属性を持つことができる:
本仕様書では言語デザイナーによって言語要素に加えることが可能な、いくつかのテスト属性を定義する。 SMIL Bostonにおいては、同期及びメディア要素に適用可能である。 概念的には、これらの属性はブール値テストを表わしている。 要素に含まれる属性のうち一つでも「偽」の値を示すときには、この属性は無視される。
以下のリスト中での説明では、「ユーザー設定」という記述が登場する。 ユーザー設定は、通常は再生エンジンの「設定項目」として設定されておくものであるが、設定方法はこれに限らないものとする。
SMIL Bostonは、以下のテスト属性を定義する。 SMIL1.0ではハイフンがついていた一部の属性名が、SMIL Boston camelCaseに従った表記を推奨されるようになったことに注意すること。 こうした変更のあった旧属性名については、SMIL Bostonにおける名称の後に、括弧書きで表記してある。
この属性を評価する場合、ユーザー設定によって示される言語名の一つが、テスト属性のパラメータとして与えられた言語名もしくは言語名の接頭辞(言語名のうち、冒頭から最初の" - "までで示される部分)と、(正確に)一致していたならば「真」を返す。
そうでなければ、「偽」を返す。
注意:接頭辞による適合ルールは、あるユーザーが同じ接頭辞を持った言語なら必ず理解できるように接頭辞が割り当てられることを保証するものではない。
接頭辞による適合ルールは、単に接頭辞の適用を可能とするだけのものである。
実装にあたっての注意:ユーザーによる言語優先度の選択を可能とするなら、ユーザーが(上記の)言語適用原則に慣れ親しんでいないことを考慮に入れて、適切なガイドを行なえるような実装をすべきである。たとえば、ユーザーが"en-gb"を選択しているなら、イギリス英語が利用可能でないときには他の英語の文書が役立つだろう。このような場合、ユーザーインターフェースはユーザーに対し"en"を(優先度が)下位の項目として設定するようガイドすべきである。
場合によっては、多数の話者のために多数の言語がリストされるかもしれない。例えば、オリ語と英語のバージョンが存在する "Treaty of Waitangi(ワイタンギ条約)" ならば、こんなふうに記述されるだろう:
記述にあたっての注意:switch要素を使って言語ごとにオブジェクトを切り替えるようにした上で、いずれも適合しなかった場合、音声なしで映像を見せられるようなことになってしまうことに気をつけるべきである。このためswitch要素の最後には、必ず適合となる要素をいれておくことが推奨される。
screen-size-val ::= screen-height"X"screen-width
規定テスト属性の使用例
1) ビットレートによるコンテンツの選択
実装系がsystemBitrateパラメータによって再生する要素を選択する場合が考えられる。再生装置は、選択肢(switch要素の中の各要素)の中からサーバーとの間で実現可能なビットレートを探して、適切なものを選びだそうとするだろう。
<par> <text .../> <switch> <par systemBitrate="40000"> ... </par> <par systemBitrate="24000"> ... </par> <par systemBitrate="10000"> ........ </par> </switch> </par> ...
2) ビットレートによる音声トラックの選択
switch要素のなかには、あらゆる要素が含まれ得る。たとえば、一つの要素が直接音声トラックを指示していることがあり得る。
... <switch> <audio src="joe-audio-better-quality" systemBitrate="16000" /> <audio src="joe-audio" systemBitrate="8000" /> </switch> ...
3) 複数言語からの音声トラックの選択
次の例では、フランス語か英語の音声トラックが利用可能である。ユーザーの望む言語に基づいて、再生装置はどちらの音声を再生するかを選択する。
... <switch> <audio src="joe-audio-french" systemLanguage="fr"/> <audio src="joe-audio-english" systemLanguage="en"/> </switch> ...
4) スクリーン表示性能による表示内容の選択
次の例では、解像度とカラーパレット深度に応じたいくつかの部分を含んでいる。スクリーンの性能に応じて、再生機器はどれか1つを選択して再生することができる。
... <par> <text .../> <switch> <par systemScreenSize="1280X1024" systemScreenDepth="16"> ........ </par> <par systemScreenSize="640X480" systemScreenDepth="32"> ... </par> <par systemScreenSize="640X480" systemScreenDepth="16"> ... </par> </switch> </par> ...
5) 株価表示の有無
次の例では、ユーザーが表示を希望する場合に限り、株価が表示される。
... <seq> <par> <audio src="audio.rm"/> <video src="video.rm"/> <textstream src="stockticker.rtx"/> <textstream src="closed-caps.rtx" systemCaptions="on"/> </par> </seq> ...
6) 吹き替えや字幕の言語選択
次のSMIL記述は、フランス語の映画が英語・ドイツ語・オランダ語の吹き替え音声と字幕の両方で利用可能であることが示されている。ユーザー設定に基づいて、使用言語が選択される。
... <par> <switch> <audio src="movie-aud-en.rm" systemLanguage="en" systemOverdubOrSubtitle="overdub"/> <audio src="movie-aud-de.rm" systemLanguage="de" systemOverdubOrSubtitle="overdub"/> <audio src="movie-aud-nl.rm" systemLanguage="nl" systemOverdubOrSubtitle="overdub"/> <!-- French for everyone else --> <audio src="movie-aud-fr.rm"/> </switch> <video src="movie-vid.rm"/> <switch> <textstream src="movie-sub-en.rt" systemLanguage="en" systemOverdubOrSubtitle="subtitle"/> <textstream src="movie-sub-de.rt" systemLanguage="de" systemOverdubOrSubtitle="subtitle"/> <textstream src="movie-sub-nl.rt" systemLanguage="nl" systemOverdubOrSubtitle="subtitle"/> <!-- French captions for those that really want them --> <textstream src="movie-caps-fr.rt" systemCaptions="on"/> </switch> </par> ...
以下の事項は、まだSYMM WGによって検討中の部分である。以下の文中で示される表記法は、試験的なものであり今後の変更の可能性がある。
SMIL Bostonに導入予定の新機能に、個々の視聴者による表示のカスタマイズを可能にするための、文書制作者によるテスト属性セットの追加機能がある。 文書制作者は、初期値と共にテスト属性が取り得る値を指定する。 文書の本体(body要素中)で、定義時にid属性で指定しておいた値を、uGroupテスト属性の値として記述することで、定義したユーザー・グループの値がチェックされる。 ユーザー・グループは、これまで説明してきたシステム定義テスト属性と同様に、表示の制御を行なうのに用いることができる。
<userAttributes>
要素
属性
もしもuGroupテスト属性の評価結果が真であったならそのユーザー・グループに属する要素は評価され、そうでなかったなら要素は無視される。 ユーザー・グループの値(状態)を定める方法については、再生装置ごとに異なる実装を取ることができることに注意すること。 有力な実装方法についての提案として、ダイアログボックスを表示して選択させる方法と、設定ファイルに保存された情報に基づいて評価する方法とが挙げられる。
例:
<smil> <head> <layout> <!-- define projection regions a, b, c & d --> </layout> <userAttributes> <uGroup id="nl_aud" uState="RENDERED" title="Dutch Audio Cap" /> <uGroup id="uk_aud" uState="NOT_RENDERED" title="English Audio Cap" /> <uGroup id="nl_txt" uState="NOT_RENDERED" title="Dutch Text Cap"/> <uGroup id="uk_txt" uState="NOT_RENDERED" title="English Text Cap"/> </userAttributes> </head> <body> ... <par> <video src="announcer.rm" region="a"/> <text src="news_headline.html" region="b"/> <audio src="story_1_nl.rm" uGroup="nl_aud" region="c"/> <audio src="story_1_uk.rm" uGroup="uk_aud" region="d"/> <text src="story_1_nl.html" uGroup="nl_txt"/> <text src="story_1_uk.html" uGroup="uk_txt"/> </par> ... </body> </smil>
(追記予定:例についての詳説)
以下の事項は、まだSYMM WGによって検討中の部分である。以下の文中で示される表記法は、試験的なものであり今後の変更の可能性がある。
共通した方針に基づいてオブジェクトをグループ化することについての意義を説明する。 半物理的リソースの利用を伴うアクセスの際の制御方針の共通性に基づいて要素をいくつかのグループへと分割したい。優先度、共通サーバー、共通アクセス権 / 課金モデル、ローカルリソースの利用(レイアウト、機器、他)などについて定義される。 [A Channel defines a partitioning of elements into groups each group has a common set of access policies control use of quasi-physical resources: - priority - common server - common access rights / charging model - local resource use (layout, devices, etc.)]
以下の事項は、まだSYMM WGによって検討中の部分である。以下の文中で示される表記法は、試験的なものであり今後の変更の可能性がある。
コンテンツの集合体としての、表現への着目: コンポーネントのそれぞれは、ユーザーレベルでは異なった表示・エンコーディングをされるかもしれない。
制作時に選択肢を設けて、使用時に選択を行なうようにする。
<prefetch>
要素
以下の事項は、まだSYMM WGによって検討中の部分である。以下の文中で示される表記法は、試験的なものであり今後の変更の可能性がある。
prefetch
要素は再生をスムーズにするためにメディアリソースを先行して取得するための情報をユーザーエージェントに提供する。
ユーザーエージェントは prefetch 要素を無視することもできるが、その場合には再生中に余計な割り込みがかかってしまうことになるかもしれない。
prefetch要素を利用することで、バンド幅や時間に余裕があるときに、あらかじめリソースを取得しておくことが可能になる。
<prefetch>
要素は XML文書のbody要素中に記述される。明示的にタイミングが指定されていないかぎり、その登場順に必要になるものとみなされる。
<prefetch>
要素は、メディアオブジェクト要素と同様、id
、src
の各属性を持つ。
SMIL Bostonタイミングが統合されているなら、begin
、end
、dur
、 clipBegin
、clipEnd
の各属性を利用することも可能である。
id
、src
要素は他のメディアオブジェクトと同様に、id
は参照を行なうために、src
は取得すべきリソースの指定に使用される。
ユーザーエージェントによる処理中に、src
によって同一のURLを指定されたメディアオブジェクトが出現した場合、先行して取得されたリソースが用いられ、余計な割り込みが発生することなしに即時に再生が行なわれる。
タイミング属性begin
、end
、dur
は、要素を先行取得するタイミング(プレゼンテーションタイムピリオド)を指定することになる。end
もしくはdur
によって指定された取得終了時になると、先行取得はそこまでで中止される。
clipBegin
、clipEnd
要素は
clipBegin
and clipEnd
要素は元リソース中から切り抜かれて取得されるべき部分を指定するために使われる。もし最後の30秒だけが再生されるなら全部を取得しておく必要はないし、再生されるのが中間の30秒だけであるのにそれ以上の部分を先行取得しておくのは望ましくない。
mediaSize
、
mediaTime
、
bandwidth
属性
<prefetch>要素には、メディアオブジェクト要素にて許されるほかに、以下の属性が入ることも許される。
mediaSize : バイト数、割合(%)のどちらかで指定
mediaTime : 時間、割合(%)のどちらかで指定
bandwidth : ビットレート、割合(%)のどちらかで指定
mediaSize
とmediaTime
の両方が指定された場合、mediaSize
が利用されmediaTime
は無視される。
即時媒体(text/htmlやimage/pngのような時間に基づかないメディア)でmediaTime
属性が指定された場合、リソースの全てが取得される。
prefetch要素が無視される場合であっても、文書の示す内容は再生されるが、リソースの取得に伴い、よけいな読み込みや休止が発生することになるであろう。
親要素の繰り返しや再開のためにprefetch
要素が繰り返されると、先行取得作業も繰り返されることになる。これにより、バナー広告などのように呼び出しごとに変化しうるデータについて、常に最新のデータが表示されることを保証する。
全てのリソースが先行取得されない場合には、動的に内容の変化するURLからの先行取得には注意するべきである。先行取得されていない未取得のデータに関するリクエストによって、問題のURLの内容が変更される可能性がある。
ユーザーエージェントは、HTTPの822ヘッダー(「キャッシュしないこと」を意味する)のような、コンテンツのキャッシングに関する指示を尊重すべきである。
特に、キャッシュ不可とされたデータについては、prefetch要素によって先行取得されていた場合であっても、表示のたびに取得しなおすべきだろう。
clipBegin
やClipEnd
属性を持つが先行取得が困難なメディアオブジェクトについては、どのような形でデータを取得してきても良いが、これは望ましい表示方法ではない。
バイト数は以下の構文に基づいて表記すること。
バイト数 ::= [0-9]+; 任意の正の数
割合(%)は、以下の構文に基づいて表記すること。
割合(%) ::= [0-9]+ "%"; 0から100までの正の数
時間は、以下の構文に基づいて表記すること。
時間 ::= ( Hms-val | Smpte-val )
Smpte-val ::= ( Smpte-type )? Hours ":" Minutes ":" Seconds
( ":" Frames ( "." Subframes )? )?
Smpte-type ::= "smpte" | "smpte-30-drop" | "smpte-25"
Hms-val ::= ( "npt=" )? (Full-clock-val | Partial-clock-val
| Timecount-val)
Full-clock-val ::= Hours ":" Minutes ":" Seconds ("." Fraction)?
Partial-clock-val ::= Minutes ":" Seconds ("." Fraction)?
Timecount-val ::= Timecount ("." Fraction)? (Metric)?
Metric ::= "h" | "min" | "s" | "ms"
Hours ::= DIGIT+; any positive number
Minutes ::= 2DIGIT; 00 から 59まで
Seconds ::= 2DIGIT; 00 から 59まで
Frames ::= 2DIGIT; @@ range?
Subframes ::= 2DIGIT; @@ range?
Fraction ::= DIGIT+
Timecount ::= DIGIT+
2DIGIT ::= DIGIT DIGIT
DIGIT ::= [0-9]
Timecount値の、デフォルトの単位は"s"(秒)である。
ビットレートは1ビット/秒の数を指定する。ビットレートは、以下の構文に基づいて表記すること
ビットレート ::= [0-9]+; 任意の正の数
prefetch
要素の使用例
1) 映像の終了後すぐに画像が表示できるよう、画像データを先行取得する
<smil>
<body>
<seq>
<par>
<prefetch id="endimage"
src="http://www.w3c.org/logo.gif"/>
<text id="interlude"
src="http://www.w3c.org/pleasewait.html" fill="freeze"/>
</par>
<video id="main-event"
src="rtsp://www.w3c.org/video.mpg"/>
<image src="http://www.w3c.org/logo.gif"
fill="freeze"/>
</seq>
</body>
</smil>
上記の例では、タイミングが指定されていないでので、デフォルト値が適用される。テキストは即時媒体なのですぐに表示され、prefetch要素では利用可能なバンド幅の全てを使って画像がダウンロードされる。
<par>
の処理が終わると映像が再生され始める。映像の再生が終わると画像が表示される。
2) カーソルが重なったときに変更されるボタンについて、処理の高速化のために画像データを先行取得しておく。
<html>
<body>
<prefetch id="upimage"
src="http://www.w3c.org/up.gif"/>
<prefetch id="downimage"
src="http://www.w3c.org/down.gif"/>
....
<!-- script will change the graphic on rollover
-->
<img src="http://www.w3c.org/up.gif"/>
</body>
</html>
prefetch 要素は同期性のためのタイムベースとして利用可能か?
この機能は、サポートされるべきだと考えられている。
たとえば、先行取得が完了するまで、内容を再生しないということができる方がよいからだ。しかしこのことは、prefetch動作が開始時、終了時及び動作時間を持つことを意味している。先行取得機能はオプションであるが、いつ取得を開始し終了すべきかを判断する必要がある。またこれには、エラーが発生した場合の問題が伴う。
さらには、先行取得を行なわない、あるいは失敗が起こらない場合であっても、prefetch要素のタイミングに依存して動くなにかがあるかもしれない。
そのため、処理されなくともprefetch要素のタイミングを維持し、prefetch要素が実行されたかのようにしてイベントを起こす必要がある。
これは非常に複雑な問題である。一つの方法として、prefetch要素(の開始/終了など)に同期するのを禁じるということが考えられる。ところが、事はそう単純ではない。<seq>
要素の中にprefetch要素がある場合を考えてみよう。たぶん最も単純な解決は、prefetch要素との同期を許可すること、そしてprefetchが行なわれない/失敗した場合には、持続時間0で開始時イベントと終了時イベントを同時に起こすようにすることである。