configurable desired_fps

This commit is contained in:
Devaev Maxim 2020-03-20 15:33:47 +03:00
parent 55307fe8da
commit 3cafcaf431
3 changed files with 16 additions and 11 deletions

View File

@ -322,7 +322,8 @@ def _get_config_scheme() -> Dict:
},
"vnc": {
"keymap": Option("", type=valid_abs_path),
"desired_fps": Option(30, type=valid_stream_fps),
"keymap": Option("", type=valid_abs_path),
"server": {
"host": Option("::", type=valid_ip_or_host),

View File

@ -43,6 +43,7 @@ def main(argv: Optional[List[str]]=None) -> None:
VncServer(
kvmd=KvmdClient(**config.kvmd._unpack()),
streamer=StreamerClient(**config.streamer._unpack()),
desired_fps=config.desired_fps,
symmap=build_symmap(config.keymap),
**config.server._unpack(),
).run()

View File

@ -63,6 +63,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
kvmd: KvmdClient,
streamer: StreamerClient,
desired_fps: int,
symmap: Dict[int, str],
shared_params: _SharedParams,
@ -72,6 +73,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
self.__kvmd = kvmd
self.__streamer = streamer
self.__desired_fps = desired_fps
self.__symmap = symmap
self.__shared_params = shared_params
@ -244,10 +246,9 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
async def _on_set_encodings(self) -> None:
assert self.__authorized.done()
(user, passwd) = self.__authorized.result()
(quality, desired_fps) = (self._encodings.tight_jpeg_quality, 30)
get_logger(0).info("[main] Client %s: Applying streamer params: quality=%d%%; desired_fps=%d ...",
self._remote, quality, desired_fps)
await self.__kvmd.set_streamer_params(user, passwd, quality=quality, desired_fps=desired_fps)
self._remote, self._encodings.tight_jpeg_quality, self.__desired_fps)
await self.__kvmd.set_streamer_params(user, passwd, self._encodings.tight_jpeg_quality, self.__desired_fps)
async def _on_fb_update_request(self) -> None:
self.__fb_requested = True
@ -264,6 +265,7 @@ class VncServer:
kvmd: KvmdClient,
streamer: StreamerClient,
desired_fps: int,
symmap: Dict[int, str],
) -> None:
@ -271,12 +273,13 @@ class VncServer:
self.__port = port
self.__max_clients = max_clients
self.__kvmd = kvmd
self.__streamer = streamer
self.__symmap = symmap
self.__shared_params = _SharedParams()
self.__client_kwargs = {
"kvmd": kvmd,
"streamer": streamer,
"desired_fps": desired_fps,
"symmap": symmap,
"shared_params": _SharedParams(),
}
def run(self) -> None:
logger = get_logger(0)
@ -309,4 +312,4 @@ class VncServer:
logger.info("Bye-bye")
async def __handle_client(self, reader: asyncio.StreamReader, writer: asyncio.StreamWriter) -> None:
await _Client(reader, writer, self.__kvmd, self.__streamer, self.__symmap, self.__shared_params).run()
await _Client(reader, writer, **self.__client_kwargs).run() # type: ignore