Skip to content

Commit

Permalink
webrtc: allow configuring timeouts (bluenviron#3404)
Browse files Browse the repository at this point in the history
  • Loading branch information
jwalton committed May 28, 2024
1 parent 51387e8 commit 4eff63b
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 5 deletions.
4 changes: 4 additions & 0 deletions apidocs/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,10 @@ components:
type: string
clientOnly:
type: boolean
webrtcHandshakeTimeout:
type: string
webrtcTrackGatherTimeout:
type: string

# SRT server
srt:
Expand Down
4 changes: 4 additions & 0 deletions internal/conf/conf.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,8 @@ type Conf struct {
WebRTCIPsFromInterfacesList []string `json:"webrtcIPsFromInterfacesList"`
WebRTCAdditionalHosts []string `json:"webrtcAdditionalHosts"`
WebRTCICEServers2 WebRTCICEServers `json:"webrtcICEServers2"`
WebRTCHandshakeTimeout StringDuration `json:"webrtcHandshakeTimeout"`
WebRTCTrackGatherTimeout StringDuration `json:"webrtcTrackGatherTimeout"`
WebRTCICEUDPMuxAddress *string `json:"webrtcICEUDPMuxAddress,omitempty"` // deprecated
WebRTCICETCPMuxAddress *string `json:"webrtcICETCPMuxAddress,omitempty"` // deprecated
WebRTCICEHostNAT1To1IPs *[]string `json:"webrtcICEHostNAT1To1IPs,omitempty"` // deprecated
Expand Down Expand Up @@ -392,6 +394,8 @@ func (conf *Conf) setDefaults() {
conf.WebRTCIPsFromInterfacesList = []string{}
conf.WebRTCAdditionalHosts = []string{}
conf.WebRTCICEServers2 = []WebRTCICEServer{}
conf.WebRTCHandshakeTimeout = 10 * StringDuration(time.Second)
conf.WebRTCTrackGatherTimeout = 2 * StringDuration(time.Second)

// SRT server
conf.SRT = true
Expand Down
2 changes: 2 additions & 0 deletions internal/core/core.go
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,8 @@ func (p *Core) createResources(initial bool) error {
IPsFromInterfacesList: p.conf.WebRTCIPsFromInterfacesList,
AdditionalHosts: p.conf.WebRTCAdditionalHosts,
ICEServers: p.conf.WebRTCICEServers2,
HandshakeTimeout: p.conf.WebRTCHandshakeTimeout,
TrackGatherTimeout: p.conf.WebRTCTrackGatherTimeout,
ExternalCmdPool: p.externalCmdPool,
PathManager: p.pathManager,
Parent: p,
Expand Down
11 changes: 6 additions & 5 deletions internal/protocols/webrtc/peer_connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@ import (
"github.com/pion/interceptor"
"github.com/pion/webrtc/v3"

"github.com/bluenviron/mediamtx/internal/conf"
"github.com/bluenviron/mediamtx/internal/logger"
)

const (
webrtcHandshakeTimeout = 10 * time.Second
webrtcTrackGatherTimeout = 2 * time.Second
webrtcStreamID = "mediamtx"
webrtcStreamID = "mediamtx"
)

func stringInSlice(a string, list []string) bool {
Expand All @@ -39,6 +38,8 @@ type PeerConnection struct {
ICEServers []webrtc.ICEServer
ICEUDPMux ice.UDPMux
ICETCPMux ice.TCPMux
HandshakeTimeout conf.StringDuration
TrackGatherTimeout conf.StringDuration
LocalRandomUDP bool
IPsFromInterfaces bool
IPsFromInterfacesList []string
Expand Down Expand Up @@ -312,7 +313,7 @@ func (co *PeerConnection) WaitGatheringDone(ctx context.Context) error {
func (co *PeerConnection) WaitUntilConnected(
ctx context.Context,
) error {
t := time.NewTimer(webrtcHandshakeTimeout)
t := time.NewTimer(time.Duration(co.HandshakeTimeout))
defer t.Stop()

outer:
Expand All @@ -339,7 +340,7 @@ func (co *PeerConnection) GatherIncomingTracks(
) ([]*IncomingTrack, error) {
var tracks []*IncomingTrack

t := time.NewTimer(webrtcTrackGatherTimeout)
t := time.NewTimer(time.Duration(co.TrackGatherTimeout))
defer t.Stop()

for {
Expand Down
5 changes: 5 additions & 0 deletions internal/protocols/webrtc/whip_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ import (
"github.com/bluenviron/mediamtx/internal/protocols/httpp"
)

const (
webrtcHandshakeTimeout = 10 * time.Second
webrtcTrackGatherTimeout = 2 * time.Second
)

// WHIPClient is a WHIP client.
type WHIPClient struct {
HTTPClient *http.Client
Expand Down
2 changes: 2 additions & 0 deletions internal/servers/webrtc/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,8 @@ type Server struct {
IPsFromInterfacesList []string
AdditionalHosts []string
ICEServers []conf.WebRTCICEServer
HandshakeTimeout conf.StringDuration
TrackGatherTimeout conf.StringDuration
ExternalCmdPool *externalcmd.Pool
PathManager serverPathManager
Parent serverParent
Expand Down
4 changes: 4 additions & 0 deletions internal/servers/webrtc/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,8 @@ func (s *session) runPublish() (int, error) {
AdditionalHosts: s.additionalHosts,
ICEUDPMux: s.iceUDPMux,
ICETCPMux: s.iceTCPMux,
HandshakeTimeout: s.parent.HandshakeTimeout,
TrackGatherTimeout: s.parent.TrackGatherTimeout,
Publish: false,
Log: s,
}
Expand Down Expand Up @@ -571,6 +573,8 @@ func (s *session) runRead() (int, error) {
AdditionalHosts: s.additionalHosts,
ICEUDPMux: s.iceUDPMux,
ICETCPMux: s.iceTCPMux,
HandshakeTimeout: s.parent.HandshakeTimeout,
TrackGatherTimeout: s.parent.TrackGatherTimeout,
Publish: true,
OutgoingTracks: outgoingTracks,
Log: s,
Expand Down

0 comments on commit 4eff63b

Please sign in to comment.