7

モバイルを含むさまざまなプラットフォームでこれを使用するため、独自のブロードキャスターを使用せずに SHOUTcast または Icecast サーバーにオーディオ データを提供したいと考えています。

Objective-C、C、または C++ を使用して SHOUTcast および Icecast サーバーに (マイクまたはファイルから) オーディオ データを送信できるようにするためのプロトコルの説明、オープン ソース プロジェクト、またはサンプルが必要です。

適切な SHOUTcast/Icecast ソース クライアントを構築するために必要な情報はどこにありますか?

4

2 に答える 2

12

コメント: 誰かがモバイル用の SHOUTcast ソース クライアントを作成する時が来ました。私はこれをしばらく必要としていましたが、それを構築する時間がないので、あなたに敬意を表します. いつかAndroid版を作ってください。

最初に行うべきことは、Wireshark をダウンロードすることです。

パケット キャプチャを開始し、SHOUTcast サーバーを起動してから、ソース クライアントを起動し、サーバーに接続します。このプロトコルの恐ろしい単純さに備えてください。

プライマリ オーディオ プロトコル

  1. ソース クライアントは TCP で SHOUTcast に接続します。ベースポートから 1 つ上のポートを使用します。たとえば、ベース ポートが 8000 の場合、リスナーは 8000 に接続し、あなたは 8001 に接続します。
  2. 接続すると、SHOUTcast サーバーは何も言いません。ブロードキャスト パスワードを送信し、その後に新しいCrLf(または\r\n) を付けます。
  3. パスワードが間違っている場合は、invalid passwordまたはそのようなことが表示されます。それが正しければ、次のような結果が得られます。

    OK2

    icy-caps:11

    各行のCrLf後に があり、これら 2 つのヘッダーが送信された後、. のペアがあることに注意してくださいCrLf

  4. ここで、一連のヘッダーを送信するのは送信元クライアント次第です: icy-name, icy-genre, icy-pub, icy-br, icy-url, icy-irc, . 次のように送信します。icy-icqicy-aimcontent-type

    icy-name:My Awesome Station

    各行のCrLf後には , が続き、すべてのヘッダーの送信が完了したら、CrLf.

  5. これがすべて完了したら、ストリーム データの送信を開始します。特定の場所から開始する必要はなく、データを送信するだけです。フレームに同期するかどうかは、受信側のクライアント次第です。SHOUTcast サーバーは、そこを流れるトラフィックに対して完全に「愚か」です。必要に応じて、Telnet クライアントに接続して大量のテキストを送信できます。

メタデータの更新

では、次のトラックの情報をどのように送信し、何を送信しないのか疑問に思われることでしょう。面白いことに、これは音声データを送信する接続から完全に帯域外です。

ポート ベース (この例では 8000) に Web リクエストを送信するだけです。

http://yourserver:8000/admin.cgi?pass=yourpassword&mode=updinfo&song=your%20song&url=some_url_goes_here_but_hardly_any_clients_use_it

読みにくい場合は、次のパラメーターを使用します。

  • 合格
  • モード
  • URL

これらの同じパラメーターやその他のパラメーターはすべて、SHOUTcast 管理パネルで見つけることができます。

于 2012-02-11T15:59:47.550 に答える