From ad26242d4a4ad7aefe3040ef97c6fbf606d7d9b7 Mon Sep 17 00:00:00 2001 From: Alexandre Iooss Date: Tue, 29 Sep 2020 20:58:55 +0200 Subject: [PATCH] Simplify SRT handling --- stream/srt/srt.go | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/stream/srt/srt.go b/stream/srt/srt.go index f920046..ffb98be 100644 --- a/stream/srt/srt.go +++ b/stream/srt/srt.go @@ -36,37 +36,25 @@ func Serve(cfg *Options) { options := make(map[string]string) options["transtype"] = "live" + // Start SRT in listen mode log.Printf("SRT server listening on %s", cfg.ListenAddress) host, port := splitHostPort(cfg.ListenAddress) sck := srtgo.NewSrtSocket(host, uint16(port), options) sck.Listen(cfg.MaxClients) + // FIXME: See srtgo.SocketOptions and value, err := s.GetSockOptString to get parameters + // http://ffmpeg.org/ffmpeg-protocols.html#srt + for { + // Wait for new connection s, err := sck.Accept() if err != nil { log.Println("Error occurred while accepting request:", err) - continue + break // FIXME: should not break here } + // Create a new buffer buff := make([]byte, 2048) - n, err := s.Read(buff, 10000) - if err != nil { - log.Println("Error occurred while reading SRT socket:", err) - break - } - if n == 0 { - // End of stream - break - } - - // Unmarshal the incoming packet - packet := &rtp.Packet{} - if err = packet.Unmarshal(buff[:n]); err != nil { - log.Println("Error occured while unmarshaling SRT:", err) - break - } - - // videoTrack, err := peerConnection.NewTrack(payloadType, packet.SSRC, "video", "pion") // Read RTP packets forever and send them to the WebRTC Client for { @@ -76,15 +64,24 @@ func Serve(cfg *Options) { break } + if n == 0 { + // End of stream + log.Printf("Received no bytes, stopping stream.") + break + } + log.Printf("Received %d bytes", n) + // Unmarshal incoming packet packet := &rtp.Packet{} if err := packet.Unmarshal(buff[:n]); err != nil { - panic(err) + log.Println("Error occured while unmarshaling SRT:", err) + break } - payloadType := uint8(22) // FIXME put vp8 payload - packet.Header.PayloadType = payloadType + // TODO: Send to WebRTC + //payloadType := uint8(22) // FIXME put vp8 payload + //packet.Header.PayloadType = payloadType //err := videoTrack.WriteRTP(packet) } }