aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go63
1 files changed, 37 insertions, 26 deletions
diff --git a/main.go b/main.go
index 42c8fbf..1b862b6 100644
--- a/main.go
+++ b/main.go
@@ -45,6 +45,7 @@ func main() {
panic("-container-path must be specified")
}
+ log.Println("Initializing WebRTC PeerConnection")
pc, err := webrtc.NewPeerConnection(webrtc.Configuration{
ICEServers: []webrtc.ICEServer{
{
@@ -56,16 +57,18 @@ func main() {
log.Fatal(err)
}
- videoTrack, err = pc.NewTrack(webrtc.DefaultPayloadTypeH264, 5000, "synced-video", "synced-video")
+ log.Println("Initializing WebRTC tracks")
+ videoTrack, err = pc.NewTrack(webrtc.DefaultPayloadTypeH264, 5000, "sync", "sync")
if err != nil {
log.Fatal(err)
}
- audioTrack, err = pc.NewTrack(webrtc.DefaultPayloadTypeOpus, 5001, "synced-video", "synced-video")
+ audioTrack, err = pc.NewTrack(webrtc.DefaultPayloadTypeOpus, 5001, "sync", "sync")
if err != nil {
log.Fatal(err)
}
+ log.Println("Creating and starting pipeline")
pipeline = gst.CreatePipeline(containerPath, audioTrack, videoTrack)
pipeline.Start()
@@ -87,33 +90,13 @@ func handleWebsocketMessage(pc *webrtc.PeerConnection, ws *websocket.Conn, messa
log.Print(err)
}
pipeline.SeekToTime(i)
- case "offer":
- offer := webrtc.SessionDescription{}
- if err := json.Unmarshal([]byte(message.Data), &offer); err != nil {
+ case "answer":
+ answer := webrtc.SessionDescription{}
+ if err := json.Unmarshal([]byte(message.Data), &answer); err != nil {
return err
}
- if err := pc.SetRemoteDescription(offer); err != nil {
- return err
- }
-
- answer, err := pc.CreateAnswer(nil)
- if err != nil {
- return err
- }
- if err := pc.SetLocalDescription(answer); err != nil {
- return err
- }
-
- answerString, err := json.Marshal(answer)
- if err != nil {
- return err
- }
-
- if err = ws.WriteJSON(&websocketMessage{
- Event: "answer",
- Data: string(answerString),
- }); err != nil {
+ if err := pc.SetRemoteDescription(answer); err != nil {
return err
}
}
@@ -133,6 +116,8 @@ func serveWs(w http.ResponseWriter, r *http.Request) {
return
}
+ defer ws.Close()
+
peerConnection, err := webrtc.NewPeerConnection(peerConnectionConfig)
if err != nil {
log.Print(err)
@@ -151,6 +136,32 @@ func serveWs(w http.ResponseWriter, r *http.Request) {
}
}()
+ sdp, err := peerConnection.CreateOffer(nil)
+ if err != nil {
+ log.Println(err)
+ return
+ }
+
+ if err := peerConnection.SetLocalDescription(sdp); err != nil {
+ log.Println(err)
+ return
+ }
+
+ sdpData, err := json.Marshal(sdp)
+ if err != nil {
+ log.Print(err)
+ return
+ }
+
+ offerMsg := &websocketMessage{
+ Event: "offer",
+ Data: string(sdpData),
+ }
+ if err := ws.WriteJSON(offerMsg); err != nil {
+ log.Print(err)
+ return
+ }
+
message := &websocketMessage{}
for {
_, msg, err := ws.ReadMessage()