/// <summary> /// Handles the request play. /// Do not forward message if already playing /// </summary> /// <param name="destination">The destination.</param> /// <param name="requestPlay">The request play.</param> /// <returns>The message to transmit</returns> private RtspMessage HandleRequestPlay(ref RtspListener destination, RtspRequestPlay requestPlay) { Contract.Requires(requestPlay != null); Contract.Requires(destination != null); Contract.Ensures(Contract.Result <RtspMessage>() != null); Contract.Ensures(Contract.ValueAtReturn(out destination) != null); string sessionKey = RtspSession.GetSessionName(requestPlay.RtspUri, requestPlay.Session); if (_activesSession.ContainsKey(sessionKey)) { RtspSession session = _activesSession[sessionKey]; // si on est dèjà en play on n'envoie pas la commande a la source. if (session.State == RtspSession.SessionState.Playing) { session.Start(requestPlay.SourcePort.RemoteAdress); RtspResponse returnValue = requestPlay.CreateResponse(); destination = requestPlay.SourcePort; return(returnValue); } // ajoute un client session.Start(requestPlay.SourcePort.RemoteAdress); } return(requestPlay); }
private void RTSP_ProcessPlayRequest(RtspRequestPlay message, RtspListener listener) { OnPlay?.Invoke(Id); Play = true; // ACTUALLY YOU COULD PAUSE JUST THE VIDEO (or JUST THE AUDIO) _logger.Info($"Connection {Id} play started"); string range = "npt=0-"; // Playing the 'video' from 0 seconds until the end string rtp_info = "url=" + message.RtspUri + ";seq=" + _videoSequenceNumber; // TODO Add rtptime +";rtptime="+session.rtp_initial_timestamp; // Send the reply Rtsp.Messages.RtspResponse play_response = message.CreateResponse(_logger); play_response.AddHeader("Range: " + range); play_response.AddHeader("RTP-Info: " + rtp_info); listener.SendMessage(play_response); //TODO: find a p[lace for this check] // Session ID was not found in the list of Sessions. Send a 454 error /* Rtsp.Messages.RtspResponse play_failed_response = (e.Message as Rtsp.Messages.RtspRequestPlay).CreateResponse(); * play_failed_response.ReturnCode = 454; // Session Not Found * listener.SendMessage(play_failed_response);*/ }
internal RtspResponse HandlePullPlay(RtspRequestPlay request) { var response = request.CreateResponse(); return(response); }