public string GetStreamDescription(string url)
{
try
{
string hostname = Regex.Match(url, @"rtsp://(?<hostname>\S+?)/").Result("${hostname}");
//IPEndPoint rtspEndPoint = DNSResolver.R(hostname, DNS_RESOLUTION_TIMEOUT);
logger.Debug("RTSP Client Connecting to " + hostname + ".");
TcpClient rtspSocket = new TcpClient(hostname, RTSP_PORT);
NetworkStream rtspStream = rtspSocket.GetStream();
string rtspSDP = null;
RTSPRequest rtspRequest = new RTSPRequest(RTSPMethodsEnum.DESCRIBE, url);
RTSPHeader rtspHeader = new RTSPHeader(1, null);
rtspRequest.Header = rtspHeader;
string rtspReqStr = rtspRequest.ToString();
RTSPMessage rtspMessage = null;
RTSPResponse rtspResponse = null;
byte[] rtspRequestBuffer = Encoding.UTF8.GetBytes(rtspReqStr);
rtspStream.Write(rtspRequestBuffer, 0, rtspRequestBuffer.Length);
byte[] buffer = new byte[2048];
int bytesRead = rtspStream.Read(buffer, 0, 2048);
if (bytesRead > 0)
{
logger.Debug(Encoding.UTF8.GetString(buffer, 0, bytesRead));
byte[] msgBuffer = new byte[bytesRead];
Buffer.BlockCopy(buffer, 0, msgBuffer, 0, bytesRead);
rtspMessage = RTSPMessage.ParseRTSPMessage(msgBuffer, null, null);
if (rtspMessage.RTSPMessageType == RTSPMessageTypesEnum.Response)
{
rtspResponse = RTSPResponse.ParseRTSPResponse(rtspMessage);
logger.Debug("RTSP Response received: " + rtspResponse.StatusCode + " " + rtspResponse.Status + " " + rtspResponse.ReasonPhrase + ".");
}
rtspSDP = rtspResponse.Body;
}
else
{
logger.Warn("Socket closed prematurely in GetStreamDescription for " + url + ".");
}
rtspSocket.Close();
return(rtspSDP);
}
catch (Exception excp)
{
logger.Error("Exception GetStreamDescription. " + excp.Message);
throw excp;
}
}