private void RTSP_ProcessDescribeRequest(RtspRequestDescribe message, RtspListener listener) { String requested_url = message.RtspUri.ToString(); Task <byte[]> sdpDataTask = _videoSource != null? OnProvideSdpData?.Invoke(Id, _videoSource) : Task.FromResult <byte[]>(null); byte[] sdpData = sdpDataTask.Result; if (sdpData != null) { Rtsp.Messages.RtspResponse describe_response = message.CreateResponse(_logger); describe_response.AddHeader("Content-Base: " + requested_url); describe_response.AddHeader("Content-Type: application/sdp"); describe_response.Data = sdpData; describe_response.AdjustContentLength(); // Create the reponse to DESCRIBE // This must include the Session Description Protocol (SDP) describe_response.Headers.TryGetValue(RtspHeaderNames.ContentBase, out contentBase); using (StreamReader sdp_stream = new StreamReader(new MemoryStream(describe_response.Data))) { _sdpFile = Rtsp.Sdp.SdpFile.Read(sdp_stream); } listener.SendMessage(describe_response); } else { Rtsp.Messages.RtspResponse describe_response = (message as Rtsp.Messages.RtspRequestDescribe).CreateResponse(_logger); //Method Not Valid In This State" describe_response.ReturnCode = 455; listener.SendMessage(describe_response); } }
protected Task <byte[]> ProcessRtspProvideSdpData(Guid connectionId, VideoSource videoSource) { return(OnProvideSdpData?.Invoke(connectionId, videoSource)); }