From c61df94ae4f68d38b8c65f7af7470c8a79d48a22 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Mon, 30 Nov 2020 10:56:14 -0500 Subject: [PATCH] Add Downloaded Size Parameter to Tuner Status --- data/www/templates/streams.html | 3 +++ fHDHR/device/tuners/stream/direct_stream.py | 5 +++++ fHDHR/device/tuners/stream/ffmpeg_stream.py | 9 ++++++--- fHDHR/device/tuners/stream/vlc_stream.py | 9 ++++++--- fHDHR/device/tuners/tuner.py | 5 +++++ fHDHR/http/pages/streams_html.py | 3 +++ fHDHR/tools/__init__.py | 8 ++++++++ 7 files changed, 36 insertions(+), 6 deletions(-) diff --git a/data/www/templates/streams.html b/data/www/templates/streams.html index ff80693..fc387a4 100644 --- a/data/www/templates/streams.html +++ b/data/www/templates/streams.html @@ -11,6 +11,7 @@ Channel Method Time Active + Total Downloaded Options @@ -22,10 +23,12 @@ {{ tuner_dict["channel_number"] }} {{ tuner_dict["method"] }} {{ tuner_dict["play_duration"] }} + {{ tuner_dict["downloaded"] }} {% else %} N/A N/A N/A + N/A {% endif %}
diff --git a/fHDHR/device/tuners/stream/direct_stream.py b/fHDHR/device/tuners/stream/direct_stream.py index 706baef..286b4aa 100644 --- a/fHDHR/device/tuners/stream/direct_stream.py +++ b/fHDHR/device/tuners/stream/direct_stream.py @@ -1,3 +1,4 @@ +import sys import time import m3u8 @@ -48,6 +49,8 @@ class Direct_Stream(): self.fhdhr.logger.info("Passing Through Chunk #%s with size %s" % (chunk_counter, self.chunksize)) yield chunk + chunk_size = int(sys.getsizeof(chunk)) + self.tuner.add_downloaded_size(chunk_size) chunk_counter += 1 @@ -123,6 +126,8 @@ class Direct_Stream(): self.fhdhr.logger.info("Passing Through Chunk: %s" % chunkurl) yield chunk + chunk_size = int(sys.getsizeof(chunk)) + self.tuner.add_downloaded_size(chunk_size) if playlist.target_duration: time.sleep(int(playlist.target_duration)) diff --git a/fHDHR/device/tuners/stream/ffmpeg_stream.py b/fHDHR/device/tuners/stream/ffmpeg_stream.py index 6550865..552a879 100644 --- a/fHDHR/device/tuners/stream/ffmpeg_stream.py +++ b/fHDHR/device/tuners/stream/ffmpeg_stream.py @@ -1,3 +1,4 @@ +import sys import subprocess # from fHDHR.exceptions import TunerError @@ -21,11 +22,13 @@ class FFMPEG_Stream(): try: while self.tuner.tuner_lock.locked(): - videoData = ffmpeg_proc.stdout.read(self.bytes_per_read) - if not videoData: + chunk = ffmpeg_proc.stdout.read(self.bytes_per_read) + if not chunk: break # raise TunerError("807 - No Video Data") - yield videoData + yield chunk + chunk_size = int(sys.getsizeof(chunk)) + self.tuner.add_downloaded_size(chunk_size) self.fhdhr.logger.info("Connection Closed: Tuner Lock Removed") except GeneratorExit: diff --git a/fHDHR/device/tuners/stream/vlc_stream.py b/fHDHR/device/tuners/stream/vlc_stream.py index 78b6a9b..6f9ad1a 100644 --- a/fHDHR/device/tuners/stream/vlc_stream.py +++ b/fHDHR/device/tuners/stream/vlc_stream.py @@ -1,3 +1,4 @@ +import sys import subprocess # from fHDHR.exceptions import TunerError @@ -22,11 +23,13 @@ class VLC_Stream(): while self.tuner.tuner_lock.locked(): - videoData = vlc_proc.stdout.read(self.bytes_per_read) - if not videoData: + chunk = vlc_proc.stdout.read(self.bytes_per_read) + if not chunk: break # raise TunerError("807 - No Video Data") - yield videoData + yield chunk + chunk_size = int(sys.getsizeof(chunk)) + self.tuner.add_downloaded_size(chunk_size) self.fhdhr.logger.info("Connection Closed: Tuner Lock Removed") except GeneratorExit: diff --git a/fHDHR/device/tuners/tuner.py b/fHDHR/device/tuners/tuner.py index f558edb..37f6409 100644 --- a/fHDHR/device/tuners/tuner.py +++ b/fHDHR/device/tuners/tuner.py @@ -17,6 +17,10 @@ class Tuner(): self.tuner_lock = threading.Lock() self.set_off_status() + def add_downloaded_size(self, bytes_count): + if "downloaded" in list(self.status.keys()): + self.status["downloaded"] += bytes_count + def grab(self): if self.tuner_lock.locked(): self.fhdhr.logger.error("Tuner #" + str(self.number) + " is not available.") @@ -56,4 +60,5 @@ class Tuner(): "channel": stream_args["channel"], "proxied_url": stream_args["channelUri"], "time_start": datetime.datetime.utcnow(), + "downloaded": 0 } diff --git a/fHDHR/http/pages/streams_html.py b/fHDHR/http/pages/streams_html.py index 292ba74..5edd00c 100644 --- a/fHDHR/http/pages/streams_html.py +++ b/fHDHR/http/pages/streams_html.py @@ -1,5 +1,7 @@ from flask import request, render_template +from fHDHR.tools import humanized_filesize + class Streams_HTML(): endpoints = ["/streams", "/streams.html"] @@ -24,6 +26,7 @@ class Streams_HTML(): tuner_dict["channel_number"] = tuner_status[tuner]["channel"] tuner_dict["method"] = tuner_status[tuner]["method"] tuner_dict["play_duration"] = str(tuner_status[tuner]["Play Time"]) + tuner_dict["downloaded"] = humanized_filesize(tuner_status[tuner]["downloaded"]) tuner_list.append(tuner_dict) diff --git a/fHDHR/tools/__init__.py b/fHDHR/tools/__init__.py index 33daf32..240b14b 100644 --- a/fHDHR/tools/__init__.py +++ b/fHDHR/tools/__init__.py @@ -89,6 +89,14 @@ def hours_between_datetime(first_time, later_time): return (timebetween.total_seconds() / 60 / 60) +def humanized_filesize(size, decimal_places=2): + for unit in ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']: + if size < 1024.0 or unit == 'YiB': + break + size /= 1024.0 + return f"{size:.{decimal_places}f} {unit}" + + def humanized_time(countdownseconds): time = float(countdownseconds) if time == 0: