From 42c38ad815a35e147d103cd77127b86a42c254a3 Mon Sep 17 00:00:00 2001 From: ydajiang Date: Fri, 8 Aug 2025 19:45:36 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20rtc=E6=8B=89=E6=B5=81=E7=AD=89=E5=BE=85?= =?UTF-8?q?=E6=97=B6,=20=E5=8F=96=E6=B6=88http=E8=AF=B7=E6=B1=82=E6=9C=AA?= =?UTF-8?q?=E5=85=B3=E9=97=ADsink=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/api.go b/api.go index edb9126..0d8bdc1 100644 --- a/api.go +++ b/api.go @@ -18,7 +18,6 @@ import ( "runtime" "strconv" "strings" - "sync" "time" ) @@ -320,8 +319,7 @@ func (api *ApiServer) onRtc(sourceId string, w http.ResponseWriter, r *http.Requ return } - group := sync.WaitGroup{} - group.Add(1) + done := make(chan struct{}) sink := rtc.NewSink(api.generateSinkID(r.RemoteAddr), sourceId, v.SDP, func(sdp string) { response := struct { Type string `json:"type"` @@ -338,8 +336,7 @@ func (api *ApiServer) onRtc(sourceId string, w http.ResponseWriter, r *http.Requ w.Header().Set("Content-Type", "application/json") w.Write(marshal) - - group.Done() + close(done) }) log.Sugar.Infof("rtc拉流请求 source: %s sink: %s sdp:%v", sourceId, sink.String(), v.SDP) @@ -348,10 +345,17 @@ func (api *ApiServer) onRtc(sourceId string, w http.ResponseWriter, r *http.Requ if utils.HookStateOK != ok { log.Sugar.Warnf("rtc拉流失败 source: %s sink: %s", sourceId, sink.String()) w.WriteHeader(http.StatusForbidden) - group.Done() + return } - group.Wait() + select { + case <-r.Context().Done(): + log.Sugar.Infof("rtc拉流请求取消 source: %s sink: %s", sourceId, stream.SinkID2String(sink.GetID())) + sink.Close() + break + case <-done: + break + } } func (api *ApiServer) OnSourceList(w http.ResponseWriter, r *http.Request) {