33 lines
934 B
Python
33 lines
934 B
Python
|
from time import sleep
|
||
|
from PIL import Image
|
||
|
from io import BytesIO
|
||
|
import pyscreeze
|
||
|
|
||
|
|
||
|
class ScreenShareHandler:
|
||
|
def __init__(self, app):
|
||
|
self.app = app
|
||
|
self.screen = pyscreeze
|
||
|
self.active = True
|
||
|
self.frame_rate = 15 # frames per second
|
||
|
|
||
|
def capture_and_send(self):
|
||
|
delay = 1 / self.frame_rate
|
||
|
while self.app.running:
|
||
|
if self.app.authenticated and self.active:
|
||
|
frame = self.screen.screenshot()
|
||
|
frame_rgb = frame.convert("RGB")
|
||
|
buffer = BytesIO()
|
||
|
frame_rgb.save(buffer, "JPEG", quality=70)
|
||
|
compressed_frame_data = buffer.getvalue()
|
||
|
self.app.send("SCREEN", compressed_frame_data, frame_rgb.width, frame_rgb.height)
|
||
|
sleep(delay)
|
||
|
|
||
|
def receive(self, frame, width, height):
|
||
|
# Known issue: Interleaved Data Streams
|
||
|
if not isinstance(frame, bytes):
|
||
|
frame = bytes(frame)
|
||
|
frame_buffer = BytesIO(frame)
|
||
|
self.app.gui.original_image = Image.open(frame_buffer)
|
||
|
self.app.gui.adjust_image()
|