5

ターゲット広告をブロードキャストできるストリーミング サーバーに取り組んでいます。基本的に、リスナーは同じ音楽を聞いていますが、たとえば 30 分ごとに広告のブロックが表示され、すべてのリスナーが独自のブロックを持っています。このようなストリーミング サーバーを実装するとさまざまな問題が発生しますが、この質問はその 1 つに関するものです。

サーバーは Icecast に似た方法で動作します。つまり、ストリーム ジェネレーターからネットワーク経由でストリームを読み取り、それをすべてのリスナーに中継します。広告をブロードキャストする時間になると、サーバーはジェネレーターからのストリームのフェッチを停止し、ファイルから広告を読み取って各リスナーのバッファーに挿入し、それらを送信して、ジェネレーターからのストリームの中継を再開します。

サーバーがストリームの中継から広告のブロードキャストに切り替えるとき、2 つの MP3 ストリームを連結する必要があります (MP3 でブロードキャストします)。私の懸念は、単純にデータを次々に追加すると、いくつかの可聴アーティファクトが生成される可能性があることです。シームレスにできますか?

私はすでにこれを理解しています: - サーバーに MP3 フレームを認識させて、同期エラーを回避することができます。- ストリームの MP3 フレームの後に、広告ファイルの MP3 フレームを追加することを考えています。- 広告は適切にエンコードされた MP3 ファイルから読み込まれるため、ファイルの最初のフレームでは使用できないため、バイト リザーバーの問題を回避できます。

しかし、私の懸念は MDCT の仕組みです。リスナーは私のサーバーが何をするか分からないため、MP3 デコーダーは、ダウンロードするストリームに誤った MDCT データが次々と配置されるため、いくつかのアーティファクトを生成する可能性があります。広告を含むファイルの先頭のゼロパディングはこれを補いますか?

2 つの MP3 ファイルを解凍せずにシームレスに結合できるライブラリ/ツール (可能であればオープン ソース) を知っていますか?

MP3 形式について説明している適切なリソースを教えてください。私はインターネットをよく検索し、多くの情報を見つけましたが、それでも全体像を見逃しています.

OGG/Vorbis、AAC などの別のコーデックを使用すると、これがより簡単になることをご存知でしょうか?

PS。この質問は、 「mp3 ファイルをマージする最良の方法は何ですか?」の重複ではありません。. mp3wrap と同様のツールは、私にとって選択肢ではありません。

4

5 に答える 5

2

MP3 は、ファイルを連結するだけでマージできると思います。いくつかの簡単なテスト ( cat file1.mp3 file2.mp3 > merged.mp3; mplayer merged.mp3) では、期待どおりに動作するようです。Web サーバーからのストリーミングもおそらく同様に機能します。

現在の入力ファイルの切り替えをどのように処理しますか? 広告を再生する短いトラックとして単純に扱うことができます。

于 2009-05-17T20:37:24.683 に答える
2

CBR と VBR の両方の形式の mp3 ファイルを連結できるはずです。MP3 ファイルにはメイン ヘッダーがありません (ID3 と Xing は無視)。オーディオ データはチャンクとして格納され、各チャンクには独自のヘッダーが含まれます。ヘッダーには、そのチャンク内のオーディオ データのデコードに必要な情報 (ビットレート、サンプル周波数、ステレオなど) が含まれています。

これが、mp3 ファイルの長さを判断するのが難しい理由の 1 つです。

別の見方をすると、CBR MP3 ファイルを VBR ファイルと連結すると、最終結果は、オーディオの最初のセクションが一定のビットレートである 1 つの長い VBR ファイルと同じになります。

問題は、一部の MP3 プレーヤーが厳密で、VBR MP3 ファイルの Xing ヘッダーを想定している可能性があることです。ただし、これは MP3 形式の仕様ではありませんでしたが、現在は正しいと見なされています。

于 2009-12-03T17:04:26.207 に答える
0

Windows を使用している場合は、Microsoft DirectShow API が適している可能性があります。は、オーディオとビデオを静的およびストリーミングの両方で、さまざまな形式で処理できることがわかります (必要なコーデックのみが必要であり、インターフェイスはすべてで実質的に同じです)。

そうは言っても、残念ながら DirectShow は恐ろしく複雑な方法で設計されており、学習曲線は急勾配ですが、Windows でオーディオ/ビデオ操作を行う場合は、比類のないパワーを提供します. しかし、サンプルや使い方のチュートリアルがたくさんあるので、最終的にはそれほど苦労しないかもしれません。また、.NET Framework を使用している場合は、DirectShow.NETという名前でラップされたマネージがあります。私が気づいていない何かがそこにない限り、あなたが何をするにしても、それは簡単な仕事ではありません. とにかく頑張ってください!

于 2009-05-17T20:37:20.737 に答える
0

私は非常によく似た問題に取り組み、さまざまな情報源で適切な質問をした後、次のことを思いつきました...

適切なデコーダーは、有効なフレーム ヘッダーに到達するまで、「不良」データをスキップします。これは、ID3v2 が mp3 データに追加情報を挿入するために依存するものです。サーバーでは、ソース MP3 ファイルを分析して、有効な MP3 フレームのみを提供します。いくつかのサイレント フレームを提供する場合 (約 7 で十分です)、デコーダーは (関連付けられていない) MP3 データの次のロードに備えて安定する時間が必要であり、異なるエンコーディングからのフレームを連結するときに (正しく) 想定されるアーティファクトを回避します。セッション。

さらに問題なのは、フレーム間で MP3 属性 (1/2 チャンネル、出力サンプルレートなど) が切り替わる可能性があることです。一部のデコーダは、このようなストリームに直面すると非常に動揺し、1/2 の速度で再生するなどの結果になります。したがって、すべてのソース マテリアルが同じ出力属性にエンコードされていることを確認する必要があります。

あなたはすでにこれを見たことがあるかもしれませんが、そうでない場合:

http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=79&printer=t

于 2009-05-17T20:54:40.400 に答える
-2

ファイルを連結する理由がわかりません。ある種の再生リスト システムを使用して、送信するファイルを変更してみませんか。これにより、長期的には柔軟性が向上し、大きな MP3 ファイルになってしまうことはないと思います。

于 2009-05-17T20:56:45.200 に答える