CSharpRTMP.Core.Protocols.Rtsp.BaseRtspAppProtocolHandler.HandleRTSPRequestPlay C# (CSharp) Method

HandleRTSPRequestPlay() private method

private HandleRTSPRequestPlay ( RtspProtocol pFrom, Variant requestHeaders, string requestContent ) : bool
pFrom RtspProtocol
requestHeaders Variant
requestContent string
return bool
        private bool HandleRTSPRequestPlay(RtspProtocol pFrom, Variant requestHeaders, string requestContent)
        {
            //1. Get the outbound connectivity
            bool forceTcp = pFrom.CustomParameters["forceTcp"];
            var pOutboundConnectivity = GetOutboundConnectivity(pFrom, true);
            if (pOutboundConnectivity == null)
            {
                FATAL("Unable to get the outbound connectivity");
                return false;
            }

            if (forceTcp)
            {
                //3. Get the audio/video client ports
                byte videoDataChannelNumber = 0xff;
                byte videoRtcpChannelNumber = 0xff;
                byte audioDataChannelNumber = 0xff;
                byte audioRtcpChannelNumber = 0xff;
                if (pFrom.CustomParameters["audioDataChannelNumber"]!=null)
                {
                    audioDataChannelNumber = pFrom.CustomParameters["audioDataChannelNumber"];
                    audioRtcpChannelNumber = pFrom.CustomParameters["audioRtcpChannelNumber"];
                }
                if (pFrom.CustomParameters["videoDataChannelNumber"] != null)
                {
                    videoDataChannelNumber = pFrom.CustomParameters["videoDataChannelNumber"];
                    videoRtcpChannelNumber = pFrom.CustomParameters["videoRtcpChannelNumber"];
                }

                //4.register the video
                if (videoDataChannelNumber != 0xff)
                {
                    if (!pOutboundConnectivity.RegisterTCPVideoClient(pFrom.Id,
                            videoDataChannelNumber, videoRtcpChannelNumber))
                    {
                        FATAL("Unable to register video stream");
                        return false;
                    }
                }

                //5. Register the audio
                if (audioDataChannelNumber != 0xff)
                {
                    if (!pOutboundConnectivity.RegisterTCPAudioClient(pFrom.Id,
                            audioDataChannelNumber, audioRtcpChannelNumber))
                    {
                        FATAL("Unable to register audio stream");
                        return false;
                    }
                }
            }
            else
            {
                //3. Get the audio/video client ports
                ushort videoDataPortNumber = 0;
                ushort videoRtcpPortNumber = 0;
                ushort audioDataPortNumber = 0;
                ushort audioRtcpPortNumber = 0;
                if (pFrom.CustomParameters["audioDataPortNumber"] != null)
                {
                    audioDataPortNumber = pFrom.CustomParameters["audioDataPortNumber"];
                    audioRtcpPortNumber = pFrom.CustomParameters["audioRtcpPortNumber"];
                }
                if (pFrom.CustomParameters["videoDataPortNumber"] != null)
                {
                    videoDataPortNumber = pFrom.CustomParameters["videoDataPortNumber"];
                    videoRtcpPortNumber = pFrom.CustomParameters["videoRtcpPortNumber"];
                }

                //4.register the video
                if (videoDataPortNumber != 0)
                {
                    var videoDataAddress = ((TCPCarrier)pFrom.IOHandler).FarInfo;
                    videoDataAddress.Port = videoDataPortNumber;
                    var videoRtcpAddress = ((TCPCarrier)pFrom.IOHandler).FarInfo;
                    videoRtcpAddress.Port = videoRtcpPortNumber;
                    if (!pOutboundConnectivity.RegisterUDPVideoClient(pFrom.Id,
                            videoDataAddress, videoRtcpAddress))
                    {
                        FATAL("Unable to register video stream");
                        return false;
                    }
                }

                //5. Register the audio
                if (audioDataPortNumber != 0)
                {
                    var audioDataAddress = ((TCPCarrier)pFrom.IOHandler).FarInfo;
                    audioDataAddress.Port = audioDataPortNumber;
                    var audioRtcpAddress = ((TCPCarrier)pFrom.IOHandler).FarInfo;
                    audioRtcpAddress.Port = audioRtcpPortNumber;
                    if (!pOutboundConnectivity.RegisterUDPAudioClient(pFrom.Id,audioDataAddress, audioRtcpAddress))
                    {
                        FATAL("Unable to register audio stream");
                        return false;
                    }
                }
            }

            //6. prepare the response
            pFrom.PushResponseFirstLine(RTSP_VERSION_1_0, 200, "OK");
            //7. Done
            return pFrom.SendResponseMessage();
        }