From 46e7d28fc878044dfb66968589124b2e46ce13d7 Mon Sep 17 00:00:00 2001 From: ArabCoders Date: Tue, 26 Mar 2024 00:16:00 +0300 Subject: [PATCH] Cleanup the video player. --- app/main.py | 6 +++--- app/player/M3u8.py | 14 +++++++------- app/player/Segments.py | 26 +++++++++++++------------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/app/main.py b/app/main.py index 1c374cae..93f5e97e 100644 --- a/app/main.py +++ b/app/main.py @@ -443,14 +443,14 @@ class Main: raise web.HTTPBadRequest(reason='segment is required') segmenter = Segments( - segment_index=int(segment), - segment_duration=float('{:.6f}'.format(float(sd if sd else M3u8.segment_duration))), + index=int(segment), + duration=float('{:.6f}'.format(float(sd if sd else M3u8.duration))), vconvert=True if vc == 1 else False, aconvert=True if ac == 1 else False ) return web.Response( - body=await segmenter.stream(download_path=self.config.download_path, file=file), + body=await segmenter.stream(path=self.config.download_path, file=file), headers={ 'Content-Type': 'video/mpegts', 'Cache-Control': 'no-cache', diff --git a/app/player/M3u8.py b/app/player/M3u8.py index 8980e4d4..22790217 100644 --- a/app/player/M3u8.py +++ b/app/player/M3u8.py @@ -9,12 +9,12 @@ class M3u8: ok_vcodecs: tuple = ('h264', 'x264', 'avc',) ok_acodecs: tuple = ('aac', 'mp3',) - segment_duration: float = 10.000000 url: str = None + duration: float = 6.000000 - def __init__(self, url: str, segment_duration: float = 6.000000): + def __init__(self, url: str, segment_duration: float = None): self.url = url - self.segment_duration = float(segment_duration) + self.duration = float(segment_duration) if segment_duration is not None else self.duration async def make_stream(self, download_path: str, file: str): realFile: str = calcDownloadPath(basePath=download_path, folder=file, createPath=False) @@ -35,12 +35,12 @@ class M3u8: m3u8 = "#EXTM3U\n" m3u8 += "#EXT-X-VERSION:3\n" - m3u8 += f"#EXT-X-TARGETDURATION:{int(self.segment_duration)}\n" + m3u8 += f"#EXT-X-TARGETDURATION:{int(self.duration)}\n" m3u8 += "#EXT-X-MEDIA-SEQUENCE:0\n" m3u8 += "#EXT-X-PLAYLIST-TYPE:VOD\n" - segmentSize: float = '{:.6f}'.format(self.segment_duration) - splits: int = math.ceil(duration / self.segment_duration) + segmentSize: float = '{:.6f}'.format(self.duration) + splits: int = math.ceil(duration / self.duration) segmentParams: dict = {} @@ -54,7 +54,7 @@ class M3u8: for i in range(splits): if (i + 1) == splits: - segmentParams.update({'sd': '{:.6f}'.format(duration - (i * self.segment_duration))}) + segmentParams.update({'sd': '{:.6f}'.format(duration - (i * self.duration))}) m3u8 += f"#EXTINF:{segmentParams['sd']}, nodesc\n" else: m3u8 += f"#EXTINF:{segmentSize}, nodesc\n" diff --git a/app/player/Segments.py b/app/player/Segments.py index b862717c..f9f7243f 100644 --- a/app/player/Segments.py +++ b/app/player/Segments.py @@ -10,19 +10,19 @@ LOG = logging.getLogger('segments') class Segments: - segment_duration: int - segment_index: int + duration: int + index: int vconvert: bool aconvert: bool - def __init__(self, segment_index: int, segment_duration: float, vconvert: bool, aconvert: bool): - self.segment_duration = float(segment_duration) - self.segment_index = int(segment_index) + def __init__(self, index: int, duration: float, vconvert: bool, aconvert: bool): + self.index = int(index) + self.duration = float(duration) self.vconvert = bool(vconvert) self.aconvert = bool(aconvert) - async def stream(self, download_path: str, file: str) -> bytes: - realFile: str = calcDownloadPath(basePath=download_path, folder=file, createPath=False) + async def stream(self, path: str, file: str) -> bytes: + realFile: str = calcDownloadPath(basePath=path, folder=file, createPath=False) if not os.path.exists(realFile): raise Exception(f"File {realFile} does not exist.") @@ -33,10 +33,10 @@ class Segments: if not os.path.exists(tmpFile): os.symlink(realFile, tmpFile) - if self.segment_index == 0: + if self.index == 0: startTime: float = '{:.6f}'.format(0) else: - startTime: float = '{:.6f}'.format((self.segment_duration * self.segment_index)) + startTime: float = '{:.6f}'.format((self.duration * self.index)) fargs = [] fargs.append('-xerror') @@ -47,7 +47,7 @@ class Segments: fargs.append('-ss') fargs.append(str(startTime if startTime else '0.00000')) fargs.append('-t') - fargs.append(str('{:.6f}'.format(self.segment_duration))) + fargs.append(str('{:.6f}'.format(self.duration))) fargs.append('-copyts') @@ -99,7 +99,7 @@ class Segments: fargs.append('mpegts') fargs.append('pipe:1') - LOG.debug(f"Streaming '{realFile}' segment '{self.segment_index}'. " + " ".join(fargs)) + LOG.debug(f"Streaming '{realFile}' segment '{self.index}'. " + " ".join(fargs)) proc = await asyncio.subprocess.create_subprocess_exec( 'ffmpeg', *fargs, @@ -111,7 +111,7 @@ class Segments: data, err = await proc.communicate() if 0 != proc.returncode: - LOG.error(f'Failed to stream {realFile} segment {self.segment_index}. {err.decode("utf-8")}') - raise Exception(f'Failed to stream {realFile} segment {self.segment_index}.') + LOG.error(f'Failed to stream {realFile} segment {self.index}. {err.decode("utf-8")}') + raise Exception(f'Failed to stream {realFile} segment {self.index}.') return data