Modified func Close in pkg/isapi/client.go to call '/ISAPI/System/TwoWayAudio/channels/<channel id>/close' instead of '/ISAPI/System/TwoWayAudio/channels/<channel id/close/open'
Modified pkg/isapi/client.go to call 'close' before 'open' to prevent channel left open from prior connection blocking with 401 or 403 errors.
This commit is contained in:
+8
-15
@@ -84,30 +84,23 @@ func (c *Client) Dial() (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) Open() (err error) {
|
func (c *Client) Open() (err error) {
|
||||||
link := c.url + "/ISAPI/System/TwoWayAudio/channels/" + c.channel
|
|
||||||
|
|
||||||
// Hikvision ISAPI may not accept a new open request if the previous one was not closed (e.g.
|
// Hikvision ISAPI may not accept a new open request if the previous one was not closed (e.g.
|
||||||
// using the test button on-camera or via curl command) but a close request can be sent even if
|
// using the test button on-camera or via curl command) but a close request can be sent even if
|
||||||
// the audio is already closed. So, we send a close request first and then open it again. Seems
|
// the audio is already closed. So, we send a close request first and then open it again. Seems
|
||||||
// janky but it works.
|
// janky but it works.
|
||||||
req, err := http.NewRequest("PUT", link+"/close", nil)
|
|
||||||
|
err = c.Close()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
link := c.url + "/ISAPI/System/TwoWayAudio/channels/" + c.channel
|
||||||
|
req, err := http.NewRequest("PUT", link+"/open", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err := tcp.Do(req)
|
res, err := tcp.Do(req)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
tcp.Close(res)
|
|
||||||
|
|
||||||
req, err = http.NewRequest("PUT", link+"/open", nil)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
res, err = tcp.Do(req)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user