public void Connect(string url, string username, string password) { var uri = new Uri(url); // Use URI to make a new URL without the username and password if (uri.UserInfo.Length > 0) { Url = uri.GetComponents(UriComponents.AbsoluteUri & ~UriComponents.UserInfo, UriFormat.UriEscaped); } else { Url = url; } Username = username; Password = password; Hostname = uri.Host; Port = uri.Port; // Connect to a RTSP Server. The RTSP session is a TCP connection try { var connection = new TcpClient(); var result = connection.BeginConnect(Hostname, Port, null, null); var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(Timeout)); if (!success) { throw new Exception("Failed to connect (timeout)."); } connection.EndConnect(result); rtsp_socket = new RtspTcpTransport(connection); } catch { is_connected = false; logger.Warn($"Error - did not connect (Hostname: {Hostname} Port: {Port})"); return; } if (!rtsp_socket.Connected) { is_connected = false; logger.Warn($"Error - did not connect (Hostname: {Hostname} Port: {Port})"); return; } is_connected = true; // Connect a RTSP Listener to the RTSP Socket (or other Stream) to send RTSP messages and listen for RTSP replies rtsp_client = new RtspListener(rtsp_socket) { AutoReconnect = false }; rtsp_client.MessageReceived += Rtsp_MessageReceived; rtsp_client.DataReceived += Rtp_DataReceived; rtsp_client.Start(); // start listening for messages from the server (messages fire the MessageReceived event) // Send OPTIONS // In the Received Message handler we will send DESCRIBE, SETUP and PLAY RtspRequest options_message = new Mictlanix.DotNet.Rtsp.Messages.RtspRequestOptions(); options_message.RtspUri = new Uri(Url); rtsp_client.SendMessage(options_message); }
/// <summary> /// Gets the Rtsp request. /// </summary> /// <param name="aRequestParts">A request parts.</param> /// <returns>the parsed request</returns> internal static RtspMessage GetRtspRequest(string [] aRequestParts) { // <pex> Debug.Assert(aRequestParts != (string [])null, "aRequestParts"); Debug.Assert(aRequestParts.Length != 0, "aRequestParts.Length == 0"); // </pex> // we already know this is a Request RtspRequest returnValue; switch (ParseRequest(aRequestParts [0])) { case RequestType.OPTIONS: returnValue = new RtspRequestOptions(); break; case RequestType.DESCRIBE: returnValue = new RtspRequestDescribe(); break; case RequestType.SETUP: returnValue = new RtspRequestSetup(); break; case RequestType.PLAY: returnValue = new RtspRequestPlay(); break; case RequestType.PAUSE: returnValue = new RtspRequestPause(); break; case RequestType.TEARDOWN: returnValue = new RtspRequestTeardown(); break; case RequestType.GET_PARAMETER: returnValue = new RtspRequestGetParameter(); break; case RequestType.ANNOUNCE: returnValue = new RtspRequestAnnounce(); break; case RequestType.RECORD: returnValue = new RtspRequestRecord(); break; /* * case RequestType.REDIRECT: * break; * * case RequestType.SET_PARAMETER: * break; */ case RequestType.UNKNOWN: default: returnValue = new RtspRequest(); break; } return(returnValue); }