public static RtspResponse CreateResponse(this RtspRequestOptions t, string options) { RtspResponse response = t.CreateResponse(); response.Headers[RtspHeaderNames.Public] = options; return(response); }
public void SendMessage() { MemoryStream stream = new MemoryStream(); _mockTransport.GetStream().Returns(stream); // Setup test object. RtspListener testedListener = new RtspListener(_mockTransport); testedListener.MessageReceived += new EventHandler <RtspChunkEventArgs>(MessageReceived); testedListener.DataReceived += new EventHandler <RtspChunkEventArgs>(DataReceived); RtspMessage message = new RtspRequestOptions(); // Run var isSuccess = testedListener.SendMessage(message); Assert.That(isSuccess, Is.True); string result = Encoding.UTF8.GetString(stream.GetBuffer()); result = result.TrimEnd('\0'); Assert.That(result, Does.StartWith("OPTIONS * RTSP/1.0\r\n")); // packet without payload must end with double return Assert.That(result, Does.EndWith("\r\n\r\n")); }
internal RtspResponse HandleOptions(RtspRequestOptions request) { Contract.Requires(request != null); Contract.Ensures(Contract.Result <RtspResponse>() != null); var response = request.CreateResponse(); response.ReturnCode = 200; return(response); }
public void Connect() { _client.Start(); // Send first setup messge: OPTIONS RtspRequest optionsMessage = new RtspRequestOptions(); optionsMessage.RtspUri = new Uri(_url); _client.SendMessage(optionsMessage); }
void Timeout(Object stateInfo) { // Send Keepalive message RtspRequest options_message = new RtspRequestOptions { RtspUri = new Uri(url) }; rtspListener.SendMessage(options_message); }
private void RTSP_ProcessOptionsRequest(RtspRequestOptions message, RtspListener listener) { String requested_url = message.RtspUri.ToString(); _logger.Info($"Connection {listener.ConnectionId} requested for url: {requested_url}"); _videoSource = _requestUrlVideoSourceResolverStrategy.ResolveVideoSource(requested_url); OnConnectionAdded?.Invoke(Id, _videoSource); //treat connection useful when VideoSource determined // Create the reponse to OPTIONS Rtsp.Messages.RtspResponse options_response = message.CreateResponse(_logger); // Rtsp.Messages.RtspResponse options_response = OnRtspMessageReceived?.Invoke(message as Rtsp.Messages.RtspRequest,targetConnection); listener.SendMessage(options_response); }
public void Start(ClipDefinition clip) { if (clip == null) { throw new ArgumentNullException(nameof(clip), "clip cannot be null"); } if (clip.Url.Length < 7) { throw new ArgumentException("clip url cannot be empty"); } url = clip.Url; try { Uri uri = new Uri(url); TcpClient tcpClient = new TcpClient(); var task = Task.Run(async() => { await tcpClient.ConnectAsync(uri.Host, uri.Port > 0 ? uri.Port : 554); }); task.Wait(); rtspSocket = new Rtsp.RtspTcpTransport(tcpClient); if (rtspSocket.Connected == false) { Logger.Error("Did not connect"); return; } // Connect a RTSP Listener to the RTSP Socket (or other Stream) to send RTSP messages and listen for RTSP replies rtspListener = new Rtsp.RtspListener(rtspSocket); rtspListener.MessageReceived += RtspMessageReceived; rtspListener.DataReceived += RtpDataReceived; rtspListener.Start(); RtspRequest optionsMessage = new RtspRequestOptions { RtspUri = new Uri(url) }; rtspListener.SendMessage(optionsMessage); } catch (Exception e) { Logger.Error(e, "Did not connect"); } }
private async Task ExecuteStart(ClipDefinition clip, CancellationToken ctx) { if (clip == null) { throw new ArgumentNullException(nameof(clip), "Clip cannot be null."); } if (clip.Url.Length < 7) { throw new ArgumentException("Clip URL cannot be empty."); } rtspUrl = clip.Url; TcpClient tcpClient = new TcpClient(); tcpClient.SendTimeout = 10000; tcpClient.ReceiveTimeout = 10000; try { Uri uri = new Uri(rtspUrl); await tcpClient.ConnectAsync(uri.Host, uri.Port > 0?uri.Port : 554).WaitAsync(ctx); } catch (Exception e) { Logger.Info(e.ToString()); tcpClient.Dispose(); throw; } rtspSocket = new Rtsp.RtspTcpTransport(tcpClient); if (rtspSocket.Connected == false) { throw new Exception("RTSP server not available at this time."); } rtspListener = new Rtsp.RtspListener(rtspSocket, rtspErrorSubject); rtspListener.MessageReceived += RtspMessageReceived; rtspListener.DataReceived += RtpDataReceived; rtspListener.AutoReconnect = false; rtspListener.Start(); RtspRequest optionsMessage = new RtspRequestOptions { RtspUri = new Uri(rtspUrl) }; rtspListener.SendMessage(optionsMessage); }
void Timeout(object stateInfo) { // Send Keepalive message RtspRequest optionsMessage = new RtspRequestOptions { RtspUri = new Uri(rtspUrl) }; try { if (rtspListener.SendMessage(optionsMessage) == false) { rtspErrorSubject.OnNext("Connection timeout."); } } catch (Exception e) { Logger.Info(e.ToString()); rtspErrorSubject.OnNext("Connection timeout."); } }
// Send Keepalive message void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { RtspRequest message; if (SupportedMethods.Contains("GET_PARAMETER")) { message = new RtspRequestGetParameter(); } else { message = new RtspRequestOptions(); } message.RtspUri = new Uri(Url); message.Session = RtspSession; if (auth_type != null) { AddAuthorization(message, Username, Password, auth_type, realm, nonce, Url); } rtsp_client.SendMessage(message); }