public async Task StartAsync(CancellationToken cancellationToken)
 {
     try
     {
         await base.RunAsync(cancellationToken);
     }
     finally
     {
         _context.Sessions.Remove(Id);
         if (IsPlaying)
         {
             _context.RemovePlayer(IsPublishing ? PublishStream.Path : PlayStream.Path, Id);
         }
         else if (IsPublishing)
         {
             _context.RemovePublisher(PublishStream.Path);
         }
     }
 }
        private async Task HandleDeleteStreamAsync(AmfCommandMessage command)
        {
            if (_session.IsPlaying)
            {
                _context.RemovePlayer(_session.PlayStream.Path, _session.Id);
                _logger.LogInformation($@"[rtmp play] Close stream. id ={_session.Id}
                streamPath ={_session.PlayStream.Path}
                streamId =${ _session.PlayStream.Id}");
                await SendStatusMessageAsync(_session.PlayStream.Id, "status", "NetStream.Play.Stop", "Stopped playing stream.");
            }
            if (_session.IsPublishing)
            {
                var stream = _session.PublishStream;
                _logger.LogInformation($@"[rtmp publish] Close stream. id ={_session.Id}
                streamPath ={stream.Path} streamId ={stream.Id}");
                await SendStatusMessageAsync(stream.Id, "status", "NetStream.Unpublish.Success", $"{stream.Path} is now unpublished.");

                await _session.SendStopToAllPlayersAsync();

                _session.PublishStream = null;
                _context.RemovePublisher(stream.Path);
            }
        }