C#でIcecastクライアントを作成する必要があります。これの主な目的は、Icecastを介してブロードキャストされる2つのオーディオデバイスからの着信オーディオを送信することです。
すでに作成されているソリューションを探していたときに、まさに必要なものであるバットを見つけましたが、2つのオーディオデバイスを個別にIcecastに送信する必要もありました。
私はすでに2つのマイクからオーディオ入力を取得しており、それらをフォルダーに保存しています(マイクごとに1つのオーディオファイル)。次に、2つのマイクを個別にIcecastにブロードキャストする必要があります。
これはすべて、ラジオ局のように2つのマイクをブロードキャストする必要があるためです(マイクごとに1つのステーション)。
主な解決策は次のようなものです。
- マイク1=>ソースMicro1のようにIcecastにブロードキャスト=>micro1.mp3形式のようにオーディオを保存します(動作中)。
- マイク2=>ソースMicro2のようにIcecastにブロードキャスト=>micro2.mp3形式のようにオーディオを保存します(動作中)。
Icecastにブロードキャストする方法を知る必要があります。NAudioライブラリを使用してオーディオ入力を取得し、保存しています。
編集:私はC#からIcecastと通信しています、これは私のコードです:
public static void commIcecast(string url)
{
WebClient client = new WebClient();
client.Headers.Add("content-type", "audio/mpeg");
client.Headers.Add("Authorization", "Basic c291cmNlOmhhY2ttZQ==");
client.Headers.Add("ice-name", "This is my server name");
client.Headers.Add("ice-url", "http://www.google.com");
client.Headers.Add("ice-genre", "Rock");
client.Headers.Add("ice-description", "This is my server description");
client.Headers.Add("ice-audio-info", "ice-samplerate=44100;ice-bitrate=128;ice-channels=2");
Stream data = client.OpenRead(url);
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
Console.WriteLine(s);
data.Close();
reader.Close();
}
しかし、私はIcecastサーバーからこの答えを受け取っています:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<h2>Icecast2 Status</h2>
<br><div class="roundcont">
<div class="roundtop"><img src="/corner_topleft.jpg" class="corner" style="display: none"></div>
<table border="0" width="100%" id="table1" cellspacing="0" cellpadding="4"><tr><td bgcolor="#656565">
<a class="nav" href="admin/">Administration</a><a class="nav" href="status.xsl">Server Status</a><a class="nav" href="server_version.xsl">Version</a>
</td></tr></table>
<div class="roundbottom"><img src="/corner_bottomleft.jpg" class="corner" style="display: none"></div>
</div>
<br><br>
<div class="poster">Support icecast development at <a class="nav" target="_blank" href="http://www.icecast.org">www.icecast.org</a>
</div>
</body>
</html>
「SOURCE/mp3test ICE / 1.0」を送信しようとしましたが、Headers.Addメソッドでは送信できません。
編集:これをtcp経由でIcecastに送信していますが、応答を受信できません。この方法で送信するかどうかを知る必要があります。今の場合は、投稿をtcpの問題に移動する必要があります。この送信方法を使用したIcecastサーバーの応答を受信していません。
System.Net.IPAddress address = System.Net.IPAddress.Parse(url);
socketServer = new TcpClient(url, port);
NetworkStream networkStream = socketServer.GetStream();
data = Encoding.ASCII.GetBytes("SOURCE /csharp ICE/1.0");
networkStream.Write(data, 0, data.Length);
data = Encoding.ASCII.GetBytes("content-type: audio/mpeg");
networkStream.Write(data, 0, data.Length);
data = Encoding.ASCII.GetBytes("Authorization: Basic c291cmNlOmhhY2ttZQ==");
networkStream.Write(data, 0, data.Length);
data = Encoding.ASCII.GetBytes("ice-name: lala");
networkStream.Write(data, 0, data.Length);
data = Encoding.ASCII.GetBytes("ice-url: localhost");
networkStream.Write(data, 0, data.Length);
data = Encoding.ASCII.GetBytes("ice-genre: Rock");
networkStream.Write(data, 0, data.Length);
data = Encoding.ASCII.GetBytes("ice-bitrate: 128");
networkStream.Write(data, 0, data.Length);
data = Encoding.ASCII.GetBytes("ice-private: 0");
networkStream.Write(data, 0, data.Length);
data = Encoding.ASCII.GetBytes("ice-public: 1");
networkStream.Write(data, 0, data.Length);
data = Encoding.ASCII.GetBytes("ice-description: This is my server description");
networkStream.Write(data, 0, data.Length);
data = Encoding.ASCII.GetBytes("ice-audio-info: ice-samplerate=44100;ice-bitrate=128;ice-channels=2");
networkStream.Write(data, 0, data.Length);
StreamReader reader = new StreamReader(networkStream);
Console.WriteLine(reader.ReadToEnd());
これにより、Icecastサーバーに接続できます。少なくとも、接続されているクライアントの数はIcecastのグローバル統計で増加しますが、接続が失われ、応答を得ることができません。