ターゲット広告をブロードキャストできるストリーミング サーバーに取り組んでいます。基本的に、リスナーは同じ音楽を聞いていますが、たとえば 30 分ごとに広告のブロックが表示され、すべてのリスナーが独自のブロックを持っています。このようなストリーミング サーバーを実装するとさまざまな問題が発生しますが、この質問はその 1 つに関するものです。
サーバーは Icecast に似た方法で動作します。つまり、ストリーム ジェネレーターからネットワーク経由でストリームを読み取り、それをすべてのリスナーに中継します。広告をブロードキャストする時間になると、サーバーはジェネレーターからのストリームのフェッチを停止し、ファイルから広告を読み取って各リスナーのバッファーに挿入し、それらを送信して、ジェネレーターからのストリームの中継を再開します。
サーバーがストリームの中継から広告のブロードキャストに切り替えるとき、2 つの MP3 ストリームを連結する必要があります (MP3 でブロードキャストします)。私の懸念は、単純にデータを次々に追加すると、いくつかの可聴アーティファクトが生成される可能性があることです。シームレスにできますか?
私はすでにこれを理解しています: - サーバーに MP3 フレームを認識させて、同期エラーを回避することができます。- ストリームの MP3 フレームの後に、広告ファイルの MP3 フレームを追加することを考えています。- 広告は適切にエンコードされた MP3 ファイルから読み込まれるため、ファイルの最初のフレームでは使用できないため、バイト リザーバーの問題を回避できます。
しかし、私の懸念は MDCT の仕組みです。リスナーは私のサーバーが何をするか分からないため、MP3 デコーダーは、ダウンロードするストリームに誤った MDCT データが次々と配置されるため、いくつかのアーティファクトを生成する可能性があります。広告を含むファイルの先頭のゼロパディングはこれを補いますか?
2 つの MP3 ファイルを解凍せずにシームレスに結合できるライブラリ/ツール (可能であればオープン ソース) を知っていますか?
MP3 形式について説明している適切なリソースを教えてください。私はインターネットをよく検索し、多くの情報を見つけましたが、それでも全体像を見逃しています.
OGG/Vorbis、AAC などの別のコーデックを使用すると、これがより簡単になることをご存知でしょうか?
PS。この質問は、 「mp3 ファイルをマージする最良の方法は何ですか?」の重複ではありません。. mp3wrap と同様のツールは、私にとって選択肢ではありません。