5月 10

5/10にradiko公式版のiPhone用視聴アプリ「radiko.jp」が公開された。
公開前からあれこれ予想はしていたけど、思っていた以上に良くできていて驚いた。
GPSでの地域制限はあるものの、ちゃんと大阪市内から大阪の局を視聴できた。
PC版のIPアドレスでの地域判定では3G回線では東京エリアと判定されるので、その辺りをどうクリアするのかが注目ポイントだったがシンプルにGPSだった。
あと最も驚いたのはバックグラウンド再生に対応していたこと。
アプリ起動後、menuからバックグラウンド再生を選択する手間はあるものの、ちゃんとSafariで開いて聴ける。
この時表示されるアドレスが、.m3uな拡張子のアドレス。
この時点でピンときますが、Safariでバックグラウンド再生+ m3u = HTTP Live Streamingだと。
やはりこれしかないかという感じだが、正当な回答だろう。

これに関しては、3/24と4/7にTwitterでツイートしたのが実現されたということのようで。
個人的にはアプリは別にどうでも良くて(ま、アプリがなきゃ始まらないが…)、radikoがiPhone向けに配信システムを用意したということがとても大きいと思う。
おそらくほとんどの人はアプリで聴けるようになったことに目を奪われていると思うが、実は裏でそれよりも面倒な仕組みで動いていることを改めて強調したいところだ。
さらにSarafiからアクセスするURLは時限式のワンタイムURLのようなもので、その辺りのセキュリティにもかなり気を使ったとみられる。

まとめると、「radikoはよくがんばった!」これにより前の記事のSegmenterを使った配信はひとまず役目を終えたと。
Segmenterの残る使い道は東京か大阪判定のサーバで動かして…というところか。

radikoの本サービスの開始まで生暖かく見守りたいと思う。

4月 24

-追記-
5/10にradiko公式アプリ「radiko.jp」が公開されたので、今後をそちらを使って聴くことをお勧めする。

Radikoをサーバ経由でアプリ無しでiPhoneから聴けるようにしてみた。
利点はSafariで再生するのでバックグラウンド再生が可能な点。またサスペンドしながらでも可。
Linuxサーバが必要なのが一般的には敷居が高いかもしれない(Windowsでも頑張ればできると思う)。
何らかしらのサーバは必要だが、恐らく最も低コスト、低リソースでiPhoneでRadikoを聴く方法だと思われる。
ちょうど1ヶ月程前からこの方法で聴いているが、本バージョンはRadikoのプロトコル変更に対応済み。
自宅サーバとServersMan@VPSの両環境(どちらもCentOS5.4)で動作確認済み。

参考にしたページ
用意するもの
  • ffmpeg
  • segmenter(audio only 対応改造版。ページ下部からダウンロード)

なお、segmenterについては下記のサイトが元で、それを音声のみのストリーミングに合わせて改造した。

ffmpegのインストール

ffmpegはconfigureに

--enable-librtmp --extra-ldflags=-lssl

を追加する(上記の参考ページを参照のこと)。
後はLAME(libmp3lame)が必要(AAC copyだと音が途切れる為)。

segmenterのインストール

segmenter.tar.gz(audio only 対応改造版)をダウンロード後、下記の手順でインストールを行う

$ tar xvzf segmenter.tar.gz
$ cd segmenter
$ make
# make install

segmenterのアンインストールは、makeしたディレクトリで下記のコマンド

# make uninstall

環境設定

ページ下部のradiko.tar.gzをダウンロードし、適当なディレクトリで解凍する
中身はこんな感じ

radiko/
|—fm/
|—kill.sh
|—radiko.sh
|—settings.txt

settings.txtをvi等のエディタで編集する。
変更必須箇所はmy_urlとchannelの2箇所。それ以外は必要に応じて変更。

my_url=“http://hogehoge.fugafuga/”
Apache等で公開するURL。自分の環境に合わせて書き換える。

channel=XXX
聴きたいチャンネルを記入

output_path=fm/
分割されたTSファイルと.m3u8ファイルがここに保存される。

segmenter_duration=15
分割されたTSファイルの長さ(秒)

segmenter_count=4
分割されたTSファイルの最大保存数。数字を消すと無制限に保存される。

file_prefix=radiko
output_path以下に保存されるファイル名のprefix。file_prefix-XXX.ts、file_prefix.m3u8の形式で保存される

segmenter=/usr/local/bin/segmenter
segmenterへのパス(デフォルト)。

スクリプトの起動、終了方法
起動

$ ./radiko.sh

スクリプトが実行するとディレクトリ内にradiko.pidが作成される。中身は実行されたffmpegのpid。

終了方法

$ ./kill.sh

プロセスの停止と同時にoutput_path下のファイル削除を行うので、output_path下に重要なファイルを配置しないこと。

分かっていること

起動スクリプトの実行後、下記のような内容がコンソールに表示されるがエンターでOK。(出ないようにする方法が分からないので放置)

[mpegts @ 0x9f585a0]max_analyze_duration reached
[mpegts @ 0x9f585a0]Estimating duration from bitrate, this may be inaccurate
Output #0, mpegts, to ‘fm/radiko’:
Stream #0.0: Audio: libmp3lame, 48000 Hz, 2 channels, 128 kb/s
[mpegts @ 0x9f64fb0]muxrate 1 bps, pcr every 4 pkts, sdt every 200, pat/pmt every 40 pkts
[mpegts @ 0x9f64fb0]st:0 error, non monotone timestamps 126000 >= 126000
Warning: Could not write frame of stream

確認方法

output_path以下に.tsと.m3u8が作成され、新しいtsファイルがどんどん生成されていればOK。

Webサーバで公開する

iPhoneで視聴する為に、output_pathをWebサーバで公開する。
ApacheでFollowSymLinksを有効にして、output_pathをドキュメントルート下にリンクすると楽。
ポイントは、

${my_url}${output_path}${file_prefix}.m3u8

の形式でiPhoneからアクセスできるかどうか。

下記の設定の場合、

my_url=”http://hogehoge.fugafuga/”
output_path=fm/
file_prefix=radiko

このURLにアクセスすることになる
http://hogehoge.fugafuga/fm/radiko.m3u8

なお、当然のことであるが、自分以外の外部からの不正アクセスを防ぐ為に接続元IPアドレスで限定するか、Basic認証をかけておく。

iPhoneからのアクセス方法

Safariで公開している.m3u8ファイルをURLに入力。接続が成功すると自動で再生が始まる。
再生を停止すればページのブックマークが可能。

ダウンロード
preload preload preload