From cfafbd73d3a571f9f178b30eb971789dd3c71f4d Mon Sep 17 00:00:00 2001 From: dexter <178529795@qq.com> Date: Fri, 28 Oct 2022 15:46:58 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=A6=20NEW:=20=E6=9A=B4=E9=9C=B2?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=AF=B9=E8=B1=A1WebRTCPlugin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 42 ++++++++++++++++++++++++++++++++++++------ subscriber.go | 7 +++++++ 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/main.go b/main.go index 7697eae..a8adacb 100644 --- a/main.go +++ b/main.go @@ -84,9 +84,9 @@ func (conf *WebRTCConfig) OnEvent(event any) { Port: conf.IceUdpMux, }) if err != nil { - plugin.Fatal("webrtc listener udp", zap.Error(err)) + WebRTCPlugin.Fatal("webrtc listener udp", zap.Error(err)) } - plugin.Info("webrtc start listen", zap.Int("port", conf.IceUdpMux)) + WebRTCPlugin.Info("webrtc start listen", zap.Int("port", conf.IceUdpMux)) conf.s.SetICEUDPMux(NewICEUDPMux(nil, udpListener)) } @@ -118,10 +118,10 @@ func (conf *WebRTCConfig) Play_(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusInternalServerError) return } - if err = plugin.Subscribe(streamPath, &suber); err != nil { + if err = WebRTCPlugin.Subscribe(streamPath, &suber); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return - } + } if sdp, err := suber.GetAnswer(); err == nil { w.Write([]byte(sdp)) } else { @@ -152,7 +152,7 @@ func (conf *WebRTCConfig) Push_(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusInternalServerError) return } - if err = plugin.Publish(streamPath, &puber); err != nil { + if err = WebRTCPlugin.Publish(streamPath, &puber); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } @@ -174,4 +174,34 @@ var webrtcConfig = &WebRTCConfig{ PLI: time.Second * 2, } -var plugin = engine.InstallPlugin(webrtcConfig) +var WebRTCPlugin = engine.InstallPlugin(webrtcConfig) + + +func (conf *WebRTCConfig) Batch(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/sdp") + bytes, err := ioutil.ReadAll(r.Body) + var suber WebRTCSubscriber + suber.SDP = string(bytes) + if suber.PeerConnection, err = conf.api.NewPeerConnection(Configuration{}); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + suber.OnICECandidate(func(ice *ICECandidate) { + if ice != nil { + suber.Info(ice.ToJSON().Candidate) + } + }) + if err = suber.SetRemoteDescription(SessionDescription{Type: SDPTypeOffer, SDP: suber.SDP}); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + // if err = WebRTCPlugin.Subscribe(streamPath, &suber); err != nil { + // http.Error(w, err.Error(), http.StatusBadRequest) + // return + // } + if sdp, err := suber.GetAnswer(); err == nil { + w.Write([]byte(sdp)) + } else { + http.Error(w, err.Error(), http.StatusBadRequest) + } +} \ No newline at end of file diff --git a/subscriber.go b/subscriber.go index 48033c6..c8687af 100644 --- a/subscriber.go +++ b/subscriber.go @@ -78,3 +78,10 @@ func (suber *WebRTCSubscriber) OnEvent(event any) { suber.Subscriber.OnEvent(event) } } + +// WebRTCBatcher 批量订阅者 +type WebRTCBatcher struct { + WebRTCIO + PageSize int + PageNum int +}