基本

- ライブ録音には事故がつきもの。ひたすら冗長化する
- 確保できるマシンすべてで接続
- 利用できるミラーすべてに接続
WAV録音

- 生ストリーム以外に、WAV録音もするといい
- ライブなど、開始直前までストリームの種類が分からないとき、何が来てもとりあえず対応できる
- SoundEngineで、録音ラインに「ステレオミキサー」を指定するとWaveOutがそのまま録音できる
- SoundEngineはファイルサイズに4GB制限があるので注意(約6時間)
ustream

NetTransportで保存できるらしい。
チャットは内部がIRCなので、専用クライアントでログを取る。
参考
shoutcast

- Windows
- wstreamripper.exe
- Rip to single fileにするとファイル名が日付と時刻になって、cueファイルも作られるので便利
- 録画予約の方法がないのがネック。reconnecting...で放っておくのは失敗した
# -s: Don't create a directory for each stream
# -t: Don't overwrite tracks in incomplete directory
# -o never: Never Overwrite tracks in complete directory
$ streamripper http://listen.lolibot.net:8008/listen.pls -s -t -o never
ライブDJの場合まずcompleteにはならない。
incompleteからサルベージする。
オプション -D でシーケンス番号つけられるけど、incompleteは対象外みたい。
タイムスタンプ順にソートすればOK。
録音予約するなら
echo 'streamripper http://radio.speedycake.com:8000/OHR.m3u -s -t -o never' | at 8:45
手作業ストリーム修正メモ

- mp3,aacとも0xFFFxが同期ビット。xはビットレートなどのフォーマットによって違う。
- まずファイル先頭の同期を合わせる。これで再生できればOK
- 途中でフォーマットが変わる場合は、そこで切り離す
- 実例: FF F9 が途中から FF F1 に変わった
- どの同期ビット列が正解かは、当たりをつけてそのビット列で検索かけてみる
- 1パケットは数百バイト程度なので、その程度の間を開けて検索ヒットが続けば正解
- 切り離しはcygwin head/tailがシンプルでいい
TODO

- 接続が途切れた場合のファイルマージ
- 案1: バイナリレベルで、前後のファイルのオーバーラップ分を削除
- 案2: mp3やaacのパケットを認識してその単位でちゃんと処理
- mp3とaacが途中で切り替わると、1ファイルに混在する
- aac同士でも1ファイルの途中でフォーマットが切り替わると、うまく再生できない
- パケット単位でのファイル分割
発展

- 複数クライアントで録音して、いろいろマージして可能な限りデータを復元
- クライアントは別ツールのほうがリトライタイミングとか違ってデータが多く取れそう
- メタデータと時刻のペアのみを記録するクライアントがほしい
- mp3,aacファイル自体も、開始・終了時刻を押さえておきたい