世の中にあるマルチキャストで流れている情報を FreeBSD 上で閲覧しよう。と言うのが今回の目的です。ちょっと感動ですよ;-)。
※これの続きは 4.7-RELEASE の方に書きました。そっちも参考にしてみてください。
と、言う事で基本的には RTP/RTCP プロトコルなマルチキャストデータを拾う事になるのですが、この辺りを今現在で一番利用しているのが多分、XCAST6 だと思います。と、言う事で、SDR/VIC/RAT 辺りを揃えてインターネット会議すると言う感じですね;-)。これらについては関係各方面に利用方法が載っているのでそちらを参考にしてください。
とは言いつつ、実は web で探しても結構少ないです;-)。この辺りでしょうかねぇぇ。後は http://www.openmash.org/ なんてのが有ります。
今回の本題は SDP で流れてきたストリーミングを見る(基本的にサーバは Darwin Streaming Server を利用する)のと、WMV (Windows Media Video)のストリーミングを見る。と言う事で特定しましょう;-)。ふふふ。
普通、Darwin Streaming Server(QTSS=QuickTime Streaming Server) には QuickTimePlayer-6 が必要ですが、残念ながら FreeBSD 版は有りません。WMT(Windows Media Technologies) は WindowsMedia Player7 が必要ですがこらまた FreeBSD 版が有りません。.NET に期待してそれまで待つか。と言う感じですが、どっちにしても現状は Windows か Mac OS X を利用するしか手が有りません。
あーー。ここまで書いて思い出した。今回はサーバ側のお話は一切無しです。クライアント側のお話のみです;-)。
情報収集
まず最初に RTC/RTCP (Real Time Protocol / Real TimeControl Protocol)に付いていろいろ知りましょう。そして、RTSP (Real Time Streaming Protocol)も重要です。それらの情報を集めるには http://www.rtsp.org/ が一番でしょう;-)。
と、言う事でいろいろ見ていると最後にたどり着くのが http://www.live.com/openRTSP/ 辺りでしょうか。トップに戻って http://www.live.com/ 辺りを覗くと、おーー。結構いろいろありまんな;-)。ここにはクライアントの他にもサーバ関係のプログラムもあるのでいろいろ試してみてください;-)。
クライアントのインストール
どんなモンか解って来たと思うので、では実際に QTSS や WME のデータを見るためのアプリケーションをインストールする事にしましょう。 mplayer と言うのを使います。 FreeBSD では /usr/ports/graphics/mplayer として入っているのでまずは make してしまいましょう。関連する Codec などもドバドバと入るので非常にらくちんですね。
mplayer 自体は普段、DVD や mpeg データを見るために利用するかもしれません。実際には mplayer-0.90 系は確かにその通りです。しかし、開発版である Latest CVS snapshot 版の方はどえりゃー事になっています。 RTC/RTCP/TRSP はもちろん、 Windos Media にまで対応したネットワークストリーミングに対応したバージョンとなっています。
今回はそれを利用する事にします。http://www.mplayerhq.hu/homepage/dload.html から Latest CVS snapshot をダウンロードしてきます。今だと、 MPlayer-current.tar.bz2 になるかと思います。さてと、実際にインストールしてみましょう。
RTSP/RTP なストリーミングも見る必要があるので合せて必要なライブラリもインストールする事にします。http://www.live.com/liveMedia/ を参考にして http://www.live.com/liveMedia/public/ から、live.2002??.??.tgz なるプログラムをダウンロードして来ましょう。?? の部分は日付が入ります。
まずは live の方から make ですね。続いて MPlayer です。 current は展開すると日付のディレクトリが出来ます。
----------------
% tar xvyfp live.2002.09.13.tar.gz
% cd live
% ./genMakefiles freebsd
% make
# mkdir -p /usr/local/live/BasicUsageEnvironment/include
# mkdir -p /usr/local/live/UsageEnvironment/include
# mkdir -p /usr/local/live/liveMedia/include
# mkdir -p /usr/local/live/groupsock/include
# cp BasicUsageEnvironment/libBasicUsageEnvironment.a /usr/local/live/BasicUsageEnvironment
# cp UsageEnvironment/libUsageEnvironment.a /usr/local/live/UsageEnvironment
# cp liveMedia/libliveMedia.a /usr/local/live/liveMedia
# cp groupsock/libgroupsock.a /usr/local/live/groupsock
#
# cp BasicUsageEnvironment/include/* /usr/local/live/BasicUsageEnvironment/include
# cp UsageEnvironment/include/* /usr/local/live/UsageEnvironment/include
# cp liveMedia/include/* /usr/local/live/liveMedia/include
# cp groupsock/include/* /usr/local/live/groupsock/include
%
% cd ..
% tar xvyfp MPlayer-current.tar.bz2
% cd MPlayer-20020912
% ./configure --with-livelibdir=/usr/local/live
% gmake
# gmake install
----------------
こんな感じでしょうか。liveMedia には confirute スクリプトが入っていますがこれはダミーで実は、genMakefiles freebsd が正解です。FreeBSD の環境を変更するには config.freebsd を手で直しましょう。
基本的に liveMedia はストリーミングに必要な RTC/RTCP 辺りのライブラリを作成します。他にも testProgs と言うディレクトリになかなか面白いプログラムが入っているので試してみるとよいかもしれません;-)。
続いて MPlayer のコンパイルですが、ports にある mplayer を一旦 make *だけ* した方が、Codec などに関連するライブラリを一緒にインストールしてくれるので楽です。あと、もしかしたら、 /usr/ports/audio/avifile もインストールした方が良いかも。 /usr/local/lib/win32 辺りに dll 形式の Codec をゴソゴソっと入れてくれます。
その後で、MPlayer-current を make しましょう。オプションとしては --with-livelibdir だけで OK でしょう。 libliveMedia.a などが必要になるのでその path を指定してあげます。終わったらインストールしてあげましょう。
#う゛っ!! この辺り、FreeBSD PRESS の記事の書き方だ。僕本来の書き方に戻そう;-P
実際に利用してみる
では、実際にストリーミング対応な mplayer を試してみましょう。まずは、QTSS 系のストリーミングですが、データの垂れ流し URL 的には
http://192.168.1.1/streaming/list-mpeg.sdp
|
の様な感じで用意されているかと思います。これはストリーミングサーバ管理者の設定次第ですが、拡張子は .sdp と言う形になるかと思います。これを一旦 fetch などでローカルホストに保存します。そして、
----------------
% mplayer -sdp list-mpeg.sdp
----------------
として実行すると無事に再生が始まるようになるかと思います。 mplayer は snapshot を使うとパラメータに URL を指定する事が出来ますが、上記の URL をオプションとして指定しても再生できませんでした。なので一旦保存してからファイルとして指定しましょう。
ちなみに、SDP(Session Description Protocol)ファイルについてはここいら辺りを参考にしてみてください。
さてと、これで QuicTime なストリーミングは見る事が出来る様になりました。続いて Windows Media なストリーミングを見る事にしましょう。最近はやたらと多くなり、FreeBSD は本当に肩身が狭いですよね。GATE01 でもコンテンツ配信していますが FreeBSD では見る事が出来ないです。さてと、丁度今、YAHOO で銀河鉄道 999 をストリーミングで見る事が出来る様です。これを mplayer で見てみることにしましょう。
----------------
% mplayer http://www.bcast.co.jp/webevents/yahoo/movie/999/999op56k.asx
----------------
こんな感じで、URL として指定して上げると見る事が可能です。ただ、ちょっと遅いかな?音は出ているかな?ふむふむ。ちょっと問題点多いか・・。ま、その辺りは今後の仮題と言う事で;-)。
と、言う事でこれはどー考えてもサンプルデータが悪い。と、言う事でガンダムを見る事にしましょう。
----------------
% mplayer http://www.bcast.co.jp/webevents/yahoo/tv/gd_seed_sample_1M.asx
----------------
をーーー。すげー。でけー画面で音がステレオだ。むひひ。同じデータで RealPlayer 版も存在しているけど、こっちは画面が小さくてモノラル音声だし・・。yahoo がすっかり Microsoft に躍らされているとも言えなくはないけど、やっぱ mplayer で見るとその良さが解りますね;-)。
さてと、mplayer は DVD とか、mpeg を見る為にインストールしている人が多いかと思いますが snapshot をインストールするとマルチキャストなストリーミングを見る事が可能です。これで Windows 必要無いでしょ。ふふふ。 WMA と WMV は aviplay で制覇したし、嬉しいですね。後は、mov 形式のファイルを見る方法ですね。xanim では見る事の出来ないフォーマットが随分と増えてきましたしね;-)。
皆さんもストリーミングを FreeBSD 上でお楽しみください;-)。
尚、おまけですが、もしかしたら mplayer は WMP9 を待つ前に IPv6 なストリーミングを見る事が可能かもしれません。liveMedia の groupsock/NetAddress.cpp には gethostbyaddr を呼ぶ所がコメントアウトされています。これを外して下の行(host = NULL;)をコメントアウトするともしかしたら IPv6 なストリーミングを見る事が可能になるかもしれません。
「可能になるかもしれません。」とコメントしたのは、実は IPv6 でストリーミングしているサーバが現状では無いのでこうとしか言えないのです(^^;;。どっかに無いですかねぇぇ? IPv6 でストリーミングしているサイトは・・。
で、実は mplayer が IPv6 対応しないとダメと言う事が解りました。libmpdemux/network.c 内で gethostbyname を使っているのでこの部分を書き換える必要あり。しかし、ここを書き換えたからと言って、すぐにIPv6 Ready になるか?と言われても私には解りましぇん;-)。
後、本当に最後に言い訳ですが、文中、「マルチキャストデータを見る」と言うのと「ストリーミング(ユニキャスト)データを見る」と言うのがごちゃ混ぜで扱われている様な気がしないでもありません。今回私が「 mplayer 凄いよね。」を発見した本来の目的は、「RTP で流れているマルチキャストな mpeg 画像データを何とかして FreeBSD 上で見る事が出来ないか?」と言う所から出発しています。
で、その件については無事に見る事が出来ました。「感動っ!!うふっ。」って後に、「WMT は見えるんかいな? .asx は?」ってんでソースを grep したら「なんだ。対応してるじゃん。」て事になったのでした。なので、実は .asx(ユニキャスト) はおまけだったんですね(^^;;。けど、最近のストリーミングは本当に WMT が多いのでたまたま「嬉しいな。うふっ。」って事になったのでした。めでたしめでたし;-)。
今更全文を書き換えるつもりは無いので最後に言い訳でした(^^;;。