From 985ef2dfc3dedb7cfcda0bb4e5ae160aad305b01 Mon Sep 17 00:00:00 2001 From: subnub Date: Mon, 11 May 2020 00:20:06 -0400 Subject: [PATCH] still fixing video streaming, issue with canceled request --- backend/controllers/file.ts | 14 +++++++------- backend/services/ChunkService/FileSystemService.ts | 8 +++++++- backend/services/ChunkService/S3Service.ts | 8 +++++++- .../services/ChunkService/utils/ChunkInterface.ts | 2 +- .../ChunkService/utils/awaitStreamVideo.ts | 2 +- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/backend/controllers/file.ts b/backend/controllers/file.ts index 72dcfc6..3bd6259 100644 --- a/backend/controllers/file.ts +++ b/backend/controllers/file.ts @@ -369,15 +369,15 @@ class FileController { console.log("stream request", req.params.id) - req.on("close", () => { - console.log("req closed stream"); - }) + // req.on("close", () => { + // console.log("req closed stream"); + // }) - req.on("abort", () => { - console.log("Aborted"); - }) + // req.on("abort", () => { + // console.log("Aborted"); + // }) - await this.chunkService.streamVideo(user, fileID, headers, res); + await this.chunkService.streamVideo(user, fileID, headers, res, req); } catch (e) { diff --git a/backend/services/ChunkService/FileSystemService.ts b/backend/services/ChunkService/FileSystemService.ts index c77ae04..7ecf86a 100644 --- a/backend/services/ChunkService/FileSystemService.ts +++ b/backend/services/ChunkService/FileSystemService.ts @@ -193,7 +193,7 @@ class FileSystemService implements ChunkInterface { console.log("Full thumbnail sent"); } - streamVideo = async(user: UserInterface, fileID: string, headers: any, res: Response) => { + streamVideo = async(user: UserInterface, fileID: string, headers: any, res: Response, req: Request) => { const userID = user._id; const currentFile: FileInterface = await dbUtilsFile.getFileInfo(fileID, userID); @@ -256,6 +256,12 @@ class FileSystemService implements ChunkInterface { readStream.pipe(decipher); + req.on("close", () => { + console.log("Destroying read stream"); + readStream.destroy(); + console.log("Read Stream Destoryed"); + }) + await awaitStreamVideo(start, end, differenceStart, decipher, res, allStreamsToErrorCatch); } diff --git a/backend/services/ChunkService/S3Service.ts b/backend/services/ChunkService/S3Service.ts index e51cb0d..c37d0d9 100644 --- a/backend/services/ChunkService/S3Service.ts +++ b/backend/services/ChunkService/S3Service.ts @@ -132,7 +132,7 @@ class S3Service implements ChunkInterface { } - streamVideo = async(user: UserInterface, fileID: string, headers: any, res: Response) => { + streamVideo = async(user: UserInterface, fileID: string, headers: any, res: Response, req: Request) => { const userID = user._id; const currentFile: FileInterface = await dbUtilsFile.getFileInfo(fileID, userID); @@ -192,6 +192,12 @@ class S3Service implements ChunkInterface { s3ReadStream.pipe(decipher); + req.on("close", () => { + console.log("Destoying read stream"); + s3ReadStream.destroy(); + console.log("Read Stream Destroyed"); + }) + await awaitStreamVideo(start, end, differenceStart, decipher, res, allStreamsToErrorCatch); } diff --git a/backend/services/ChunkService/utils/ChunkInterface.ts b/backend/services/ChunkService/utils/ChunkInterface.ts index c335077..1d48fc5 100644 --- a/backend/services/ChunkService/utils/ChunkInterface.ts +++ b/backend/services/ChunkService/utils/ChunkInterface.ts @@ -8,7 +8,7 @@ interface ChunkInterface { getThumbnail: (user: UserInterface, id: string) => Promise; getFullThumbnail: (user: UserInterface, fileID: string, res: Response) => void; getPublicDownload: (fileID: string, tempToken: any, res: Response) => void; - streamVideo: (user: UserInterface, fileID: string, headers: any, res: Response) => void; + streamVideo: (user: UserInterface, fileID: string, headers: any, res: Response, req: Request) => void; } export default ChunkInterface; \ No newline at end of file diff --git a/backend/services/ChunkService/utils/awaitStreamVideo.ts b/backend/services/ChunkService/utils/awaitStreamVideo.ts index ad31154..4374f8d 100644 --- a/backend/services/ChunkService/utils/awaitStreamVideo.ts +++ b/backend/services/ChunkService/utils/awaitStreamVideo.ts @@ -1,4 +1,4 @@ -import {Response} from "express" +import {Response, Request} from "express" const awaitStreamVideo = (start: number, end:number, differenceStart: number, decipher: any, res: Response, streamsToErrorCatch: any[]) => {