@@ -40,15 +40,17 @@ func Init() {
4040 AddCandidate (network , candidate )
4141 }
4242
43+ var err error
44+
4345 // create pionAPI with custom codecs list and custom network settings
44- serverAPI , err : = webrtc .NewServerAPI (network , address , & filters )
46+ serverAPI , err = webrtc .NewServerAPI (network , address , & filters )
4547 if err != nil {
4648 log .Error ().Err (err ).Caller ().Send ()
4749 return
4850 }
4951
5052 // use same API for WebRTC server and client if no address
51- clientAPI : = serverAPI
53+ clientAPI = serverAPI
5254
5355 if address != "" {
5456 log .Info ().Str ("addr" , cfg .Mod .Listen ).Msg ("[webrtc] listen" )
@@ -81,11 +83,13 @@ func Init() {
8183 streams .HandleFunc ("webrtc" , streamsHandler )
8284}
8385
86+ var serverAPI , clientAPI * pion.API
87+
8488var log zerolog.Logger
8589
8690var PeerConnection func (active bool ) (* pion.PeerConnection , error )
8791
88- func asyncHandler (tr * ws.Transport , msg * ws.Message ) error {
92+ func asyncHandler (tr * ws.Transport , msg * ws.Message ) ( err error ) {
8993 var stream * streams.Stream
9094 var mode core.Mode
9195
@@ -104,8 +108,30 @@ func asyncHandler(tr *ws.Transport, msg *ws.Message) error {
104108 return errors .New (api .StreamNotFound )
105109 }
106110
111+ var offer struct {
112+ Type string `json:"type"`
113+ SDP string `json:"sdp"`
114+ ICEServers []pion.ICEServer `json:"ice_servers"`
115+ }
116+
117+ // V2 - json/object exchange, V1 - raw SDP exchange
118+ apiV2 := msg .Type == "webrtc"
119+
120+ if apiV2 {
121+ if err = msg .Unmarshal (& offer ); err != nil {
122+ return err
123+ }
124+ } else {
125+ offer .SDP = msg .String ()
126+ }
127+
107128 // create new PeerConnection instance
108- pc , err := PeerConnection (false )
129+ var pc * pion.PeerConnection
130+ if offer .ICEServers == nil {
131+ pc , err = PeerConnection (false )
132+ } else {
133+ pc , err = serverAPI .NewPeerConnection (pion.Configuration {ICEServers : offer .ICEServers })
134+ }
109135 if err != nil {
110136 log .Error ().Err (err ).Caller ().Send ()
111137 return err
@@ -145,20 +171,10 @@ func asyncHandler(tr *ws.Transport, msg *ws.Message) error {
145171 }
146172 })
147173
148- // V2 - json/object exchange, V1 - raw SDP exchange
149- apiV2 := msg .Type == "webrtc"
174+ log .Trace ().Msgf ("[webrtc] offer:\n %s" , offer .SDP )
150175
151176 // 1. SetOffer, so we can get remote client codecs
152- var offer string
153- if apiV2 {
154- offer = msg .GetString ("sdp" )
155- } else {
156- offer = msg .String ()
157- }
158-
159- log .Trace ().Msgf ("[webrtc] offer:\n %s" , offer )
160-
161- if err = conn .SetOffer (offer ); err != nil {
177+ if err = conn .SetOffer (offer .SDP ); err != nil {
162178 log .Warn ().Err (err ).Caller ().Send ()
163179 return err
164180 }
0 commit comments