基本

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

WAV録音

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

ustream

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

shoutcast

  • Windows
    • wstreamripper.exe
    • Rip to single fileにするとファイル名が日付と時刻になって、cueファイルも作られるので便利
    • 録画予約の方法がないのがネック。reconnecting...で放っておくのは失敗した

  • Linux
 # -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がシンプルでいい
    • けど1バイトずれたことがある…計算ミスったかな

TODO

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

発展

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