From fc6181a12b05a5ee1ce67b78498c39097eda76f0 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Fri, 7 Oct 2022 21:21:00 +0200 Subject: [PATCH] recieve --- screenstreamer/gui.py | 18 +++++++++--- screenstreamer/reciever.py | 14 +++++++++ screenstreamer/streamer.py | 6 ++-- ui/mainwindow.ui | 59 ++++++++++++++++++++++++++------------ 4 files changed, 71 insertions(+), 26 deletions(-) create mode 100644 screenstreamer/reciever.py diff --git a/screenstreamer/gui.py b/screenstreamer/gui.py index 76a57ed..747f531 100644 --- a/screenstreamer/gui.py +++ b/screenstreamer/gui.py @@ -1,6 +1,7 @@ from PySide6 import QtCore, QtWidgets from generated.mainwindow import Ui_ScreenStreamer from streamer import Streamer +from reciever import Reciever from Xlib import display from Xlib.ext import randr @@ -53,13 +54,22 @@ class ScreenStreamerGUI(QtWidgets.QMainWindow): @QtCore.Slot() def stream_pressed(self): displaydata = self.ui.displaySelect.currentData() - self.streamer = Streamer(self.format_display(displaydata), self.format_screensize(displaydata), self.ui.sendto.text()) + self.streamer = Streamer( + self.format_display(displaydata), + self.format_screensize(displaydata), + self.ui.protocolSelect.currentText().lower(), + self.ui.sendto.text() + ) self.streamer.start() # TODO: add button to stop and feedback on error - print('stream started') self.ui.statusbar.showMessage('stream started') @QtCore.Slot() def recieve_pressed(self): - # TODO - print('recieve') + self.receiver = Reciever( + self.ui.protocolSelect.currentText().lower(), + self.ui.listenAddr.text() + ) + self.receiver.start() + # TODO: add button to stop and feedback on error + self.ui.statusbar.showMessage('stream started') diff --git a/screenstreamer/reciever.py b/screenstreamer/reciever.py new file mode 100644 index 0000000..e89d91a --- /dev/null +++ b/screenstreamer/reciever.py @@ -0,0 +1,14 @@ +import subprocess + +class Reciever: + + def __init__(self, protocol: str, target: str) -> None: + self.protocol = protocol # should be 'tcp' or 'udp' + self.target = target + + def start(self): + # currently there is no direct ffplay support in the ffmpeg package + + addr = self.protocol+ '://' + self.target + '?listen' + self.proc = subprocess.Popen(['ffplay', '-fflags', 'nobuffer', '-flags', 'low_delay', '-f', 'mpegts', addr]) + diff --git a/screenstreamer/streamer.py b/screenstreamer/streamer.py index ad336d4..5254685 100644 --- a/screenstreamer/streamer.py +++ b/screenstreamer/streamer.py @@ -1,15 +1,15 @@ -from platform import python_branch import ffmpeg class Streamer: - def __init__(self, screendef: str, screensize: str, target: str) -> None: + def __init__(self, screendef: str, screensize: str, protocol: str, target: str) -> None: self.screendef = screendef self.screensize = screensize + self.protocol = protocol # should be 'tcp' or 'udp' self.target = target def start(self): self.input = ffmpeg.input(self.screendef, f='x11grab', r=60, s=self.screensize) - self.output = ffmpeg.output(self.input, 'tcp://' + self.target, f='mpegts', vcodec='nvenc_hevc', tune='zerolatency') + self.output = ffmpeg.output(self.input, self.protocol + '://' + self.target, f='mpegts', vcodec='nvenc_hevc', tune='zerolatency') self.proc = ffmpeg.run_async(self.output) diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index 76923af..f76e10e 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 471 - 231 + 587 + 296 @@ -19,15 +19,36 @@ 0 0 - 456 - 153 + 571 + 241 - + QLayout::SetMaximumSize - + + + + + TCP + + + + + UDP + + + + + + + + Protocol + + + + Stream @@ -67,27 +88,27 @@ - + Recieve - + ListenAddress - + 0.0.0.0:1234 - + Recieve @@ -105,7 +126,7 @@ 0 0 - 471 + 587 24 @@ -121,12 +142,12 @@ stream_pressed() - 96 - 134 + 130 + 181 - 119 - 197 + 141 + 269 @@ -137,12 +158,12 @@ recieve_pressed() - 275 - 137 + 392 + 152 - 300 - 201 + 441 + 270