Example #1
0
 /// <summary>
 /// Send an RTSP request and retrieve the response.
 /// </summary>
 /// <param name="request">The request.</param>
 /// <param name="response">The response.</param>
 /// <returns>the response status code</returns>
 public RtspStatusCode SendRequest(RtspRequest request, out RtspResponse response)
 {
     response = null;
     lock (_lockObject)
     {
         NetworkStream stream = null;
         try
         {
             stream = _client.GetStream();
             if (stream == null)
             {
                 throw new Exception();
             }
         }
         catch
         {
             _client.Close();
         }
         try
         {
             if (_client == null)
             {
                 _client = new TcpClient(_serverHost, 554);
             }
             // Send the request and get the response.
             request.Headers.Add("CSeq", _cseq.ToString(CultureInfo.InvariantCulture));
             byte[] requestBytes = request.Serialise();
             stream.Write(requestBytes, 0, requestBytes.Length);
             _cseq++;
             byte[] responseBytes = new byte[_client.ReceiveBufferSize];
             int    byteCount     = stream.Read(responseBytes, 0, responseBytes.Length);
             response = RtspResponse.Deserialise(responseBytes, byteCount);
             // Did we get the whole response?
             string contentLengthString;
             int    contentLength = 0;
             if (response.Headers.TryGetValue("Content-Length", out contentLengthString))
             {
                 contentLength = int.Parse(contentLengthString);
                 if ((string.IsNullOrEmpty(response.Body) && contentLength > 0) || response.Body.Length < contentLength)
                 {
                     if (response.Body == null)
                     {
                         response.Body = string.Empty;
                     }
                     while (byteCount > 0 && response.Body.Length < contentLength)
                     {
                         byteCount      = stream.Read(responseBytes, 0, responseBytes.Length);
                         response.Body += System.Text.Encoding.UTF8.GetString(responseBytes, 0, byteCount);
                     }
                 }
             }
             return(response.StatusCode);
         }
         finally
         {
             stream.Close();
         }
     }
 }
 private void SendRequest(RtspRequest request)
 {
     if (_rtspSocket == null)
     {
         Connect();
     }
     try
     {
         request.Headers.Add("CSeq", _rtspSequenceNum.ToString());
         _rtspSequenceNum++;
         byte[] requestBytes = request.Serialise();
         if (_rtspSocket != null)
         {
             var requestBytesCount = _rtspSocket.Send(requestBytes, requestBytes.Length, SocketFlags.None);
             if (requestBytesCount < 1)
             {
             }
         }
     }
     catch (Exception e)
     {
         Logger.Error(e.Message);
     }
 }