CaptureStream Ruby版を使ってCentOS 5.5上でNHK語学講座をダウンロードする

今年度のNHK語学番組が始まったので、気持ちも新たにNHKの語学講座に取り組んでみようという人も多いはず。放送時間帯に帰宅してラジオを聞くことができない人にとって、一昔前まではラジオを録音するか、CDを購入しなければ継続して学習することが難しかった。しかし最近はNHK語学番組のWEBサイトにて過去1週間分のストリーミング放送を聞くことができるようになった。これでも十分進歩したのだが、FLASHで動いているためにiPhoneを利用して聞くことができない点が惜しい。また、過去1週間分よりも前のバックナンバーを聞くことはできない。
そのような問題を解決するためのソフトウェアが、今回紹介するCaptureStreamである。CaptureStreamはNHKの語学講座のうちストリーミング放送されている番組をダウンロードし、mp3としてローカルに保存するソフトウェアである。CaptureStreamを使うことにより、過去の放送を手元に残しておくことができ、iTunesなどと同期することでiPhoneで聞くことができる。
CaptureStreamはWin版/Mac版/Linux版/Ruby版があるが、今回はcronで定期的に取得することが可能であるRuby版を使ったものを紹介する。

目次
  1. flvstreamerのダウンロード、コンパイル
  2. CaptureStreamの設定
  3. 動作確認
  4. cronの設定
  5. 終わりに

flvstreamerのダウンロード、コンパイル

CaptureStreamを利用する際に必要となる、ストリーミングを保存するflvstreamerを準備する。既にコンパイルされているものをダウンロードすればよいのだが、今回はCentOS 5.5の64bit環境だったので、ソースからコンパイルして作成する。
今回の作業ログは「/home/foltia/tmp」を作業ディレクトリとしている。ソースファイルをダウンロードし、解凍、コンパイルまでを一気に実施する。

[foltia@foltiasrv tmp]$ wget http://download.savannah.gnu.org/releases/flvstreamer/source/flvstreamer-2.1c1.tar.gz

[foltia@foltiasrv tmp]$ tar zvxf flvstreamer-2.1c1.tar.gz 
flvstreamer/
flvstreamer/thread.h
flvstreamer/log.h
flvstreamer/rtmp.c
flvstreamer/ChangeLog
flvstreamer/Makefile
flvstreamer/ChangeLog.rtmpdump
flvstreamer/streams.c
flvstreamer/bytes.h
flvstreamer/log.c
flvstreamer/rtmpsrv.c
flvstreamer/thread.c
flvstreamer/rtmpsuck.c
flvstreamer/COPYING
flvstreamer/parseurl.c
flvstreamer/amf.c
flvstreamer/amf.h
flvstreamer/flvstreamer.c
flvstreamer/rtmp.h
flvstreamer/README
flvstreamer/parseurl.h

[foltia@foltiasrv tmp]$ cd flvstreamer

[foltia@foltiasrv flvstreamer]$ make posix
make[1]: ディレクトリ `/home/foltia/tmp/flvstreamer' に入ります
gcc -Wall   -DFLVSTREAMER_VERSION=\"v2.1c1\" -O2   -c -o log.o log.c
gcc -Wall   -DFLVSTREAMER_VERSION=\"v2.1c1\" -O2   -c -o rtmp.o rtmp.c
gcc -Wall   -DFLVSTREAMER_VERSION=\"v2.1c1\" -O2   -c -o amf.o amf.c
gcc -Wall   -DFLVSTREAMER_VERSION=\"v2.1c1\" -O2   -c -o flvstreamer.o flvstreamer.c
gcc -Wall   -DFLVSTREAMER_VERSION=\"v2.1c1\" -O2   -c -o parseurl.o parseurl.c
gcc -Wall  log.o rtmp.o amf.o flvstreamer.o parseurl.o -o flvstreamer 
gcc -Wall   -DFLVSTREAMER_VERSION=\"v2.1c1\" -O2   -c -o streams.o streams.c
gcc -Wall   -DFLVSTREAMER_VERSION=\"v2.1c1\" -O2   -c -o thread.o thread.c
gcc -Wall  log.o rtmp.o amf.o streams.o parseurl.o thread.o -o streams -lpthread 
gcc -Wall   -DFLVSTREAMER_VERSION=\"v2.1c1\" -O2   -c -o rtmpsrv.o rtmpsrv.c
gcc -Wall  log.o rtmp.o amf.o rtmpsrv.o thread.o -o rtmpsrv -lpthread 
gcc -Wall   -DFLVSTREAMER_VERSION=\"v2.1c1\" -O2   -c -o rtmpsuck.o rtmpsuck.c
gcc -Wall  log.o rtmp.o amf.o rtmpsuck.o thread.o -o rtmpsuck -lpthread 
make[1]: ディレクトリ `/home/foltia/tmp/flvstreamer' から出ます

[foltia@foltiasrv flvstreamer]$ ./flvstreamer 
FLVStreamer v2.1c1
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
ERROR: You must specify a hostname (--host) or url (-r "rtmp://host[:port]/playpath") containing a hostname

最後にコンパイルされたflvstreamerを実行し、正しくコンパイルされているかを確認している。

CaptureStreamの設定

2011/04/05追記:4/4に新年度に対応した緊急対応版がリリースされています。
次にRuby版CaptureStreamのファイルを設定する。設定するのは、ダウンロードしたい番組名を選ぶ部分だけである。説明によると

このデフォルトの動作を変えたい場合は、この下にある
	$default_target = ["basic1"]
の"basic1"をお好きなものに変えてください。複数指定可能です。入門ビジネス英語と実践ビジネス英語を指定するには
以下のように設定します。
	$default_target = ["business1", "business2"]

である。今回は英語5分間トレーニング、入門ビジネス英語、実践ビジネス英語をダウンロードしたいので、

$default_target = ["training","business1", "business2"]

となる。

動作確認

以上で準備は整ったので、後はそれぞれのファイルをディレクトリに格納する。今回は「/home/foltia/ruby」というディレクトリに格納した。

[foltia@foltiasrv ruby]$ ls
CaptureStream.rb  flvstreamer

Ruby環境がインストールされていることを確認して、実行テスト。

[foltia@foltiasrv ruby]$ ruby -v
ruby 1.8.5 (2006-08-25) [x86_64-linux]

[foltia@foltiasrv ruby]$ ruby CaptureStream.rb
training: *******
business1: ***
business2: ***

[foltia@foltiasrv ruby]$ ls
CaptureStream.rb  英語5分間トレーニング  入門ビジネス英語
flvstreamer       実践ビジネス英語

実行が成功すると、ディレクトリ内に番組名のディレクトリが作成され、その中にmp3ファイルが作成されているはずである。

cronの設定

ここまでうまくいったのであれば、最後に定期的に実行されるようにcronを設定する。NHK語学番組のページが更新されるのは、毎週月曜日の午前10時。よってそれ以降の11時にcronが実行されるように設定する

[foltia@foltiasrv ruby]$ crontab -e

0 11 * * 1 ruby /home/foltia/ruby/CaptureStream.rb >/dev/null 2>&1

以上で設定は完了となる。

終わりに

一度保存したmp3ファイルはiTunesで同期してもいいし、AudioGalaxyでストリーミング再生してもいい。自分の環境にあった方法で聞くことができる。しかも聞き逃すこともない。これで後は本人のやる気次第!


 fujitaka