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