Commit 23cceba7 authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Restart downstream connections on ICE failure.

parent dbd87895
...@@ -335,6 +335,12 @@ func addDownConn(c *webClient, id string, remote upConnection) (*rtpDownConnecti ...@@ -335,6 +335,12 @@ func addDownConn(c *webClient, id string, remote upConnection) (*rtpDownConnecti
sendICE(c, id, candidate) sendICE(c, id, candidate)
}) })
conn.pc.OnICEConnectionStateChange(func(state webrtc.ICEConnectionState) {
if state == webrtc.ICEConnectionStateFailed {
c.action(connectionFailedAction{id: id})
}
})
err = remote.addLocal(conn) err = remote.addLocal(conn)
if err != nil { if err != nil {
conn.pc.Close() conn.pc.Close()
...@@ -779,17 +785,20 @@ func clientLoop(c *webClient, conn *websocket.Conn) error { ...@@ -779,17 +785,20 @@ func clientLoop(c *webClient, conn *websocket.Conn) error {
go a.c.pushConn(u.id, u, ts, u.label) go a.c.pushConn(u.id, u, ts, u.label)
} }
case connectionFailedAction: case connectionFailedAction:
found := delUpConn(c, a.id) down := getDownConn(c, a.id);
if found { if down == nil {
err := failConnection(c, a.id, log.Printf("Failed indication for " +
"connection failed") "unknown connection")
if err != nil {
return err
}
continue continue
} }
// What should we do if a downstream tracks := make([]upTrack, len(down.tracks))
// connection fails? Renegotiate? for i, t := range down.tracks {
tracks[i] = t.remote
}
go c.pushConn(
down.remote.Id(), down.remote,
tracks, down.remote.Label(),
)
case permissionsChangedAction: case permissionsChangedAction:
c.write(clientMessage{ c.write(clientMessage{
Type: "permissions", Type: "permissions",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment