MCPcopy Create free account
hub / github.com/deepch/RTSPtoWebRTC / HTTPAPIServerStreamWebRTC

Function HTTPAPIServerStreamWebRTC

http.go:102–155  ·  view source on GitHub ↗

HTTPAPIServerStreamWebRTC stream video over WebRTC

(c *gin.Context)

Source from the content-addressed store, hash-verified

100
101//HTTPAPIServerStreamWebRTC stream video over WebRTC
102func HTTPAPIServerStreamWebRTC(c *gin.Context) {
103 if !Config.ext(c.PostForm("suuid")) {
104 log.Println("Stream Not Found")
105 return
106 }
107 Config.RunIFNotRun(c.PostForm("suuid"))
108 codecs := Config.coGe(c.PostForm("suuid"))
109 if codecs == nil {
110 log.Println("Stream Codec Not Found")
111 return
112 }
113 var AudioOnly bool
114 if len(codecs) == 1 && codecs[0].Type().IsAudio() {
115 AudioOnly = true
116 }
117 muxerWebRTC := webrtc.NewMuxer(webrtc.Options{ICEServers: Config.GetICEServers(), ICEUsername: Config.GetICEUsername(), ICECredential: Config.GetICECredential(), PortMin: Config.GetWebRTCPortMin(), PortMax: Config.GetWebRTCPortMax()})
118 answer, err := muxerWebRTC.WriteHeader(codecs, c.PostForm("data"))
119 if err != nil {
120 log.Println("WriteHeader", err)
121 return
122 }
123 _, err = c.Writer.Write([]byte(answer))
124 if err != nil {
125 log.Println("Write", err)
126 return
127 }
128 go func() {
129 cid, ch := Config.clAd(c.PostForm("suuid"))
130 defer Config.clDe(c.PostForm("suuid"), cid)
131 defer muxerWebRTC.Close()
132 var videoStart bool
133 noVideo := time.NewTimer(10 * time.Second)
134 for {
135 select {
136 case <-noVideo.C:
137 log.Println("noVideo")
138 return
139 case pck := <-ch:
140 if pck.IsKeyFrame || AudioOnly {
141 noVideo.Reset(10 * time.Second)
142 videoStart = true
143 }
144 if !videoStart && !AudioOnly {
145 continue
146 }
147 err = muxerWebRTC.WritePacket(pck)
148 if err != nil {
149 log.Println("WritePacket", err)
150 return
151 }
152 }
153 }
154 }()
155}
156
157func CORSMiddleware() gin.HandlerFunc {
158 return func(c *gin.Context) {

Callers

nothing calls this directly

Calls 10

extMethod · 0.80
RunIFNotRunMethod · 0.80
coGeMethod · 0.80
GetICEServersMethod · 0.80
GetICEUsernameMethod · 0.80
GetICECredentialMethod · 0.80
GetWebRTCPortMinMethod · 0.80
GetWebRTCPortMaxMethod · 0.80
clAdMethod · 0.80
clDeMethod · 0.80

Tested by

no test coverage detected