ストリーミングについての右往左往

最近ストリーミングサーバが気になり、ちょこちょこサーバに仕込んでみたりしてます。いろいろと方法があるらしいのですが、Macばっかりつかってますので、Apple周りでできる事を中心に。

1)そもそもストリーミングサーバとはなにか?
映像や音楽をPCで楽しむ際に、みなさんいろんなソフトを使っていろんなソースで視聴しているとおもいます。ただし、普通は長さが決まっているデータを再生する、ってことになります。

ところが、この方式の場合こまったことがおきて、例えば2時間の音楽なら2時間分のデータが必要です。無駄にたくさんのデータが必要になるし、途中で途切れたらやり直し。
これを解消して、電波放送みたいにネットワーク上でメディアをやり取りする方法がストリーミングということです。

昨今ではyoutubeとかで簡単に映像が視聴できますが、これはプログレッシブと呼ばれる方法である大きさのファイルサイズの一部分をローカルにダウンロードして、再生してもダウンロードが間に合うだろうというところで再生が始まるものです。よって、この場合は一部のデータがダウンロードされるカタチになります。

もう一つがリアルタイムと呼ばれる方式で、ダウンロードせずに(とも言い切れないのですが)データが届いたそばから再生していくという方式です。この場合、途中でデータが壊れてもおかまいなく、どんどん来たデータを表示していくことになります。

これが大枠で、これらの事を実現するサーバとは???ということになります。

2)Darwin streaming server

ググってみますと、フリーでは Darwin streaming serverというのがあるみたい。
こちらはリアルタイム配信を実現するサーバです。
これは、こちらのサイトの通りやると簡単に実現できました。

http://www.bamboo.mydns.jp/wordpress/archives/102

音でできたのがこちら(コンテンツはサンプルのままです。。。)
http://ziglab.net:8001/test

映像はこちら (quicktimeが開きます)
rtsp://ziglab.net:554/testmov

Darwin streaming server管理画面一例
管理画面もウェブでアクセスできて便利。
これにあとMacの場合quick time broadcaster というアプリケーションを使うと、リモートにあるマシンから映像を送って配信ということも簡単に実現できてしまいます。

が、一つ問題があって、この形式だとどうもiPhoneでは再生できないみたい。ファイアウォールに引っかかると見れないかも、、、などという事です。
この場合はhttp livestreaming protocolという規格があって、こちらでやるらしい、、、さて、、、。

3)HTTP live streaming protocol

はて?ということなのですが、HTTPというプロトコルで、ストリーミング的な事をやりましょう、とういう取り決めです。この場合、RTSPとは異なって、HTTPでファイルのやり取りが基本となります。
メリットとしてはHTTPなのでファイアウォールでブロックされる事が少ない、iPhoneで見れる(というか、事実上iPhoneではコレしか認めてないような状況です)
具体的には、一つのソースファイルをぶった切って細切りにしたモノを、指定のリストファイルに記述された順番で再生しましょう、という取り決めになっているモノです。

具体的にはどうやるのってことで、調べてみますと、普通のWebサーバ、そしてFFMPEG、これに加えて、segmenterというのがいるらしい。segmenterは映像ファイルなどを配信できるように分割して、かつそのリストである.m3u8ファイルをつくるものらしい。

http://d.hatena.ne.jp/rmiya/20100202/1265117557

FFMPEGはめんどくさい、、、ということだけ覚えていたのですが、ふたたびサーバにインストール。FFMPEGインストールについては、CentOS5にインストールしました。こちらのページを参考にしつつ、上手くビルドできないので、最終的なconfigureは下記のようにしました。(たぶん、、、)

http://kenknown.blog42.fc2.com/blog-entry-208.html

./configure --enable-gpl --enable-nonfree --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libx264 --enable-shared

で、一番はまったのはsegmenterのビルドで、ビルドできない。そもそも、Cのファイルをちゃんとビルドしたことが無いだけにどうすんべー、と。

で、調べますと、242行目のguess_formatというのがいかんらしく、コレをav_guess_formatに書き換えるとなんとかビルドできました。

http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/

この過程で、FFMPEGにpathが通らなかったりなどがおきますが、lnでリンク貼ったりしてこちらも解消。

結果がこのページ。(音楽は、、、アーティストの皆様あざっす!)ま、見た目は正直単なる動画が貼られているだけなのですが、いやー、いろいろと大変だこりゃというのがまず最初の感想。

http://ziglab.net/lab/httplivestreamtest.html

もう一つは、さて、これクライアントから映像を投げて配信するにはどうしたらいいの?っていうこと。自前ustream的な事をするにはまだまだ壁がありますなー。

コメント

このブログの人気の投稿

Python学習帳

ライトウェイトデザインアプリ続く UIのモックアップ作成!