@@ -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