@@ -83,7 +83,16 @@ async def get(
8383 _LOGGER .warning ("Reolink playback proxy error: %s" , str (err ))
8484 return web .Response (body = str (err ), status = HTTPStatus .BAD_REQUEST )
8585
86+ headers = dict (request .headers )
87+ headers .pop ("Host" , None )
88+ headers .pop ("Referer" , None )
89+
8690 if _LOGGER .isEnabledFor (logging .DEBUG ):
91+ _LOGGER .debug (
92+ "Requested Playback Proxy Method %s, Headers: %s" ,
93+ request .method ,
94+ headers ,
95+ )
8796 _LOGGER .debug (
8897 "Opening VOD stream from %s: %s" ,
8998 host .api .camera_name (ch ),
@@ -93,6 +102,7 @@ async def get(
93102 try :
94103 reolink_response = await self .session .get (
95104 reolink_url ,
105+ headers = headers ,
96106 timeout = ClientTimeout (
97107 connect = 15 , sock_connect = 15 , sock_read = 5 , total = None
98108 ),
@@ -118,18 +128,25 @@ async def get(
118128 ]:
119129 err_str = f"Reolink playback expected video/mp4 but got { reolink_response .content_type } "
120130 _LOGGER .error (err_str )
131+ if reolink_response .content_type == "text/html" :
132+ text = await reolink_response .text ()
133+ _LOGGER .debug (text )
121134 return web .Response (body = err_str , status = HTTPStatus .BAD_REQUEST )
122135
123- response = web . StreamResponse (
124- status = 200 ,
125- reason = "OK " ,
126- headers = {
127- "Content-Type" : "video/mp4" ,
128- } ,
136+ response_headers = dict ( reolink_response . headers )
137+ _LOGGER . debug (
138+ "Response Playback Proxy Status %s:%s, Headers: %s " ,
139+ reolink_response . status ,
140+ reolink_response . reason ,
141+ response_headers ,
129142 )
143+ response_headers ["Content-Type" ] = "video/mp4"
130144
131- if reolink_response .content_length is not None :
132- response .content_length = reolink_response .content_length
145+ response = web .StreamResponse (
146+ status = reolink_response .status ,
147+ reason = reolink_response .reason ,
148+ headers = response_headers ,
149+ )
133150
134151 await response .prepare (request )
135152
@@ -141,7 +158,8 @@ async def get(
141158 "Timeout while reading Reolink playback from %s, writing EOF" ,
142159 host .api .nvr_name ,
143160 )
161+ finally :
162+ reolink_response .release ()
144163
145- reolink_response .release ()
146164 await response .write_eof ()
147165 return response
0 commit comments