From ceed146fb82acde6c1ba13a46f70d4e705fa1991 Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Wed, 2 Nov 2022 12:46:39 +0300 Subject: [PATCH] Add webrtc sync API --- cmd/webrtc/webrtc.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/cmd/webrtc/webrtc.go b/cmd/webrtc/webrtc.go index e939a04b..4fcb8ad5 100644 --- a/cmd/webrtc/webrtc.go +++ b/cmd/webrtc/webrtc.go @@ -8,7 +8,9 @@ import ( "github.com/AlexxIT/go2rtc/pkg/webrtc" pion "github.com/pion/webrtc/v3" "github.com/rs/zerolog" + "io/ioutil" "net" + "net/http" ) func Init() { @@ -55,6 +57,8 @@ func Init() { api.HandleWS(webrtc.MsgTypeOffer, offerHandler) api.HandleWS(webrtc.MsgTypeCandidate, candidateHandler) + + api.HandleFunc("api/webrtc", syncHandler) } var Port string @@ -137,6 +141,32 @@ func offerHandler(ctx *api.Context, msg *streamer.Message) { ctx.Consumer = conn } +func syncHandler(w http.ResponseWriter, r *http.Request) { + url := r.URL.Query().Get("src") + stream := streams.Get(url) + if stream == nil { + return + } + + // get offer + offer, err := ioutil.ReadAll(r.Body) + if err != nil { + log.Error().Err(err).Caller().Send() + return + } + + answer, err := ExchangeSDP(stream, string(offer), r.UserAgent()) + if err != nil { + log.Error().Err(err).Caller().Send() + return + } + + // send SDP to client + if _, err = w.Write([]byte(answer)); err != nil { + log.Error().Err(err).Caller().Send() + } +} + func ExchangeSDP( stream *streams.Stream, offer string, userAgent string, ) (answer string, err error) {