Skip to content

Commit 3022b13

Browse files
committed
Add Encoding pushes
1 parent ee377d4 commit 3022b13

1 file changed

Lines changed: 42 additions & 37 deletions

File tree

reolink_aio/baichuan/baichuan.py

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,45 @@ def _parse_xml(self, cmd_id: int, xml: str, payload: bytes = b"", mess_id: int |
768768
self._log_once.add(f"TCP_event_tag_{event.tag}")
769769
_LOGGER.warning("Reolink %s TCP event cmd_id %s, channel %s, received unknown event tag %s", self.http_api.nvr_name, cmd_id, channel, event.tag)
770770

771+
elif cmd_id == 56: # Enc
772+
channel = self._get_channel_from_xml_element(root)
773+
if channel is None:
774+
return
775+
channels.add(channel)
776+
audio = 1
777+
if (main := root.find(".//mainStream")) is not None:
778+
data = get_keys_from_xml(
779+
main,
780+
{
781+
"audio": ("audio", int),
782+
"width": ("width", int),
783+
"height": ("height", int),
784+
"videoEncType": ("vType_int", int),
785+
"frame": ("frameRate", int),
786+
"bitRate": ("bitRate", int),
787+
},
788+
)
789+
data["vType"] = list(EncodingEnum)[data.get("vType_int", 0)].value
790+
self.http_api._enc_settings.setdefault(channel, {}).setdefault("mainStream", {}).update(data)
791+
audio = audio and data.get("audio", 0)
792+
if (sub := root.find(".//subStream")) is not None:
793+
data = get_keys_from_xml(
794+
sub,
795+
{
796+
"audio": ("audio", int),
797+
"width": ("width", int),
798+
"height": ("height", int),
799+
"videoEncType": ("vType_int", int),
800+
"frame": ("frameRate", int),
801+
"bitRate": ("bitRate", int),
802+
},
803+
)
804+
data["vType"] = list(EncodingEnum)[data.get("vType_int", 0)].value
805+
self.http_api._enc_settings.setdefault(channel, {}).setdefault("subStream", {}).update(data)
806+
audio = audio and data.get("audio", 0)
807+
self.http_api._enc_settings.setdefault(channel, {})["audio"] = audio
808+
self.http_api._enc_settings[channel]["channel"] = channel
809+
771810
elif cmd_id in {109, 298}: # 109=Snapshot, 298=CoverPreview
772811
if mess_id is None:
773812
_LOGGER.warning("Reolink %s baichaun push cmd_id %s received with payload without mess_id", self.http_api.nvr_name, cmd_id)
@@ -885,7 +924,7 @@ def _parse_xml(self, cmd_id: int, xml: str, payload: bytes = b"", mess_id: int |
885924
if (threshold := data.get("dayNightThreshold")) is not None:
886925
self.http_api._isp_settings.setdefault(channel, {})["dayNightThreshold"] = threshold
887926

888-
elif cmd_id == 342:
927+
elif cmd_id == 342: # AiAlarm
889928
channel = self._get_channel_from_xml_element(root, "chn")
890929
if channel is None:
891930
return
@@ -947,7 +986,7 @@ def _parse_xml(self, cmd_id: int, xml: str, payload: bytes = b"", mess_id: int |
947986
if cmd_id_modified == 342:
948987
self._loop.create_task(self.GetAllAiAlarm(channel))
949988
return
950-
if cmd_id_modified not in {26, 527, 529, 531, 549, 551}:
989+
if cmd_id_modified not in {26, 56, 527, 529, 531, 549, 551}:
951990
return
952991
self._loop.create_task(self._send_and_parse(cmd_id_modified, channel))
953992
return
@@ -2118,41 +2157,7 @@ async def GetHddInfo(self) -> None:
21182157
@http_cmd("GetEnc")
21192158
async def GetEnc(self, channel: int) -> None:
21202159
"""Get the encoding info of a channel"""
2121-
mess = await self.send(cmd_id=56, channel=channel)
2122-
root = XML.fromstring(mess)
2123-
audio = 1
2124-
if (main := root.find(".//mainStream")) is not None:
2125-
data = get_keys_from_xml(
2126-
main,
2127-
{
2128-
"audio": ("audio", int),
2129-
"width": ("width", int),
2130-
"height": ("height", int),
2131-
"videoEncType": ("vType_int", int),
2132-
"frame": ("frameRate", int),
2133-
"bitRate": ("bitRate", int),
2134-
},
2135-
)
2136-
data["vType"] = list(EncodingEnum)[data.get("vType_int", 0)].value
2137-
self.http_api._enc_settings.setdefault(channel, {}).setdefault("mainStream", {}).update(data)
2138-
audio = audio and data.get("audio", 0)
2139-
if (sub := root.find(".//subStream")) is not None:
2140-
data = get_keys_from_xml(
2141-
sub,
2142-
{
2143-
"audio": ("audio", int),
2144-
"width": ("width", int),
2145-
"height": ("height", int),
2146-
"videoEncType": ("vType_int", int),
2147-
"frame": ("frameRate", int),
2148-
"bitRate": ("bitRate", int),
2149-
},
2150-
)
2151-
data["vType"] = list(EncodingEnum)[data.get("vType_int", 0)].value
2152-
self.http_api._enc_settings.setdefault(channel, {}).setdefault("subStream", {}).update(data)
2153-
audio = audio and data.get("audio", 0)
2154-
self.http_api._enc_settings.setdefault(channel, {})["audio"] = audio
2155-
self.http_api._enc_settings[channel]["channel"] = channel
2160+
await self._send_and_parse(56, channel)
21562161

21572162
@http_cmd("SetEnc")
21582163
async def SetEnc(self, channel: int | None = None, stream: str | None = None, encoding: str | None = None, **kwargs) -> None:

0 commit comments

Comments
 (0)