From be52ee18c50eab4fd097d80fbd7b521c0d657212 Mon Sep 17 00:00:00 2001 From: Sergey Stepanov Date: Tue, 28 Sep 2021 13:28:44 +0300 Subject: [PATCH] Use default WebRTC codecs --- pkg/webrtc/connection.go | 65 ++-------------------------------------- pkg/webrtc/webrtc.go | 35 +++++----------------- pkg/worker/room/room.go | 4 +-- 3 files changed, 11 insertions(+), 93 deletions(-) diff --git a/pkg/webrtc/connection.go b/pkg/webrtc/connection.go index f7577d37..38afe58a 100644 --- a/pkg/webrtc/connection.go +++ b/pkg/webrtc/connection.go @@ -6,13 +6,9 @@ import ( pion "github.com/pion/webrtc/v3" ) -func NewInterceptedPeerConnection(conf conf.Webrtc, ics []interceptor.Interceptor, vCodec string) (*pion.PeerConnection, error) { +func NewInterceptedPeerConnection(conf conf.Webrtc, ics []interceptor.Interceptor) (*pion.PeerConnection, error) { m := &pion.MediaEngine{} - //if err := m.RegisterDefaultCodecs(); err != nil { - // return nil, err - //} - - if err := RegisterCodecs(m, vCodec); err != nil { + if err := m.RegisterDefaultCodecs(); err != nil { return nil, err } @@ -52,60 +48,3 @@ func NewInterceptedPeerConnection(conf conf.Webrtc, ics []interceptor.Intercepto ) return api.NewPeerConnection(peerConf) } - -// RegisterCodecs registers the default codecs supported by WebRTC. -func RegisterCodecs(m *pion.MediaEngine, vCodec string) error { - audioRTPCodecParameters := []pion.RTPCodecParameters{ - { - RTPCodecCapability: pion.RTPCodecCapability{MimeType: pion.MimeTypeOpus, ClockRate: 48000, Channels: 2}, - PayloadType: 111, - }, - } - for _, codec := range audioRTPCodecParameters { - if err := m.RegisterCodec(codec, pion.RTPCodecTypeAudio); err != nil { - return err - } - } - - videoRTCPFeedback := []pion.RTCPFeedback{ - {"goog-remb", ""}, - {"ccm", "fir"}, - {"nack", ""}, - {"nack", "pli"}, - } - video := pion.RTPCodecCapability{MimeType: vCodec, ClockRate: 90000, RTCPFeedback: videoRTCPFeedback} - var videoRTPCodecParameters []pion.RTPCodecParameters - if vCodec == pion.MimeTypeH264 { - videoRTPCodecParameters = []pion.RTPCodecParameters{ - {RTPCodecCapability: pion.RTPCodecCapability{ - MimeType: video.MimeType, ClockRate: video.ClockRate, RTCPFeedback: video.RTCPFeedback, - //SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f", - }, PayloadType: 102}, - {RTPCodecCapability: pion.RTPCodecCapability{ - MimeType: video.MimeType, ClockRate: video.ClockRate, RTCPFeedback: video.RTCPFeedback, - SDPFmtpLine: "level-asymmetry-allowed=1;profile-level-id=42e01f", - }, PayloadType: 108}, - {RTPCodecCapability: video, PayloadType: 123}, - {RTPCodecCapability: pion.RTPCodecCapability{ - MimeType: video.MimeType, ClockRate: video.ClockRate, RTCPFeedback: video.RTCPFeedback, - SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f", - }, PayloadType: 125}, - {RTPCodecCapability: pion.RTPCodecCapability{ - MimeType: video.MimeType, ClockRate: video.ClockRate, RTCPFeedback: video.RTCPFeedback, - SDPFmtpLine: "level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f", - }, PayloadType: 127}, - } - } else { - videoRTPCodecParameters = []pion.RTPCodecParameters{ - {RTPCodecCapability: video, PayloadType: 96}, - } - } - - for _, codec := range videoRTPCodecParameters { - if err := m.RegisterCodec(codec, pion.RTPCodecTypeVideo); err != nil { - return err - } - } - - return nil -} diff --git a/pkg/webrtc/webrtc.go b/pkg/webrtc/webrtc.go index 40a59873..e5cfbe77 100644 --- a/pkg/webrtc/webrtc.go +++ b/pkg/webrtc/webrtc.go @@ -1,4 +1,3 @@ -// credit to https://github.com/poi5305/go-yuv2webRTC/blob/master/webrtc/webrtc.go package webrtc import ( @@ -39,17 +38,8 @@ type WebRTC struct { InputChannel chan []byte Done bool - //lastTime time.Time - //curFPS int - RoomID string - - // store thing related to game - GameMeta GameMeta -} - -// Game Meta -type GameMeta struct { + RoomID string PlayerIndex int } @@ -118,15 +108,14 @@ func (w *WebRTC) StartClient(iceCB OnIceCallback) (string, error) { log.Println("=== StartClient ===") - videoCodec := w.getVideoCodec() w.tsInterceptor = itc.ReTime{} - w.connection, err = NewInterceptedPeerConnection(w.cfg.Webrtc, []interceptor.Interceptor{&w.tsInterceptor}, videoCodec) + w.connection, err = NewInterceptedPeerConnection(w.cfg.Webrtc, []interceptor.Interceptor{&w.tsInterceptor}) if err != nil { return "", err } // add video track - rtpCodec := webrtc.RTPCodecCapability{MimeType: videoCodec} + rtpCodec := webrtc.RTPCodecCapability{MimeType: w.getVideoCodec()} if videoTrack, err = webrtc.NewTrackLocalStaticSample(rtpCodec, "video", "game-video"); err != nil { return "", err } @@ -301,10 +290,10 @@ func (w *WebRTC) StopClient() { return } - log.Println("===StopClient===") w.isConnected = false if w.connection != nil { - w.connection.Close() + err := w.connection.Close() + log.Printf("error: couldn't close WebRTC connection, %v", err) } w.connection = nil //close(w.InputChannel) @@ -314,12 +303,10 @@ func (w *WebRTC) StopClient() { close(w.AudioChannel) //close(w.VoiceInChannel) //close(w.VoiceOutChannel) + log.Println("===StopClient===") } -// IsConnected comment -func (w *WebRTC) IsConnected() bool { - return w.isConnected -} +func (w *WebRTC) IsConnected() bool { return w.isConnected } func (w *WebRTC) startStreaming(vp8Track *webrtc.TrackLocalStaticSample, opusTrack *webrtc.TrackLocalStaticSample) { log.Println("Start streaming") @@ -383,11 +370,3 @@ func (w *WebRTC) startStreaming(vp8Track *webrtc.TrackLocalStaticSample, opusTra // } //}() } - -//func (w *WebRTC) calculateFPS() int { -// elapsedTime := time.Now().Sub(w.lastTime) -// w.lastTime = time.Now() -// curFPS := time.Second / elapsedTime -// w.curFPS = int(float32(w.curFPS)*0.9 + float32(curFPS)*0.1) -// return w.curFPS -//} diff --git a/pkg/worker/room/room.go b/pkg/worker/room/room.go index c407d52a..738c038e 100644 --- a/pkg/worker/room/room.go +++ b/pkg/worker/room/room.go @@ -246,7 +246,7 @@ func (r *Room) AddConnectionToRoom(peerconnection *webrtc.WebRTC) { func (r *Room) UpdatePlayerIndex(peerconnection *webrtc.WebRTC, playerIndex int) { log.Println("Updated player Index to: ", playerIndex) - peerconnection.GameMeta.PlayerIndex = playerIndex + peerconnection.PlayerIndex = playerIndex } func (r *Room) startWebRTCSession(peerconnection *webrtc.WebRTC) { @@ -282,7 +282,7 @@ func (r *Room) startWebRTCSession(peerconnection *webrtc.WebRTC) { if peerconnection.IsConnected() { select { - case r.inputChannel <- nanoarch.InputEvent{RawState: input, PlayerIdx: peerconnection.GameMeta.PlayerIndex, ConnID: peerconnection.ID}: + case r.inputChannel <- nanoarch.InputEvent{RawState: input, PlayerIdx: peerconnection.PlayerIndex, ConnID: peerconnection.ID}: default: } }