2011-01-04 27 views
6

私はMP3(CBR)用のストリーミングアプリケーションを作成しています。それはすべてのパススルーです。デコード/エンコードする必要はありません。私はデータが通過するのを見るだけでデータを渡す必要があります。彼らはパススルー(とスループットの計算のようないくつかの他のもの)としてMP3フレームを数えることができるようにしたい。MP3データを解析して番号付きフレームを抽出する方法は?

MP3 frame header仕様によれば、同期ワードが1秒の11(11)ビットであるように見える、しかし IフレームペイロードIが安全バイナリであると仮定しなければならないので、それが奇数でないもの(自然に)気づきます(11)1sを順番に見ることができます。

私の質問:| Linuxの| MP3ファイル/パイプから番号のフレームを引くことができますPerlのMP3パーサユーティリティ(ddスタイル)

  1. は、Unixはありますか?
  2. 他のバイナリペイロードデータからMP3ヘッダブロックをどのように記述しますか?最後に:
  3. 固定ビットレート(CBR)MP3はペイロードバイトで定義されていますか、または任意のタイムスライスあたりの集約バイト数/ビットに含まれるヘッダーバイトですか?

おかげで、

+0

dd-style?あなたは、使用するのを混乱させるものを意味し、バイトではなく厄介な単位で動作し、バイトチャンク*を使うと自然に遅くなります...(私はあなたが将来データをコピーするために 'dd_rescue'を望んでいると思います) – user562374

+0

まあ、ddスタイルは、パイプに抽出するフレームの名前を付けたり、番号を付けることができるという意味です。またはddがseek | countをスキップする方法でフレーム範囲を指定することができます。 ddはそれ自身の問題を持っていますが、dd_rescueはシークをサポートしていますか? – Xailor

+0

あなたはどの言語を使用していますか? – Brad

答えて

4

は、私が#2で刺してみましょう。

一般的な方法は、(フレームのあなたのカウントを可能にこれと)MP3ストリームに同期するというのが私の理解では、これを実行することです:シンクワード

  • 同期のための

    • 検索単語が見つかった場合、残りのヘッダーを確認する
    • フレームヘッダーが有効な場合、次のヘッダーの位置を知る必要があります
    • 3つまたは4つのヘッダーを連続してヒットし、あなたがそれらを見つけた可能性は非常に高いです。

    私はこれに関するドキュメントを最近見ましたが、現時点では見つかりませんでした。私がそれを再度見つけたら、私はそれを掲示するでしょう。

  • +0

    ちょっと前にErlangのビットワイズ正規表現に関する話がありましたが、MP3フレームヘッダーパターンにビットごとに一致させるのは簡単ではありません。すべての参照は素晴らしいだろう:) – Xailor

    +0

    私は海を沸騰させず、すべてのファイルを厳密なCBRに保ち、 'dd'を守ることに決めた。 'bs = $ [144 * $ bitrate/$ samplerate]'は魅力的です。 – Xailor

    関連する問題