ソースを参照

Close live stream on session end

Cody Robibero 3 年 前
コミット
bf0a7c374c

+ 5 - 1
Emby.Server.Implementations/Session/SessionManager.cs

@@ -329,13 +329,17 @@ namespace Emby.Server.Implementations.Session
         }
 
         /// <inheritdoc />
-        public void CloseIfNeeded(SessionInfo session)
+        public async Task CloseIfNeededAsync(SessionInfo session)
         {
             if (!session.SessionControllers.Any(i => i.IsSessionActive))
             {
                 var key = GetSessionKey(session.Client, session.DeviceId);
 
                 _activeConnections.TryRemove(key, out _);
+                if (!string.IsNullOrEmpty(session.PlayState?.LiveStreamId))
+                {
+                    await _mediaSourceManager.CloseLiveStream(session.PlayState?.LiveStreamId).ConfigureAwait(false);
+                }
 
                 OnSessionEnded(session);
             }

+ 2 - 2
Emby.Server.Implementations/Session/WebSocketController.cs

@@ -53,13 +53,13 @@ namespace Emby.Server.Implementations.Session
             connection.Closed += OnConnectionClosed;
         }
 
-        private void OnConnectionClosed(object? sender, EventArgs e)
+        private async void OnConnectionClosed(object? sender, EventArgs e)
         {
             var connection = sender as IWebSocketConnection ?? throw new ArgumentException($"{nameof(sender)} is not of type {nameof(IWebSocketConnection)}", nameof(sender));
             _logger.LogDebug("Removing websocket from session {Session}", _session.Id);
             _sockets.Remove(connection);
             connection.Closed -= OnConnectionClosed;
-            _sessionManager.CloseIfNeeded(_session);
+            await _sessionManager.CloseIfNeededAsync(_session).ConfigureAwait(false);
         }
 
         /// <inheritdoc />

+ 1 - 1
MediaBrowser.Controller/Session/ISessionManager.cs

@@ -352,6 +352,6 @@ namespace MediaBrowser.Controller.Session
         /// <returns>Task.</returns>
         Task RevokeUserTokens(Guid userId, string currentAccessToken);
 
-        void CloseIfNeeded(SessionInfo session);
+        Task CloseIfNeededAsync(SessionInfo session);
     }
 }