From 53b52a67cad04a84b6a822d37da801d9c2617d6d Mon Sep 17 00:00:00 2001 From: David Zhao Date: Tue, 13 Jul 2021 22:28:34 -0700 Subject: [PATCH] use protobuf for clients with protocol > 1 (#52) --- pkg/rtc/types/protocol_version.go | 4 ++++ pkg/service/rtcservice.go | 4 ++++ pkg/service/wsprotocol.go | 10 ++++++---- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pkg/rtc/types/protocol_version.go b/pkg/rtc/types/protocol_version.go index 6611a4c55..9113ddb69 100644 --- a/pkg/rtc/types/protocol_version.go +++ b/pkg/rtc/types/protocol_version.go @@ -8,6 +8,10 @@ func (v ProtocolVersion) SupportsPackedStreamId() bool { return v > 0 } +func (v ProtocolVersion) SupportsProtobuf() bool { + return v > 0 +} + func (v ProtocolVersion) HandlesDataPackets() bool { return v > 1 } diff --git a/pkg/service/rtcservice.go b/pkg/service/rtcservice.go index 2063dc440..5f5fc217f 100644 --- a/pkg/service/rtcservice.go +++ b/pkg/service/rtcservice.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/gorilla/websocket" + "github.com/livekit/livekit-server/pkg/rtc/types" "github.com/livekit/livekit-server/pkg/config" "github.com/livekit/livekit-server/pkg/logger" @@ -126,6 +127,9 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } sigConn := NewWSSignalConnection(conn) + if types.ProtocolVersion(pi.ProtocolVersion).SupportsProtobuf() { + sigConn.useJSON = false + } logger.Infow("new client WS connected", "connectionId", connId, diff --git a/pkg/service/wsprotocol.go b/pkg/service/wsprotocol.go index 97abc7ab9..8f6ae3af1 100644 --- a/pkg/service/wsprotocol.go +++ b/pkg/service/wsprotocol.go @@ -45,10 +45,12 @@ func (c *WSSignalConnection) ReadRequest() (*livekit.SignalRequest, error) { msg := &livekit.SignalRequest{} switch messageType { case websocket.BinaryMessage: - c.mu.Lock() - // switch to protobuf if client supports it - c.useJSON = false - c.mu.Unlock() + if c.useJSON { + c.mu.Lock() + // switch to protobuf if client supports it + c.useJSON = false + c.mu.Unlock() + } // protobuf encoded err := proto.Unmarshal(payload, msg) return msg, err