我努力通過網絡上的mu-law(G.711)編解碼器wav文件作爲二進制數據發送SIP電話,並希望在該SIP電話上播放此wav文件。以下是C#中的代碼。有人可以告訴我我做錯了什麼嗎?如何在網絡SIP電話上發送mu-law(G.711)編解碼器wav文件並在那裏播放
private void MediaStreamPump()
{
String strHostName;
m_MediaStreamPumping = true;
strHostName = Dns.GetHostName();
IPHostEntry ipEntry = Dns.GetHostByName(strHostName);
IPEndPoint endPt = new IPEndPoint(ipEntry.AddressList[0], 7078);
Socket receiveSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
receiveSock.Bind(endPt);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint senderRemote = (EndPoint)sender;
IPAddress[] sendToEntry=Dns.GetHostAddresses(m_RemoteEndpointIp);
IPEndPoint sendToIp=new IPEndPoint(ipEntry.AddressList[0],m_RemoteEndpointPort);
EndPoint otherEndpoint = (EndPoint)sendToIp;
receiveSock.ReceiveTimeout = 1000;
FileStream fileStream = new FileStream("E:\\G711NM.wav", FileMode.Open, FileAccess.Read);
br = new BinaryReader(fileStream);
try
{
byte[] buf = new byte[512];
int count=1;
// 32k
while (true)
{
var buf1 = new byte[512];
count = br.Read(buf1, 0, buf1.Length);
if (count > 0)
{
receiveSock.ReceiveFrom(buf, SocketFlags.None, ref senderRemote);
receiveSock.SendTo(buf1, SocketFlags.None, senderRemote);
}
else
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
receiveSock.Close();
m_MediaStreamPumping = false;
}
感謝您的回覆。只是說我能夠通過使用SDP消息的網絡在我的應用程序和SIP電話之間創建通信終點。我沒有添加上面的代碼片段。我可以在SIP電話上回顯我的聲音。唯一的問題是如何通過網絡發送一個wav文件到sip電話。如果您能請讓我知道這一點,我將非常感激。 – vicky 2012-03-27 04:45:01
嘗試在這裏搜索[c#] [rtp],我想你會發現一些類似的問題,其中一些包含一些解釋RTP消息結構的答案。 – devgeezer 2012-03-27 05:08:22