Exemplo n.º 1
0
        public RtmpClient(RtmpConnectionRequest Request)
        {
            RtmpRequest                        = Request;
            ProtocolClient.NoDelay             = Request.ProtocolConfigurations.NoDelay;
            ProtocolClient.ExclusiveAddressUse = Request.ProtocolConfigurations.ExclusiveAddressUse;

            if (!Request.ProtocolConfigurations.ReceiveTimeout.Equals(0))
            {
                ProtocolClient.ReceiveTimeout = Request.ProtocolConfigurations.ReceiveTimeout;
            }

            if (!Request.ProtocolConfigurations.SendTimeout.Equals(0))
            {
                ProtocolClient.SendTimeout = Request.ProtocolConfigurations.SendTimeout;
            }

            if (!Request.ProtocolConfigurations.RecieveBufferSize.Equals(0))
            {
                ProtocolClient.ReceiveBufferSize = Request.ProtocolConfigurations.RecieveBufferSize;
            }

            if (!Request.ProtocolConfigurations.SendBufferSize.Equals(0))
            {
                ProtocolClient.SendBufferSize = Request.ProtocolConfigurations.SendBufferSize;
            }
        }
Exemplo n.º 2
0
        public static async Task ValidateClientRequestAsync(this TcpClient client, RtmpConnectionRequest request)
        {
            Task task = Task.Run(() =>
            {
                // Validation Steps:
                // Validate URI Scheme Request
                //  * Validate EnableSsl matches with Protocol Type RTMPs (cannot be RTMP)
            });

            await task;
        }
Exemplo n.º 3
0
        // [FInished] : Connection Complete
        public async Task ConnectAsync(RtmpConnectionRequest Request)
        {
            RtmpRequest                        = Request;
            ProtocolClient.NoDelay             = Request.ProtocolConfigurations.NoDelay;
            ProtocolClient.ExclusiveAddressUse = Request.ProtocolConfigurations.ExclusiveAddressUse;

            if (Request.ProtocolConfigurations.ReceiveTimeout != -1)
            {
                ProtocolClient.ReceiveTimeout = Request.ProtocolConfigurations.ReceiveTimeout;
            }

            if (Request.ProtocolConfigurations.SendTimeout != -1)
            {
                ProtocolClient.SendTimeout = Request.ProtocolConfigurations.SendTimeout;
            }

            if (Request.ProtocolConfigurations.RecieveBufferSize != -1)
            {
                ProtocolClient.ReceiveBufferSize = Request.ProtocolConfigurations.RecieveBufferSize;
            }

            if (Request.ProtocolConfigurations.SendBufferSize != -1)
            {
                try
                {
                    // Step 01: Make connection to socket on Server-Side TCP Listener if URI Schema is valid
                    await ProtocolClient.ValidateClientRequestAsync(RtmpRequest);

                    // Step 02: Connect to Host Socket
                    await ProtocolClient.ConnectAsync(RtmpRequest.Content.RtmpUri.Host, RtmpRequest.Content.RtmpUri.Port != -1?RtmpRequest.Content.RtmpUri.Port : DefaultPort);

                    // Step 03: Validate Socket Connection
                    await ProtocolClient.ValidateClientConnectionAsync(RtmpRequest.ProtocolConfigurations);

                    // Step 04: Set the Resolved Stream
                    RtmpStream = await ProtocolClient.ResolveStreamTypeAsync(RtmpRequest);

                    // Step 05: Validate Stream Properties Match with request
                    await RtmpStream.ValidateStreamPropertiesAsync(RtmpRequest.StreamConfigurations);

                    // Step 06: Initialize the Handshake Sequence
                    await RtmpStream.InitializeHandshakeSequenceAsync(StopToken);
                }
                catch (Exception exception)
                {
                    throw new Exception("Connection was unsuccessful.", exception);
                }
            }
        }
Exemplo n.º 4
0
        // [Finished] : Create eiter a SSL Stream or standard Network Stream
        public static async Task <Stream> ResolveStreamTypeAsync(this TcpClient protocol, RtmpConnectionRequest request)
        {
            Stream NetStream = protocol.GetStream();

            if (request.StreamConfigurations.EnableSsl.Equals(true))
            {
                // Request a Callback Delegate to Vallidate Remote Certificate
                RemoteCertificateValidationCallback ValidationCallback = (sender, certificate, chain, errors) => true;

                // Instantiate a New SSL Stream [Transfer Current Stream to SSL Stream then close]
                SslStream Sslstream = new SslStream(NetStream, false, ValidationCallback);

                // Authenticate Server through Client Request [Set Configure Await to 'True' to return context before returning stream]
                await Sslstream.AuthenticateAsClientAsync(request.Content.RtmpUri.Host).ConfigureAwait(true);

                return(Sslstream);
            }
            else
            {
                return(NetStream);
            }
        }