ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

手作りネットプロトコル工房コミュのShoutCastのHTTPとの互換性

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ShoutCastのProtocol仕様は、残念ながら全くドキュメント化されていません。 世界中の人たちが調査した結果があちらこちらで公開されていますが、完璧なものは一つもありません。

実は、このShoutCastというプロトコルは、HTTPと互換性があり、既存のインターネットアプリケーションと愛称が良いといわれています。

先日、気になってテストプログラムを書いて調べてみたのですが、確かにHTTPと似ているのですが、実際にはかなり異なった処理をしていると言うことがわかりました。

リクエスト側のヘッダーフィールドはHTTPとほとんど同じ形式で送信されるのですが、レスポンス側のヘッダーフィールドはHTTPで要求されるヘッダーフィールドはほとんど1つもなく、独自ヘッダーフィールドで構成されていました。

以下の様な感じです。

ICY 200 OK
icy-notice1: <BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>
icy-notice2: SHOUTcast Distributed Network Audio Server/SolarisSparc v1.9.5<BR>
icy-name: .977 The 80s Channel (80s Grooves)
icy-genre: 80s Pop Rock
icy-url: http://www.club977.com
icy-pub: 1
icy-metaint: 8192
icy-br: 128
icy-irc: #shoutcast
icy-icq: 0
icy-aim: N/A


またリクエスト時に普通のHTTPで一般的なヘッダーフィールドを与えてみるとほとんどの場合エラーで帰ってくることに気が付くと思います。 これには随分と悩まされたのですが、色々試してみたら、User-Agentがない場合には、404を返すような仕掛けになっているようです。

以下の様なコードで出力しました。
out.write(
  "GET /stream/1040 HTTP/1.1\r\n"
  // + "User-Agent: WinampMPEG/2.00\r\n"
  + "User-Agent: \r\n"
  + "Icy-MetaData:1\r\n"
  // + "Host: localhost\r\n"
  // + "Accept: */*\r\n"
);
out.write( "\r\n" );


僕は、以前RFCを学習したばかりの頃は、決まったルールに従って厳格厳密に定義されているのかと思っていたんですが、実際には色々とあいまいな部分が多かったり、読む側もある程度は柔軟に読み替えたり、現実的には、一般的なアプリケーションの動作を観察したりしているようです。

みんなかなり勝手なことばかりやっているのだな、とそんなことを思ったこともありましたが、そういえば HTTPの中でも比較的新しい仕様「Cookie」は、今ではすっかり定着してしまいましたが、最初はNetScape社の独自拡張だったそうです。

仕様にとらわれずに自由に発想を出して良いシステムを目指すことが大切ということですね。

コメント(2)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

手作りネットプロトコル工房 更新情報

手作りネットプロトコル工房のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング