From c88d49deab5bfcc96ae964669be5b68e11d0172d Mon Sep 17 00:00:00 2001 From: Flavio Ribeiro Date: Thu, 1 Dec 2022 11:23:18 -0500 Subject: [PATCH] main: add datachannel for metadata transmission --- main.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index a8c3fac..6641a7c 100644 --- a/main.go +++ b/main.go @@ -8,7 +8,6 @@ import ( _ "embed" "encoding/json" "flag" - "fmt" "io" "log" "net" @@ -32,7 +31,7 @@ var ( enableICEMux = false ) -func srtToWebRTC(srtConnection *astisrt.Connection, videoTrack *webrtc.TrackLocalStaticSample) { +func srtToWebRTC(srtConnection *astisrt.Connection, videoTrack *webrtc.TrackLocalStaticSample, metadataTrack *webrtc.DataChannel) { r, w := io.Pipe() defer r.Close() defer w.Close() @@ -80,7 +79,7 @@ func srtToWebRTC(srtConnection *astisrt.Connection, videoTrack *webrtc.TrackLoca break } if captions != "" { - fmt.Println("Captions: ", captions) + metadataTrack.SendText(captions) } } } @@ -133,6 +132,12 @@ func doSignaling(w http.ResponseWriter, r *http.Request) { return } + // Create data channel for metadata transmission + metadataSender, err := peerConnection.CreateDataChannel("metadata", nil) + if err != nil { + errorToHTTP(w, err) + } + // Set the handler for ICE connection state // This will notify you when the peer has connected/disconnected peerConnection.OnICEConnectionStateChange(func(connectionState webrtc.ICEConnectionState) { @@ -187,7 +192,7 @@ func doSignaling(w http.ResponseWriter, r *http.Request) { } log.Println("Connected to SRT") - go srtToWebRTC(srtConnection, videoTrack) + go srtToWebRTC(srtConnection, videoTrack, metadataSender) w.Header().Set("Content-Type", "application/json") if _, err := w.Write(response); err != nil {