diff --git a/src/lib/Accessory.ts b/src/lib/Accessory.ts index 61a383f08..01438ab43 100644 --- a/src/lib/Accessory.ts +++ b/src/lib/Accessory.ts @@ -1017,6 +1017,10 @@ export class Accessory extends EventEmitter { } unpublish = () => { + if (this.activeCameraController) { + this.activeCameraController.handleShutdown(); + } + if (this._server) { this._server.stop(); this._server = undefined; diff --git a/src/lib/camera/RTPStreamManagement.ts b/src/lib/camera/RTPStreamManagement.ts index 32c992139..46216c5e3 100644 --- a/src/lib/camera/RTPStreamManagement.ts +++ b/src/lib/camera/RTPStreamManagement.ts @@ -531,12 +531,18 @@ export class RTPStreamManagement { // Private - handleCloseConnection(connectionID: SessionIdentifier) { + handleCloseConnection(connectionID: SessionIdentifier): void { if (this.connectionID && this.connectionID === connectionID) { this._handleStopStream(); } } + handleShutdown(): void { + if (this.connectionID) { + this._handleStopStream(); + } + } + handleFactoryReset() { this.selectedConfiguration = null; this.setupEndpointsResponse = RTPStreamManagement.initialSetupEndpointsResponse(); diff --git a/src/lib/controller/CameraController.ts b/src/lib/controller/CameraController.ts index 6c57c48ef..da643df42 100644 --- a/src/lib/controller/CameraController.ts +++ b/src/lib/controller/CameraController.ts @@ -362,4 +362,8 @@ export class CameraController extends EventEmitter imp } } + handleShutdown(): void { + this.streamManagements.forEach(management => management.handleShutdown()); + } + }