2004年06月28日

Win32版Apache::MP3

ApacheでMP3等をストリーミング配信するためのApache::MP3モジュールをWin32版Apacheで使うためのお話。
なお、LAN内での使用を前提としていますので、このエントリでは一切セキュリティは考慮していませんのであしからず。

それで正直な話、こっちのエントリは今回のエントリへの布石です。
というわけで上記エントリの環境構築が既に終わっているものとして話を進めます(笑)

まず最初にApache::MP3モジュールをインストールしますが、Apache::MP3はAPANには登録されてないためCPAN経由で次のようにしてインストールしてください。

(コマンドプロンプトから)
C:\>perl -MCPAN -e shell
cpan>install Apache::MP3
なお、ここで初めてCPANを使う場合、初期設定をしなければいけませんが、上記エントリでの設定が完了していればほとんど[Enter]キーを押しているだけでインストール出来ます。

ただし、地域を尋ねられたときだけ「2(ASIA)」→「4(Japan)」を選択して、その次にURLが並んだ質問で「1 2 3 4 5 6 7」と1〜7までスペース区切りで入れてやればセットアップが完了します。

で、うまくいけばインストールが完了して「C:\Perl\site\lib\Apache」に「MP3.pm」というファイルが出来上がりますので確認してください。

しかし、このままでは動かないですし日本語ファイル名も全く扱えないので、これに私が適当に作成したPatchを当てます。
まず、MP3.pmは読み取り専用属性が付いているので、MP3.pmを右クリックしてメニューから「プロパティ」を呼び出して「読み取り専用」のチェックボックスを外してください。

次にWindowsにはpatchコマンドが無いため、

をダウンロードし解凍して、展開された中身から「patch.exe」を「C:\Perl\bin」に移動してください。

次に↓のpatchファイルへのリンクを右クリックして「対象をファイルに保存」で「C:\Perl\site\lib\Apache」に保存してください。
MP3.pm.win32_jpn.patch

最後に新しくコマンドプロンプトを開いて、

c:\>cd C:\Perl\site\lib\Apache
C:\Perl\site\lib\Apache> patch -b .org < MP3.pm.win32_jpn.patch
を実行して、
Hmm...  Looks like a new-style context diff to me...
The text leading up to this was:
--------------------------
|*** MP3.pm.org Mon Oct 14 12:21:56 2002
|--- MP3.pm     Tue Jun  8 16:58:50 2004
--------------------------
Patching file MP3.pm using Plan A...
Hunk #1 succeeded at 10.
Hunk #2 succeeded at 57.
Hunk #3 succeeded at 73.
Hunk #4 succeeded at 181.
Hunk #5 succeeded at 261.
Hunk #6 succeeded at 350.
Hunk #7 succeeded at 384.
Hunk #8 succeeded at 405.
Hunk #9 succeeded at 478.
Hunk #10 succeeded at 522.
Hunk #11 succeeded at 540.
Hunk #12 succeeded at 590.
Hunk #13 succeeded at 636.
Hunk #14 succeeded at 709.
Hunk #15 succeeded at 720.
Hunk #16 succeeded at 1005.
Hunk #17 succeeded at 1057.
done
と表示されれば無事パッチ完了です。

もし表示されなかった場合は、残念ながらCPANに登録されているApache::MP3自体のバージョンが上がってしまったようです。
すみませんががんばって手でパッチ当ててください(^^;

次に、今当てたパッチを正常に動作させるために必要なモジュールをインストールします。
こちらはAPAN経由でインストール出来ますので、コマンドラインから次のようにコマンドを打ってください。

C:\> ppm3 install 'ShiftJIS::CP932::MapUTF'
これで必要なモジュールは全てインストール完了です。

次にApacheの設定ファイルを編集します。
「C:\Program Files\Apache Group\Apache2\conf\httpd.conf」を開いて、次の設定を設定ファイルの最後に追記してください。

AddType audio/mpeg .mp3 .MP3
AddType audio/playlist .m3u .M3U
AddType audio/x-scpls .pls .PLS
AddType application/x-ogg .ogg .OGG

Alias /music "C:/あなたのMP3ファイルの置き場"

<Location /music>
 SetHandler perl-script
 PerlHandler Apache::MP3
 PerlSetVar		AllowDownload	No
 PerlSetVar		AllowStream	Yes
</Location>
あと、現状では画面表示に使うアイコンが無いので、 からp5-Apache-MP3-3.04.tgzをダウンロードして、またまたコマンドプロンプトで
C:\> cd p5-Apache-MP3-3.04.tgzをダウンロードしたフォルダ
C:\xxx> tar zxvf p5-Apache-MP3-3.04.tgz share/apache_mp3
等として展開して、出てきたshareフォルダの中にある「apache_m3」フォルダを「C:\Program Files\Apache Group\Apache2\htdocs」に移動させてください。

この状態でapacheを再起動させて、ブラウザから「http://127.0.0.1/music」にアクセスし、無事MP3のリストが表示されれば設定完了です。

あとは権利的に問題の無い範囲で煮るなり焼くなり好きにしてください(笑)

それから自作パッチ版Apache::MP3の制限として次のようなものがあります。

  • Apache::MP3上から楽曲のダウンロードが正常に出来ない
    (少なくても手元の環境では、なぜかmod_perl経由だとファイルのパーミッションで怒られるのでApacheの設定で殺しています)
  • デフォの更新チェックがうまくいかないのでリスエスト毎に毎回ページを書き直すようにしてます。
    (直せそうですが、面倒なのと負荷は気にしてないので手をつけてません(笑))
  • 日本語ファイル名・フォルダ名を使っている場合、WinAMPではおそらくストリーミング再生出来ない
    (これはWinAMP側が長いURL(255Byte以上)を全く考慮してないのが原因なので、かなり改造しないとApache::MP3側での対応は難しそうです・・・)
    なお、WindowsMediaPlayerではきちんと再生出来ますので、m3uファイルの関連付けをWMPに戻せばとりあえずは動きます(^^;;;
【今回の改変で参考にさせて頂いたサイト】 Posted by Takuchan at 2004年06月28日 13:11 | トラックバック(0)