今更ながらDirectAnimationを使用したMovie再生


msnews  microsoft.public.jp.mediaplayer ニュースグループにて
ブラウザからMediaFileにアクセスするも、User=AgentがMediaPlayerからファイルを要求するため
cooikeがwwwサーバに到達せず、wwwサーバよりリクエストを拒否し再生が出来ない
という投稿を発見した。

なるほど、そういう事になるのか・・・と ある意味関心した私は調査を開始した。

単純に
http://hoge.co.jp/media.asf
とアクセスしてもダメらしいから、HPにMediaPlayerのActivXコントロールを貼り付け
そこからアクセスしたらどうなるか調べてみた。

既にサイトに用意していたMediaPlayer組み込みデモページがあったので
それにアクセスし、ブラウザが要求するHTTPヘッダーを覗いてみた。
HTTPヘッダを覗くにはこれも私が自作した転送兼モニターServerを利用することとした。

・EgbServerでHPに組み込まれたMediaPlayer(AciveXコントロール)から要求するHttpヘッダを覗く

 まず、EgbServerを起動する


C:\・・デスクトップ\EgbServer>java -jar Egbserver.jar 1000 homepage3.nifty.com 80

TransServer started on port 1000

<自PCの port 1000番で リクエストを待ち homepage3.nifty.com のport 80 番に転送する>

そしてIEのプロキシ設定を localhost の port 1000 番に設定。

MediaPlayer組み込みデモページ にアクセス。

その結果が以下

中略
------------------------------
GET http://tokeon.o.oo7.jp/Media/meetdemo/mov/akubi.jpg HTTP/1.0
Accept: */*
Referer: http://tokeon.o.oo7.jp/Media/meetdemo/yobidasi.html
Accept-Language: ja
Pragma: no-cache
If-Modified-Since: Tue, 11 Jun 2002 18:25:15 GMT
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: homepage3.nifty.com
Proxy-Connection: Keep-Alive
Cookie: Tokeo=0; Date=2002/06/12%2009%3A16%3A47

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[18]Client(127.0.0.1:2707) -> [18]Server(61.XXXX:80) 転送サイズ:424
[18]Server(61.XXXX:80) -> [18]Client(127.0.0.1:2707) データ転送開始
------------------------------
HTTP/1.1 304 Not Modified
Server: Zeus/3.4
Date: Fri, 21 Jun 2002 12:59:09 GMT
Connection: close

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[18]Server(61.XXXX:80) -> [18]Client(127.0.0.1:2707) 転送サイズ:103
[18]Server(61.XXXX:80) -> [18]Client(127.0.0.1:2707) 転送終了:103

[18]Client(127.0.0.1:2707) -> [18]Server(61.XXXX:80) 転送終了:424

[19]Client(127.0.0.1:2712) -> [19]Server(61.XXXX:80) データ転送開始
------------------------------
GET http://tokeon.o.oo7.jp/Media/meetdemo/mov/akubi.asf HTTP/1.0
Accept: */*
User-Agent: NSPlayer/7.1.0.3055
Proxy-Connection: Keep-Alive
Host: homepage3.nifty.com
Cookie: Tokeo=0; Date=2002/06/12%2009%3A16%3A47

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[19]Client(127.0.0.1:2712) -> [19]Server(61.XXXX:80) 転送サイズ:231
[19]Server(61.XXXX:80) -> [19]Client(127.0.0.1:2712) データ転送開始
------------------------------
HTTP/1.1 200 OK
Server: Zeus/3.4
Date: Fri, 21 Jun 2002 12:59:20 GMT
Connection: close
Content-Length: 57517
Content-Type: video/x-ms-asf
Last-Modified: Tue, 11 Jun 2002 18:25:25 GMT

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[19]Server(61.XXXX:80) -> [19]Client(127.0.0.1:2712) 転送サイズ:36500

[19]番目のリクエスト、ここがまさしくUser-AgentにMediaPlayerとなっている。


ではどうすれば、、、この件はいろいろ試されたようだが、これという結果が無いようだ。

私はここでまた思い出した、、、そうDirectAnimationを使ったMedia再生を!

これはIEに組み込まれたマルチメディア・アニメーションを容易に実現する物で、
Media再生にはDirectXを利用してストリームアクセス、デコード、再生を行うらしい。。


先の経験やScriptサンプルから
以下の様なHTML(このページ後方がその実体)を作成し確認することに。

<HTML>
<HEAD>
<TITLE>DirectAnimation Movie Play</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=shift_jis">
</HEAD>

<BODY STYLE="font-size:9pt;" onload="start()">
<SCRIPT language="JScript">
<!--
var m;
var movieImg;
var movieSnd;
function start() {
Setup("") ;
}
function Setup(initmovie)
{
    m = DAControl.PixelLibrary;
    //Movieを仮にインポート
    movie = m.ImportMovie(initmovie);
// A movie is treated as an image and a sound.
// Here we make the movie's video track loop, by
// only allowing time to range from 0 to the duration
// of the movie.
    movieImg = m.ModifiableBehavior(
        movie.Image.SubstituteTime(m.mod(m.LocalTime,movie.Duration)));
// Now we make the movie's sound loop.
// Sound is a continuous media, so all we need to do is
// create a looping version of the sound track.
    movieSnd = m.ModifiableBehavior(movie.Sound.Loop());

    DAControl.Image = movieImg ;
    DAControl.Sound = movieSnd ;
    DAControl.Start() ;

}
function SetMovie(movurl) {
    movie = m.ImportMovie(movurl);//document.all('movf').value) ;
    movieSnd.SwitchTo(movie.Sound);
    movieImg.SwitchTo(movie.Image);
// movieSnd.SwitchTo(movie.Sound.Repeat(1));
// movieImg.SwitchTo(movie.Image.Repeat(1));
// movieSnd.SwitchTo(movie.Sound.RepeatForever());
// movieImg.SwitchTo(movie.Image.RepeatForever());
}
//-->
</SCRIPT>

<H2>DirectAnimationを使用したMovie再生</H2>
<HR>

<OBJECT ID="DAControl" WIDTH=200 HEIGHT=200 ALIGN=Center    
   CLASSID="CLSID:B6FFC24C-7E13-11D0-9B47-00C04FC2F51D">
</OBJECT>
<BR>
<hr>
<form>
Movie url/file:<input type=text size =80 name="movf"
value="http://tokeon.o.oo7.jp/Media/meetdemo/mov/pat64.asf">
<br>
<input type=button value="設定開始・リピート " onClick="SetMovie(movf.value)">
</form>
<hr>
</BODY>
</HTML>
どうですか?
上の太文字部分がDirectAnimationでMovieを再生するScript!たった10行もあれば出来る!
そして青文字がDirectAnimationコントロール!! IE4以上(確か?)であればインプリメントされている。


そして、そのページurl(ここの事)を表示




Movie url/file:

設定開始を押して、Movieのロードと再生が始まる。

この時のMovieファイルへのアクセスリクエストは。
[4]Client(127.0.0.1:1197) -> [4]Server(61.XXXX:80) データ転送開始
------------------------------
GET http://tokeon.o.oo7.jp/Media/meetdemo/mov/pat64.asf HTTP/1.0
Accept: */*
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: homepage3.nifty.com
Cookie: Tokeo=0; Date=2002/06/12%2009%3A16%3A47

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[4]Client(127.0.0.1:1197) -> [4]Server(61.XXXX:80) 転送サイズ:262
[4]Server(61.XXXX:80) -> [4]Client(127.0.0.1:1197) データ転送開始
------------------------------
HTTP/1.1 200 OK
Server: Zeus/3.4
Date: Fri, 21 Jun 2002 13:54:41 GMT
Connection: close
Content-Length: 184505
Content-Type: video/x-ms-asf
Last-Modified: Tue, 11 Jun 2002 18:24:39 GMT

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[4]Server(61.XXXX:80) -> [4]Client(127.0.0.1:1197) 転送サイズ:184698
[4]Server(61.XXXX:80) -> [4]Client(127.0.0.1:1197) 転送終了:184698

[4]Client(127.0.0.1:1197) -> [4]Server(61.XXXX:80) 転送終了:262

まさに、AgentはMSIE6!そして、Cookieもしっかり通ってます!!

もう忘れられているようで・・・DirectAnimationは素晴らしい

これは本当に素晴らしい、その一例を このページに示す。
これは、Movieファイルを背景gifにインポーズし、再生しながら、回転とマウスによる移動まで行える!
まさにマルチインタラクティブMovieページである。
これがjavaアプレットの様にアプレットをダウンロードする時間もかからなければ
別にActiveXの様にインストール手順を踏むこともなく、
JScriptだけで制御出来てしまうのだ!


2002/6/21 企画、作成 Engineering-B H.tokeo(tokeon@rainbow.plala.or.jp)本田とけお

本記事の問い合わせはEnginieering-B までお願いします。