読者です 読者をやめる 読者になる 読者になる

Radikoを録音したものをPodcast配信してスマートフォンで聴く環境を作った

Podcastのいいところ

情報中毒者的な利点は、新聞やニュースサイトと違って、移動中やランニングのBGMとかにながらで聴けるのが大きい。ツイッターのフォローしてる人達の投稿読んでいる時間ないから音声読み上げで聴く、という人もいた。
またPodcastに対応した音楽プレイヤーソフト側でストリーミング、ファイルの未聴状態などを管理してくれるので携帯本体にダウンロードしたりしなくていい。

サーバー環境

Osukini Server / VPS ルート権限ある。今回の為に契約したというわけではなく汎用的なリモートマシンとして普段から使っているやつ。
Radikoは受信元の住所で制限があるはずだけど、俺のサーバはIPアドレスで調べたら所在地が長野県だった気がする。
OS は GNU/Linux Ubuntu maverick。

ワーキングディレクトリ、方針

えーと、すべての作業を~/work/radiko 以下でやるようにしている。
Ubuntu の標準パッケージにあるやつはapt-get でインストールし、ない奴はユーザー領域にインストールする方針。

CRON 実行もユーザー権限でやりたかったんだけど。plagger 時代にうまくいかなかった過去があるので、root から"sudo -u user" として実行するみたいにしている。

必要なツールの準備

このへん

sudo aptitude install wget rtmpdump libmp3lame-dev nasm ffmpeg 

swftoolsのインストール

swfextract というコマンドが必要になるのでswftools をインストールしておく。

SWFTOOLS から最新版をダウンロードしてビルドする。

Radiko録音シェルスクリプト

https://gist.github.com/2780702 これ

https://gist.github.com/875864 をベースに都合の良いよう改造した

以下のように使う

    # Bangumi01 という名前でTBSラジオを10分録音し /var/www/Music へmp3に変換して保存
    $ ./rec_radiko.sh TBS Bangumi01 $((60*10))

flv 形式の中間ファイルはワーキングディレクトリに都度Bangumi01.flv に上書きしてる。
/var/www/Music 以下に保存する時は Bangumi01-20120525.mp3 みたいな命名規則にしている
rtmpdump が中断しちゃったら完遂できないんだけどまだ失敗していないので、リトライなどの対策を考えていない

CRON設定

番組がはじめる時間にシェルスクリプトで放送時間ぶんだけ録音するよう命令している

# sudo crontab -l
30 18 * * 0 cd ~/work/radiko && ./rec_radiko.sh TBS Denpa $((60*90))
0 1 * * 2 cd ~/work/radiko && ./rec_radiko.sh TBS Baka $((60*120))
0 15 * * 3 cd ~/work/radiko && ./rec_radiko.sh TBS Tsutaya $((60*20))
0 1 * * 5 cd ~/work/radiko && ./rec_radiko.sh TBS Megane $((60*120))

今んところこんだけ

Apacheのmod_musicindex をインストール

保存したMP3ファイルをPodcastとして配信するのにはApcheモジュールのmod_musicindex を使うのが楽

    sudo aptitude install libapache2-mod-musicindex
    sudo a2enmod musicindex

今回は専用のサブドメインから配信することにした

# /etc/apache2/sites-available/podcast.example.jp
<VirtualHost *:80>
    Alias /musicindex "/usr/share/mod_musicindex"
    <Directory /usr/share/mod_musicindex">
        Order allow,deny
        Allow from all
    </Directory>

    ServerName podcast.example.jp
    DocumentRoot /var/www/Music
    <Directory />
        Options     Indexes MultiViews FollowSymlinks
        AllowOverride   Indexes

        MusicIndex  On +Stream +Download +Search +Rss -Tarball
        MusicSortOrder      album disc track artist title length bitrate freq filetype filename uri
        MusicFields title artist album length bitrate
        MusicPageTitle  Radio
        MusicDefaultCss musicindex.css
        MusicDirPerLine 3
        MusicDefaultDisplay HTML
        MusicCookieLife 300
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/podcast.example.jp-error.log

    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/podcast.example.jp-access.log combined

</VirtualHost>

ウェブブラウザから podcast.example.jp にアクセスして以下のようになってればOK

Podcast 用のRSShttp://podcast.example.jp/?action=podcast になる

認証かける

私的利用なんだけど、そのままだと一般に公開されている状態なのでURLにパスワードかけておく。
htaccessで設定すればいいと思う。

Listen用にGoogle Readerに登録

http://user:password@podcast.example.jp/?action=podcastRSSにアクセスできるようになったらそれをプレイヤーに登録する。

自分は実際の聴取にはListen というAndroid アプリケーションを利用している

Google Reader の特定のフォルダに登録しておけばOK というシンプルなのがいい

おまけ: podcast配信ディレクトリをDropboxで同期して「あとで聴く」の環境をつくる

まずサーバでDropboxデーモン走らせるのが必要

あとは「あとで聴く」用のフィードを作ってディレクトリを~/Dropbox 以下にシンボリックリンクはっておく。
するとデスクトップから音楽ファイルほうりこんでおくと登録したPodcastに配信されてくるという方法。

追記: 着陸失敗

と、大見栄きったところでもGoogle Reader が認証つきフォードに対応してないことを思い出した。だめじゃん。そもそもPodcast が認証を受け入れるように設計されてないのか……

というわけでスマートフォンからの聴取はDropbox と連携する音楽プレイヤーやその他の道も考えている。

UPDATE: Thu Dec 27 13:05:46 JST 2012

今は下記のとうりGoogle Musicに送信して聞いてる。あとバックアップの為にDropboxにも保存してる。もう半年ぐらい安定運用してるかんじ。

http://laiso.hatenablog.com/entry/2012/06/04/205516

UPDATE: Fri Oct 26 13:07:25 JST 2012

Radikoサーバーの仕様変更で録音コケてた(野良バッチの宿命)

RTMPDump 2 PCサロン@2ch掲示板

の人の書き込みを参考にスクリプト書き換えて動くようにしておいた。