Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        /// <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);
        }