OS/2(あと Win32)のコンソールで radiko を聴く、的な

いわゆる rtmpdump でデータ落としてオンザフライで再生、的な感じのアレです。
とりあえず OS/2 版のバイナリ作っておきました。OpenSSL のランタイムも必須です。

なんかそれらしいキーワードでぐぐると「rtmpdump | ffmpegでflv(AAC)→wav(PCM) | 適当なプレーヤ」みたいな3段構えになってる例ばっかりだったのですが、AAC 再生に対応している mplayer なら(ほどよく -cache 指定すれば)rtmpdump の出力をそのまま再生可能です。ただし、先読みキャッシュ必須かつ mplayer 自身の再生開始処理のせいで再生時刻が少しズレます。

ということでなんとなくバッチファイル化してみますた。OS/2 用ですが Win32 でも使えます(実質1行だし)。Win32 版の mplayer はふつーにこのへんから取ってきました。rtmpdump はオフィシャルサイトWindows 版 2.2b + OpenSSL-0.9.8k のランタイム DLL の組み合わせで Windows2000 で再生できました。

@echo off

set RTMPDUMP=rtmpdump
set RTMPSERVER=rtmpe://radiko.smartstream.ne.jp:1935
 rem set RTMPOPT_SWF=-s "http://radiko.jp/player/player_0.0.9.swf"
set RTMPOPT_SWF=-s "http://radiko-dl.ssdl1.smartstream.ne.jp/radiko-dl/1.1/player/player_0.1.2.swf"
set RTMPOPT_URL=-p "http://radiko.jp/player/player.html"
set MPLAYER=mplayer
set MPLAYER_OPT=-cache 64

goto LOC_0

:README_JP_TXT

listen_radiko.cmd

コンソールで radiko.jp 再生、的なサンプル(Win32 とか OS/2 とか用)
rtmpdump で抽出した flv ストリームをそのまま mplayer に(パイプでつないで)
食わせています。(mplayer が aac 再生可能でないとダメ)
mplayer や rtmpdump にパスが通っていない場合はあらかじめ
設定(しておくか、ファイル先頭の環境変数指定を適当に変更)してください。

あと rtmpdump は OpenSSL のランタイム DLL が必須なので、適当にそれらしい
パッケージを入手して、DLL を適切な場所に置いてください。

ダウンロード先(一例)

OpenSSL ランタイム:
  Windows 版 http://code.google.com/p/openssl-for-windows/
  OS/2 版    http://ebisa.hp.infoseek.co.jp/os2/index.htm#openssl
             (もしくは http://hobbes.nmsu.edu から openssl で検索)


ちなみに、まともな中断方法はないので、適当に Ctrl-C を何度か叩くとか
外部から終了させるかといった方法をとっていただくことになります。
OS/2 の場合は "kiluu mplayer rtmpdump" が一番スマートな方法かもしれません。
割とマジで。


割と必須な mplayer オプション
  -cache        先読みキャッシュサイズ指定。今回のようなオンザフライの
                ストリーム再生にはほぼ必須だが、サイズを大きくすると
                そのぶんだけ再生時刻がずれる。
                (自分の環境でまともに再生される最低限度の設定にしている
                ので、場合によってはもっと数値を増やしたほうがいいかも…)

環境によっては割と有用な mplayer オプション
  -ao           オーディオ出力デバイス選択。
                最近の OS/2 版だとデフォルトで uniaud 出力になるけど
                現状では正直、環境選びすぎだと思われ…
                OS/2 版で dart 出力にする場合は -ao kai:dart とする。
                すこし古めの OS/2 版の場合は -ao dart(もしくは無指定)。

  -srate        出力サンプルレート強制指定
                サウンドカードやドライバによっては 44.1KHz 系に指定しないと
                まともに音が出ない場合がある(-srate 44100)。
                逆に 48KHz 系に指定しないとダメな場合もある(-srate 48000)。
                (OS/2 のオーディオドライバはけっこう泥沼ですヨ、いやほんと…)
                今回の場合はラジオクオリティな音質なので、22K/24K ぐらいの
                指定をしてもいいのかも(-srate 22050 あるいは 24000)。

2010-03-31
  OS/2 版のをすこし手直し(mplayer の OS/2 固有オプションを抜いといた)
2010-04-11
  rtmp → rtmpe
2010-04-30
  --swfUrl と --pageUrl オプション追加
  (swf のほうだけつけとけばいい気もする…少なくとも今のところは)
2010-06-09
  --swfUrl を現状にあわせて修正


:LOC_0
if not "x%1" == "x" goto LOC_play

rem HELP
echo radiko.jp コンソール再生テスト用バッチファイル
echo 用法: %0 局名
echo 局名(東日本)
echo   TBS  TBSラジオ
echo   QRR  文化放送
echo   LFR  ニッポン放送
echo   NSB  ラジオNIKKEI
echo   INT  InterFM
echo   FMT  Tokyo FM
echo   FMJ  J-Wave
echo 局名(西日本)
echo   ABC  ABCラジオ
echo   MBS  MBSラジオ
echo   OBC  ラジオ大阪
echo   CCL  FM COCOLO
echo   802  FM 80.2
echo   FMO  FM Osaka
goto LOC_exit


:LOC_play
%RTMPDUMP% -q -vr "%RTMPSERVER%/%1/_defInst_/simul-stream" %RTMPOPT_SWF% %RTMPOPT_URL%| %MPLAYER% %MPLAYER_OPT% -

:LOC_exit

はてな構文ハイライトがバッチファイル未対応っぽいことに絶望した!brainfuck 未満の扱いであることに絶望した!
絶望したのでスーパーpre記法で(無効なのはわかっていながら)">|bat|" とか指定しておいた! 忘れたころに見直したらカラフルな表示になってるかもしれないからね…(ほんとに絶望してんの?)

(2010-04-30) とりあえず現時点で聴けるようにすこし直してみたりして。まあでも今後もちょろちょろ変わりそうな気はする…