mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 09:10:30 +08:00
fixed h264 accumulating
This commit is contained in:
parent
db4dc5de45
commit
32bd2453eb
@ -242,6 +242,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
|
|||||||
if not self._encodings.has_h264:
|
if not self._encodings.has_h264:
|
||||||
self.__fb_h264_data = b""
|
self.__fb_h264_data = b""
|
||||||
raise StreamerPermError("The client doesn't want to accept H264 anymore")
|
raise StreamerPermError("The client doesn't want to accept H264 anymore")
|
||||||
|
self.__append_h264_data(frame)
|
||||||
await self._send_fb_h264(self.__fb_h264_data)
|
await self._send_fb_h264(self.__fb_h264_data)
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(f"Unknown format: {frame['format']}")
|
raise RuntimeError(f"Unknown format: {frame['format']}")
|
||||||
@ -251,13 +252,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
|
|||||||
self.__fb_h264_data = b""
|
self.__fb_h264_data = b""
|
||||||
|
|
||||||
elif self._encodings.has_h264 and frame["format"] == StreamFormats.H264:
|
elif self._encodings.has_h264 and frame["format"] == StreamFormats.H264:
|
||||||
if frame["key"]:
|
self.__append_h264_data(frame)
|
||||||
self.__fb_h264_data = frame["data"]
|
|
||||||
elif len(self.__fb_h264_data) + len(frame["data"]) > 4194304: # 4Mb
|
|
||||||
get_logger(0).info("Accumulated H264 buffer is too big; resetting ...")
|
|
||||||
self.__fb_h264_data = frame["data"]
|
|
||||||
else:
|
|
||||||
self.__fb_h264_data += frame["data"]
|
|
||||||
|
|
||||||
async def __resize_fb_unsafe(self, frame: Dict) -> bool:
|
async def __resize_fb_unsafe(self, frame: Dict) -> bool:
|
||||||
width = frame["width"]
|
width = frame["width"]
|
||||||
@ -272,6 +267,15 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
|
|||||||
await self._send_resize(width, height)
|
await self._send_resize(width, height)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def __append_h264_data(self, frame: Dict) -> None:
|
||||||
|
if frame["key"]:
|
||||||
|
self.__fb_h264_data = frame["data"]
|
||||||
|
elif len(self.__fb_h264_data) + len(frame["data"]) > 4194304: # 4Mb
|
||||||
|
get_logger(0).info("Accumulated H264 buffer is too big; resetting ...")
|
||||||
|
self.__fb_h264_data = frame["data"]
|
||||||
|
else:
|
||||||
|
self.__fb_h264_data += frame["data"]
|
||||||
|
|
||||||
async def __send_fb_stub(self, text: str, no_lock: bool=False) -> None:
|
async def __send_fb_stub(self, text: str, no_lock: bool=False) -> None:
|
||||||
if not no_lock:
|
if not no_lock:
|
||||||
await self.__lock.acquire()
|
await self.__lock.acquire()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user