RoomService.updateParticipantMetadata, participant permissions

This commit is contained in:
David Zhao
2021-03-16 01:22:21 -07:00
parent e04eaeb480
commit f7ed2cee60
19 changed files with 1113 additions and 325 deletions

2
go.mod
View File

@@ -11,7 +11,7 @@ require (
github.com/google/wire v0.5.0
github.com/gorilla/websocket v1.4.2
github.com/jxskiss/base62 v0.0.0-20191017122030-4f11678b909b
github.com/livekit/protocol v0.1.1
github.com/livekit/protocol v0.2.2
github.com/magefile/mage v1.11.0
github.com/maxbrunsfeld/counterfeiter/v6 v6.3.0
github.com/mitchellh/go-homedir v1.1.0

4
go.sum
View File

@@ -232,6 +232,10 @@ github.com/lithammer/shortuuid/v3 v3.0.6 h1:pr15YQyvhiSX/qPxncFtqk+v4xLEpOZObbsY
github.com/lithammer/shortuuid/v3 v3.0.6/go.mod h1:vMk8ke37EmiewwolSO1NLW8vP4ZaKlRuDIi8tWWmAts=
github.com/livekit/protocol v0.1.1 h1:usRLnWYFsPK7GDii6bI7E/z510LMKAHkyaasOHKR/Z0=
github.com/livekit/protocol v0.1.1/go.mod h1:CP+5gHoKelqXgYLSVUGB8QFYUKIqB26EXKbb/89Wofg=
github.com/livekit/protocol v0.2.1 h1:kWZlkMxkuEfvrZa8NFqOCulybEL3eJr2lrq8OfrTLPg=
github.com/livekit/protocol v0.2.1/go.mod h1:wo3CGfYB7XMF8GoVJAfTARrYSP/ombi+sbLl6AYdKP0=
github.com/livekit/protocol v0.2.2 h1:XRcbreNYi8ReAICSsJ3QXzGKSNOz0LxnimAwz5hVSHQ=
github.com/livekit/protocol v0.2.2/go.mod h1:wo3CGfYB7XMF8GoVJAfTARrYSP/ombi+sbLl6AYdKP0=
github.com/lucsky/cuid v1.0.2 h1:z4XlExeoderxoPj2/dxKOyPxe9RCOu7yNq9/XWxIUMQ=
github.com/lucsky/cuid v1.0.2/go.mod h1:QaaJqckboimOmhRSJXSx/+IT+VTfxfPGSo/6mfgUfmE=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=

View File

@@ -43,11 +43,12 @@ func Deps() error {
// regenerate protobuf
func Proto() error {
protoDir := "../protocol"
updated, err := target.Path("proto/model.pb.go",
"../protocol/model.proto",
"../protocol/room.proto",
"../protocol/rtc.proto",
"../protocol/internal.proto",
protoDir+"/model.proto",
protoDir+"/room.proto",
protoDir+"/rtc.proto",
protoDir+"/internal.proto",
)
if err != nil {
return err
@@ -83,8 +84,8 @@ func Proto() error {
"--twirp_opt=paths=source_relative",
"--plugin=go="+protoc_go_path,
"--plugin=twirp="+twirp_path,
"-I=../protocol",
"../protocol/room.proto",
"-I="+protoDir,
protoDir+"/room.proto",
)
connectStd(cmd)
if err := cmd.Run(); err != nil {
@@ -96,10 +97,10 @@ func Proto() error {
"--go_out", target,
"--go_opt=paths=source_relative",
"--plugin=go="+protoc_go_path,
"-I=../protocol",
"../protocol/rtc.proto",
"../protocol/internal.proto",
"../protocol/model.proto",
"-I="+protoDir,
protoDir+"/rtc.proto",
protoDir+"/internal.proto",
protoDir+"/model.proto",
)
connectStd(cmd)
if err := cmd.Run(); err != nil {

View File

@@ -23,7 +23,14 @@ type MessageSource interface {
ReadChan() <-chan proto.Message
}
type NewParticipantCallback func(roomName, identity, metadata string, reconnect bool, requestSource MessageSource, responseSink MessageSink)
type ParticipantInit struct {
Identity string
Metadata string
Reconnect bool
Permission *livekit.ParticipantPermission
}
type NewParticipantCallback func(roomName string, pi ParticipantInit, requestSource MessageSource, responseSink MessageSink)
type RTCMessageCallback func(roomName, identity string, msg *livekit.RTCNodeMessage)
// Router allows multiple nodes to coordinate the participant session
@@ -39,7 +46,7 @@ type Router interface {
ListNodes() ([]*livekit.Node, error)
// participant signal connection is ready to start
StartParticipantSignal(roomName, identity, metadata string, reconnect bool) (connectionId string, reqSink MessageSink, resSource MessageSource, err error)
StartParticipantSignal(roomName string, pi ParticipantInit) (connectionId string, reqSink MessageSink, resSource MessageSource, err error)
// sends a message to RTC node
CreateRTCSink(roomName, identity string) (MessageSink, error)

View File

@@ -71,7 +71,7 @@ func (r *LocalRouter) ListNodes() ([]*livekit.Node, error) {
}, nil
}
func (r *LocalRouter) StartParticipantSignal(roomName, identity, metadata string, reconnect bool) (connectionId string, reqSink MessageSink, resSource MessageSource, err error) {
func (r *LocalRouter) StartParticipantSignal(roomName string, pi ParticipantInit) (connectionId string, reqSink MessageSink, resSource MessageSource, err error) {
// treat it as a new participant connecting
if r.onNewParticipant == nil {
err = ErrHandlerNotDefined
@@ -79,21 +79,19 @@ func (r *LocalRouter) StartParticipantSignal(roomName, identity, metadata string
}
// index channels by roomName | identity
key := participantKey(roomName, identity)
key := participantKey(roomName, pi.Identity)
reqChan := r.getOrCreateMessageChannel(r.requestChannels, key)
resChan := r.getOrCreateMessageChannel(r.responseChannels, key)
r.onNewParticipant(
roomName,
identity,
metadata,
reconnect,
pi,
// request source
reqChan,
// response sink
resChan,
)
return identity, reqChan, resChan, nil
return pi.Identity, reqChan, resChan, nil
}
func (r *LocalRouter) CreateRTCSink(roomName, identity string) (MessageSink, error) {

View File

@@ -129,7 +129,7 @@ func (r *RedisRouter) ListNodes() ([]*livekit.Node, error) {
}
// signal connection sets up paths to the RTC node, and starts to route messages to that message queue
func (r *RedisRouter) StartParticipantSignal(roomName, identity, metadata string, reconnect bool) (connectionId string, reqSink MessageSink, resSource MessageSource, err error) {
func (r *RedisRouter) StartParticipantSignal(roomName string, pi ParticipantInit) (connectionId string, reqSink MessageSink, resSource MessageSource, err error) {
// find the node where the room is hosted at
rtcNode, err := r.GetNodeForRoom(roomName)
if err != nil {
@@ -138,7 +138,7 @@ func (r *RedisRouter) StartParticipantSignal(roomName, identity, metadata string
// create a new connection id
connectionId = utils.NewGuid("CO_")
pKey := participantKey(roomName, identity)
pKey := participantKey(roomName, pi.Identity)
// map signal & rtc nodes
if err = r.setParticipantSignalNode(connectionId, r.currentNode.Id); err != nil {
@@ -150,11 +150,12 @@ func (r *RedisRouter) StartParticipantSignal(roomName, identity, metadata string
// sends a message to start session
err = sink.WriteMessage(&livekit.StartSession{
RoomName: roomName,
Identity: identity,
Metadata: metadata,
Identity: pi.Identity,
Metadata: pi.Metadata,
// connection id is to allow the RTC node to identify where to route the message back to
ConnectionId: connectionId,
Reconnect: reconnect,
Reconnect: pi.Reconnect,
Permission: pi.Permission,
})
if err != nil {
return
@@ -215,13 +216,18 @@ func (r *RedisRouter) startParticipantRTC(ss *livekit.StartSession, participantK
}
}
pi := ParticipantInit{
Identity: ss.Identity,
Metadata: ss.Metadata,
Reconnect: ss.Reconnect,
Permission: ss.Permission,
}
reqChan := r.getOrCreateMessageChannel(r.requestChannels, participantKey)
resSink := NewSignalNodeSink(r.rc, signalNode, ss.ConnectionId)
r.onNewParticipant(
ss.RoomName,
ss.Identity,
ss.Metadata,
ss.Reconnect,
pi,
reqChan,
resSink,
)

View File

@@ -124,13 +124,11 @@ type FakeRouter struct {
startReturnsOnCall map[int]struct {
result1 error
}
StartParticipantSignalStub func(string, string, string, bool) (string, routing.MessageSink, routing.MessageSource, error)
StartParticipantSignalStub func(string, routing.ParticipantInit) (string, routing.MessageSink, routing.MessageSource, error)
startParticipantSignalMutex sync.RWMutex
startParticipantSignalArgsForCall []struct {
arg1 string
arg2 string
arg3 string
arg4 bool
arg2 routing.ParticipantInit
}
startParticipantSignalReturns struct {
result1 string
@@ -757,21 +755,19 @@ func (fake *FakeRouter) StartReturnsOnCall(i int, result1 error) {
}{result1}
}
func (fake *FakeRouter) StartParticipantSignal(arg1 string, arg2 string, arg3 string, arg4 bool) (string, routing.MessageSink, routing.MessageSource, error) {
func (fake *FakeRouter) StartParticipantSignal(arg1 string, arg2 routing.ParticipantInit) (string, routing.MessageSink, routing.MessageSource, error) {
fake.startParticipantSignalMutex.Lock()
ret, specificReturn := fake.startParticipantSignalReturnsOnCall[len(fake.startParticipantSignalArgsForCall)]
fake.startParticipantSignalArgsForCall = append(fake.startParticipantSignalArgsForCall, struct {
arg1 string
arg2 string
arg3 string
arg4 bool
}{arg1, arg2, arg3, arg4})
arg2 routing.ParticipantInit
}{arg1, arg2})
stub := fake.StartParticipantSignalStub
fakeReturns := fake.startParticipantSignalReturns
fake.recordInvocation("StartParticipantSignal", []interface{}{arg1, arg2, arg3, arg4})
fake.recordInvocation("StartParticipantSignal", []interface{}{arg1, arg2})
fake.startParticipantSignalMutex.Unlock()
if stub != nil {
return stub(arg1, arg2, arg3, arg4)
return stub(arg1, arg2)
}
if specificReturn {
return ret.result1, ret.result2, ret.result3, ret.result4
@@ -785,17 +781,17 @@ func (fake *FakeRouter) StartParticipantSignalCallCount() int {
return len(fake.startParticipantSignalArgsForCall)
}
func (fake *FakeRouter) StartParticipantSignalCalls(stub func(string, string, string, bool) (string, routing.MessageSink, routing.MessageSource, error)) {
func (fake *FakeRouter) StartParticipantSignalCalls(stub func(string, routing.ParticipantInit) (string, routing.MessageSink, routing.MessageSource, error)) {
fake.startParticipantSignalMutex.Lock()
defer fake.startParticipantSignalMutex.Unlock()
fake.StartParticipantSignalStub = stub
}
func (fake *FakeRouter) StartParticipantSignalArgsForCall(i int) (string, string, string, bool) {
func (fake *FakeRouter) StartParticipantSignalArgsForCall(i int) (string, routing.ParticipantInit) {
fake.startParticipantSignalMutex.RLock()
defer fake.startParticipantSignalMutex.RUnlock()
argsForCall := fake.startParticipantSignalArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeRouter) StartParticipantSignalReturns(result1 string, result2 routing.MessageSink, result3 routing.MessageSource, result4 error) {

View File

@@ -38,9 +38,10 @@ type ParticipantImpl struct {
conf *WebRTCConfig
identity string
// JSON encoded metadata to pass to clients
metadata string
state atomic.Value // livekit.ParticipantInfo_State
rtcpCh chan []rtcp.Packet
metadata string
permission *livekit.ParticipantPermission
state atomic.Value // livekit.ParticipantInfo_State
rtcpCh chan []rtcp.Packet
// hold reference for MediaTrack
twcc *twcc.Responder
@@ -59,6 +60,7 @@ type ParticipantImpl struct {
onTrackPublished func(types.Participant, types.PublishedTrack)
onTrackUpdated func(types.Participant, types.PublishedTrack)
onStateChange func(p types.Participant, oldState livekit.ParticipantInfo_State)
onMetadataUpdate func(types.Participant)
onClose func(types.Participant)
}
@@ -140,18 +142,24 @@ func (p *ParticipantImpl) IsReady() bool {
func (p *ParticipantImpl) SetMetadata(metadata map[string]interface{}) error {
if metadata == nil {
p.metadata = ""
return nil
}
if data, err := json.Marshal(metadata); err != nil {
return err
} else {
p.metadata = string(data)
if data, err := json.Marshal(metadata); err != nil {
return err
} else {
p.metadata = string(data)
}
}
if p.onMetadataUpdate != nil {
p.onMetadataUpdate(p)
}
return nil
}
func (p *ParticipantImpl) SetPermission(permission *livekit.ParticipantPermission) {
p.permission = permission
}
func (p *ParticipantImpl) RTCPChan() chan []rtcp.Packet {
return p.rtcpCh
}
@@ -197,6 +205,10 @@ func (p *ParticipantImpl) OnTrackUpdated(callback func(types.Participant, types.
p.onTrackUpdated = callback
}
func (p *ParticipantImpl) OnMetadataUpdate(callback func(types.Participant)) {
p.onMetadataUpdate = callback
}
func (p *ParticipantImpl) OnClose(callback func(types.Participant)) {
p.onClose = callback
}
@@ -459,6 +471,14 @@ func (p *ParticipantImpl) GetAudioLevel() (level uint8, noisy bool) {
return
}
func (p *ParticipantImpl) CanPublish() bool {
return p.permission == nil || p.permission.CanPublish
}
func (p *ParticipantImpl) CanSubscribe() bool {
return p.permission == nil || p.permission.CanSubscribe
}
func (p *ParticipantImpl) SubscriberPC() *webrtc.PeerConnection {
return p.subscriber.pc
}
@@ -580,6 +600,12 @@ func (p *ParticipantImpl) onMediaTrack(track *webrtc.TrackRemote, rtpReceiver *w
"remoteTrack", track.ID(),
"rid", track.RID())
if !p.CanPublish() {
logger.Warnw("no permission to publish mediaTrack",
"participant", p.Identity())
return
}
// delete pending track if it's not simulcasting
ti := p.getPendingTrack(track.ID(), ToProtoTrackKind(track.Kind()), track.RID() == "")
if ti == nil {
@@ -620,6 +646,12 @@ func (p *ParticipantImpl) onDataChannel(dc *webrtc.DataChannel) {
}
logger.Debugw("dataChannel added", "participant", p.Identity(), "label", dc.Label())
if !p.CanPublish() {
logger.Warnw("no permission to publish dataTrack",
"participant", p.Identity())
return
}
// data channels have numeric ids, so we use its label to identify
ti := p.getPendingTrack(dc.Label(), livekit.TrackType_DATA, true)
if ti == nil {

View File

@@ -137,7 +137,7 @@ func (r *Room) Join(participant types.Participant) error {
if r.onParticipantChanged != nil {
r.onParticipantChanged(participant)
}
r.broadcastParticipantState(p)
r.broadcastParticipantState(p, true)
if p.State() == livekit.ParticipantInfo_ACTIVE {
// subscribe participant to existing publishedTracks
@@ -161,7 +161,7 @@ func (r *Room) Join(participant types.Participant) error {
}
})
participant.OnTrackUpdated(r.onTrackUpdated)
participant.OnMetadataUpdate(r.onParticipantMetadataUpdate)
logger.Infow("new participant joined",
"id", participant.ID(),
"identity", participant.Identity(),
@@ -213,7 +213,7 @@ func (r *Room) RemoveParticipant(identity string) {
if r.onParticipantChanged != nil {
r.onParticipantChanged(p)
}
r.broadcastParticipantState(p)
r.broadcastParticipantState(p, true)
}
}
@@ -288,7 +288,7 @@ func (r *Room) OnParticipantChanged(f func(participant types.Participant)) {
// a ParticipantImpl in the room added a new remoteTrack, subscribe other participants to it
func (r *Room) onTrackAdded(participant types.Participant, track types.PublishedTrack) {
// publish participant update, since track state is changed
r.broadcastParticipantState(participant)
r.broadcastParticipantState(participant, true)
r.lock.RLock()
defer r.lock.RUnlock()
@@ -322,19 +322,27 @@ func (r *Room) onTrackAdded(participant types.Participant, track types.Published
}
func (r *Room) onTrackUpdated(p types.Participant, track types.PublishedTrack) {
r.broadcastParticipantState(p)
// send track updates to everyone, especially if track was updated by admin
r.broadcastParticipantState(p, false)
if r.onParticipantChanged != nil {
r.onParticipantChanged(p)
}
}
func (r *Room) onParticipantMetadataUpdate(p types.Participant) {
r.broadcastParticipantState(p, false)
if r.onParticipantChanged != nil {
r.onParticipantChanged(p)
}
}
// broadcast an update about participant p
func (r *Room) broadcastParticipantState(p types.Participant) {
func (r *Room) broadcastParticipantState(p types.Participant, skipSource bool) {
updates := ToProtoParticipants([]types.Participant{p})
participants := r.GetParticipants()
for _, op := range participants {
// skip itself && closed participants
if p.ID() == op.ID() || op.State() == livekit.ParticipantInfo_DISCONNECTED {
if (skipSource && p.ID() == op.ID()) || op.State() == livekit.ParticipantInfo_DISCONNECTED {
continue
}

View File

@@ -29,6 +29,7 @@ type Participant interface {
ToProto() *livekit.ParticipantInfo
RTCPChan() chan []rtcp.Packet
SetMetadata(metadata map[string]interface{}) error
SetPermission(permission *livekit.ParticipantPermission)
GetResponseSink() routing.MessageSink
SetResponseSink(sink routing.MessageSink)
SubscriberMediaEngine() *webrtc.MediaEngine
@@ -47,6 +48,10 @@ type Participant interface {
SetTrackMuted(trackId string, muted bool)
GetAudioLevel() (level uint8, noisy bool)
// permissions
CanPublish() bool
CanSubscribe() bool
Start()
Close() error
@@ -56,6 +61,7 @@ type Participant interface {
OnTrackPublished(func(Participant, PublishedTrack))
// OnTrackUpdated - one of its publishedTracks changed in status
OnTrackUpdated(callback func(Participant, PublishedTrack))
OnMetadataUpdate(callback func(Participant))
OnClose(func(Participant))
// package methods

View File

@@ -48,6 +48,26 @@ type FakeParticipant struct {
arg2 string
arg3 livekit.TrackType
}
CanPublishStub func() bool
canPublishMutex sync.RWMutex
canPublishArgsForCall []struct {
}
canPublishReturns struct {
result1 bool
}
canPublishReturnsOnCall map[int]struct {
result1 bool
}
CanSubscribeStub func() bool
canSubscribeMutex sync.RWMutex
canSubscribeArgsForCall []struct {
}
canSubscribeReturns struct {
result1 bool
}
canSubscribeReturnsOnCall map[int]struct {
result1 bool
}
CloseStub func() error
closeMutex sync.RWMutex
closeArgsForCall []struct {
@@ -159,6 +179,11 @@ type FakeParticipant struct {
onCloseArgsForCall []struct {
arg1 func(types.Participant)
}
OnMetadataUpdateStub func(func(types.Participant))
onMetadataUpdateMutex sync.RWMutex
onMetadataUpdateArgsForCall []struct {
arg1 func(types.Participant)
}
OnStateChangeStub func(func(p types.Participant, oldState livekit.ParticipantInfo_State))
onStateChangeMutex sync.RWMutex
onStateChangeArgsForCall []struct {
@@ -241,6 +266,11 @@ type FakeParticipant struct {
setMetadataReturnsOnCall map[int]struct {
result1 error
}
SetPermissionStub func(*livekit.ParticipantPermission)
setPermissionMutex sync.RWMutex
setPermissionArgsForCall []struct {
arg1 *livekit.ParticipantPermission
}
SetResponseSinkStub func(routing.MessageSink)
setResponseSinkMutex sync.RWMutex
setResponseSinkArgsForCall []struct {
@@ -490,6 +520,112 @@ func (fake *FakeParticipant) AddTrackArgsForCall(i int) (string, string, livekit
return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3
}
func (fake *FakeParticipant) CanPublish() bool {
fake.canPublishMutex.Lock()
ret, specificReturn := fake.canPublishReturnsOnCall[len(fake.canPublishArgsForCall)]
fake.canPublishArgsForCall = append(fake.canPublishArgsForCall, struct {
}{})
stub := fake.CanPublishStub
fakeReturns := fake.canPublishReturns
fake.recordInvocation("CanPublish", []interface{}{})
fake.canPublishMutex.Unlock()
if stub != nil {
return stub()
}
if specificReturn {
return ret.result1
}
return fakeReturns.result1
}
func (fake *FakeParticipant) CanPublishCallCount() int {
fake.canPublishMutex.RLock()
defer fake.canPublishMutex.RUnlock()
return len(fake.canPublishArgsForCall)
}
func (fake *FakeParticipant) CanPublishCalls(stub func() bool) {
fake.canPublishMutex.Lock()
defer fake.canPublishMutex.Unlock()
fake.CanPublishStub = stub
}
func (fake *FakeParticipant) CanPublishReturns(result1 bool) {
fake.canPublishMutex.Lock()
defer fake.canPublishMutex.Unlock()
fake.CanPublishStub = nil
fake.canPublishReturns = struct {
result1 bool
}{result1}
}
func (fake *FakeParticipant) CanPublishReturnsOnCall(i int, result1 bool) {
fake.canPublishMutex.Lock()
defer fake.canPublishMutex.Unlock()
fake.CanPublishStub = nil
if fake.canPublishReturnsOnCall == nil {
fake.canPublishReturnsOnCall = make(map[int]struct {
result1 bool
})
}
fake.canPublishReturnsOnCall[i] = struct {
result1 bool
}{result1}
}
func (fake *FakeParticipant) CanSubscribe() bool {
fake.canSubscribeMutex.Lock()
ret, specificReturn := fake.canSubscribeReturnsOnCall[len(fake.canSubscribeArgsForCall)]
fake.canSubscribeArgsForCall = append(fake.canSubscribeArgsForCall, struct {
}{})
stub := fake.CanSubscribeStub
fakeReturns := fake.canSubscribeReturns
fake.recordInvocation("CanSubscribe", []interface{}{})
fake.canSubscribeMutex.Unlock()
if stub != nil {
return stub()
}
if specificReturn {
return ret.result1
}
return fakeReturns.result1
}
func (fake *FakeParticipant) CanSubscribeCallCount() int {
fake.canSubscribeMutex.RLock()
defer fake.canSubscribeMutex.RUnlock()
return len(fake.canSubscribeArgsForCall)
}
func (fake *FakeParticipant) CanSubscribeCalls(stub func() bool) {
fake.canSubscribeMutex.Lock()
defer fake.canSubscribeMutex.Unlock()
fake.CanSubscribeStub = stub
}
func (fake *FakeParticipant) CanSubscribeReturns(result1 bool) {
fake.canSubscribeMutex.Lock()
defer fake.canSubscribeMutex.Unlock()
fake.CanSubscribeStub = nil
fake.canSubscribeReturns = struct {
result1 bool
}{result1}
}
func (fake *FakeParticipant) CanSubscribeReturnsOnCall(i int, result1 bool) {
fake.canSubscribeMutex.Lock()
defer fake.canSubscribeMutex.Unlock()
fake.CanSubscribeStub = nil
if fake.canSubscribeReturnsOnCall == nil {
fake.canSubscribeReturnsOnCall = make(map[int]struct {
result1 bool
})
}
fake.canSubscribeReturnsOnCall[i] = struct {
result1 bool
}{result1}
}
func (fake *FakeParticipant) Close() error {
fake.closeMutex.Lock()
ret, specificReturn := fake.closeReturnsOnCall[len(fake.closeArgsForCall)]
@@ -1074,6 +1210,38 @@ func (fake *FakeParticipant) OnCloseArgsForCall(i int) func(types.Participant) {
return argsForCall.arg1
}
func (fake *FakeParticipant) OnMetadataUpdate(arg1 func(types.Participant)) {
fake.onMetadataUpdateMutex.Lock()
fake.onMetadataUpdateArgsForCall = append(fake.onMetadataUpdateArgsForCall, struct {
arg1 func(types.Participant)
}{arg1})
stub := fake.OnMetadataUpdateStub
fake.recordInvocation("OnMetadataUpdate", []interface{}{arg1})
fake.onMetadataUpdateMutex.Unlock()
if stub != nil {
fake.OnMetadataUpdateStub(arg1)
}
}
func (fake *FakeParticipant) OnMetadataUpdateCallCount() int {
fake.onMetadataUpdateMutex.RLock()
defer fake.onMetadataUpdateMutex.RUnlock()
return len(fake.onMetadataUpdateArgsForCall)
}
func (fake *FakeParticipant) OnMetadataUpdateCalls(stub func(func(types.Participant))) {
fake.onMetadataUpdateMutex.Lock()
defer fake.onMetadataUpdateMutex.Unlock()
fake.OnMetadataUpdateStub = stub
}
func (fake *FakeParticipant) OnMetadataUpdateArgsForCall(i int) func(types.Participant) {
fake.onMetadataUpdateMutex.RLock()
defer fake.onMetadataUpdateMutex.RUnlock()
argsForCall := fake.onMetadataUpdateArgsForCall[i]
return argsForCall.arg1
}
func (fake *FakeParticipant) OnStateChange(arg1 func(p types.Participant, oldState livekit.ParticipantInfo_State)) {
fake.onStateChangeMutex.Lock()
fake.onStateChangeArgsForCall = append(fake.onStateChangeArgsForCall, struct {
@@ -1554,6 +1722,38 @@ func (fake *FakeParticipant) SetMetadataReturnsOnCall(i int, result1 error) {
}{result1}
}
func (fake *FakeParticipant) SetPermission(arg1 *livekit.ParticipantPermission) {
fake.setPermissionMutex.Lock()
fake.setPermissionArgsForCall = append(fake.setPermissionArgsForCall, struct {
arg1 *livekit.ParticipantPermission
}{arg1})
stub := fake.SetPermissionStub
fake.recordInvocation("SetPermission", []interface{}{arg1})
fake.setPermissionMutex.Unlock()
if stub != nil {
fake.SetPermissionStub(arg1)
}
}
func (fake *FakeParticipant) SetPermissionCallCount() int {
fake.setPermissionMutex.RLock()
defer fake.setPermissionMutex.RUnlock()
return len(fake.setPermissionArgsForCall)
}
func (fake *FakeParticipant) SetPermissionCalls(stub func(*livekit.ParticipantPermission)) {
fake.setPermissionMutex.Lock()
defer fake.setPermissionMutex.Unlock()
fake.SetPermissionStub = stub
}
func (fake *FakeParticipant) SetPermissionArgsForCall(i int) *livekit.ParticipantPermission {
fake.setPermissionMutex.RLock()
defer fake.setPermissionMutex.RUnlock()
argsForCall := fake.setPermissionArgsForCall[i]
return argsForCall.arg1
}
func (fake *FakeParticipant) SetResponseSink(arg1 routing.MessageSink) {
fake.setResponseSinkMutex.Lock()
fake.setResponseSinkArgsForCall = append(fake.setResponseSinkArgsForCall, struct {
@@ -1866,6 +2066,10 @@ func (fake *FakeParticipant) Invocations() map[string][][]interface{} {
defer fake.addSubscriberMutex.RUnlock()
fake.addTrackMutex.RLock()
defer fake.addTrackMutex.RUnlock()
fake.canPublishMutex.RLock()
defer fake.canPublishMutex.RUnlock()
fake.canSubscribeMutex.RLock()
defer fake.canSubscribeMutex.RUnlock()
fake.closeMutex.RLock()
defer fake.closeMutex.RUnlock()
fake.getAudioLevelMutex.RLock()
@@ -1888,6 +2092,8 @@ func (fake *FakeParticipant) Invocations() map[string][][]interface{} {
defer fake.isReadyMutex.RUnlock()
fake.onCloseMutex.RLock()
defer fake.onCloseMutex.RUnlock()
fake.onMetadataUpdateMutex.RLock()
defer fake.onMetadataUpdateMutex.RUnlock()
fake.onStateChangeMutex.RLock()
defer fake.onStateChangeMutex.RUnlock()
fake.onTrackPublishedMutex.RLock()
@@ -1908,6 +2114,8 @@ func (fake *FakeParticipant) Invocations() map[string][][]interface{} {
defer fake.sendParticipantUpdateMutex.RUnlock()
fake.setMetadataMutex.RLock()
defer fake.setMetadataMutex.RUnlock()
fake.setPermissionMutex.RLock()
defer fake.setPermissionMutex.RUnlock()
fake.setResponseSinkMutex.RLock()
defer fake.setResponseSinkMutex.RUnlock()
fake.setTrackMutedMutex.RLock()

View File

@@ -172,22 +172,22 @@ func (r *RoomManager) CloseIdleRooms() {
}
// starts WebRTC session when a new participant is connected, takes place on RTC node
func (r *RoomManager) StartSession(roomName, identity, metadata string, reconnect bool, requestSource routing.MessageSource, responseSink routing.MessageSink) {
func (r *RoomManager) StartSession(roomName string, pi routing.ParticipantInit, requestSource routing.MessageSource, responseSink routing.MessageSink) {
room, err := r.getOrCreateRoom(roomName)
if err != nil {
logger.Errorw("could not create room", "error", err)
return
}
participant := room.GetParticipant(identity)
participant := room.GetParticipant(pi.Identity)
if participant != nil {
// When reconnecting, it means WS has interrupted by underlying peer connection is still ok
// in this mode, we'll keep the participant SID, and just swap the sink for the underlying connection
if reconnect {
if pi.Reconnect {
logger.Debugw("resuming RTC session",
"room", roomName,
"node", r.currentNode.Id,
"participant", identity,
"participant", pi.Identity,
)
// close previous sink, and link to new one
prevSink := participant.GetResponseSink()
@@ -206,22 +206,26 @@ func (r *RoomManager) StartSession(roomName, identity, metadata string, reconnec
logger.Debugw("starting RTC session",
"room", roomName,
"node", r.currentNode.Id,
"participant", identity,
"participant", pi.Identity,
"num_participants", len(room.GetParticipants()),
)
participant, err = rtc.NewParticipant(identity, r.rtcConfig, responseSink, r.config.Audio)
participant, err = rtc.NewParticipant(pi.Identity, r.rtcConfig, responseSink, r.config.Audio)
if err != nil {
logger.Errorw("could not create participant", "error", err)
return
}
if metadata != "" {
if pi.Metadata != "" {
var md map[string]interface{}
if err := json.Unmarshal([]byte(metadata), &md); err == nil {
if err := json.Unmarshal([]byte(pi.Metadata), &md); err == nil {
participant.SetMetadata(md)
}
}
if pi.Permission != nil {
participant.SetPermission(pi.Permission)
}
// join room
if err := room.Join(participant); err != nil {
logger.Errorw("could not join room", "error", err)
@@ -334,7 +338,13 @@ func (r *RoomManager) rtcSessionWorker(room *rtc.Room, participant types.Partici
case *livekit.SignalRequest_Mute:
participant.SetTrackMuted(msg.Mute.Sid, msg.Mute.Muted)
case *livekit.SignalRequest_Subscription:
room.UpdateSubscriptions(participant, msg.Subscription)
if participant.CanSubscribe() {
room.UpdateSubscriptions(participant, msg.Subscription)
} else {
logger.Warnw("rejected participant subscription",
"participant", participant.Identity(),
"tracks", msg.Subscription.TrackSids)
}
case *livekit.SignalRequest_TrackSetting:
for _, subTrack := range participant.GetSubscribedTracks() {
for _, sid := range msg.TrackSetting.TrackSids {
@@ -373,6 +383,16 @@ func (r *RoomManager) handleRTCMessage(roomName, identity string, msg *livekit.R
logger.Debugw("setting track muted", "room", roomName, "participant", identity,
"track", rm.MuteTrack.TrackSid, "muted", rm.MuteTrack.Muted)
participant.SetTrackMuted(rm.MuteTrack.TrackSid, rm.MuteTrack.Muted)
case *livekit.RTCNodeMessage_UpdateMetadata:
logger.Debugw("updating metadata", "room", roomName, "participant", identity)
var md map[string]interface{}
if rm.UpdateMetadata.Metadata != "" {
if err := json.Unmarshal([]byte(rm.UpdateMetadata.Metadata), &md); err != nil {
logger.Errorw("could not update metadata", "error", err)
return
}
}
participant.SetMetadata(md)
}
}

View File

@@ -7,6 +7,7 @@ import (
"github.com/thoas/go-funk"
"github.com/twitchtv/twirp"
"github.com/livekit/livekit-server/pkg/routing"
livekit "github.com/livekit/livekit-server/proto"
)
@@ -97,16 +98,8 @@ func (s *RoomService) GetParticipant(ctx context.Context, req *livekit.RoomParti
}
func (s *RoomService) RemoveParticipant(ctx context.Context, req *livekit.RoomParticipantIdentity) (res *livekit.RemoveParticipantResponse, err error) {
if err = EnsureAdminPermission(ctx, req.Room); err != nil {
return nil, twirpAuthError(err)
}
rtcSink, err := s.createRTCSink(ctx, req.Room, req.Identity)
participant, err := s.roomManager.roomStore.GetParticipant(req.Room, req.Identity)
if err != nil {
return
}
rtcSink, err := s.roomManager.router.CreateRTCSink(req.Room, participant.Identity)
if err != nil {
return
}
@@ -122,30 +115,16 @@ func (s *RoomService) RemoveParticipant(ctx context.Context, req *livekit.RoomPa
}
func (s *RoomService) MutePublishedTrack(ctx context.Context, req *livekit.MuteRoomTrackRequest) (res *livekit.MuteRoomTrackResponse, err error) {
if err = EnsureAdminPermission(ctx, req.Room); err != nil {
return nil, twirpAuthError(err)
}
participant, err := s.roomManager.roomStore.GetParticipant(req.Room, req.Identity)
if err != nil {
return
}
rtcSink, err := s.roomManager.router.CreateRTCSink(req.Room, participant.Identity)
rtcSink, err := s.createRTCSink(ctx, req.Room, req.Identity)
if err != nil {
return
}
defer rtcSink.Close()
err = rtcSink.WriteMessage(&livekit.RTCNodeMessage{
Message: &livekit.RTCNodeMessage_MuteTrack{
MuteTrack: req,
},
})
participant, err := s.roomManager.roomStore.GetParticipant(req.Room, req.Identity)
if err != nil {
return
return nil, err
}
// find the track
track := funk.Find(participant.Tracks, func(t *livekit.TrackInfo) bool {
return t.Sid == req.TrackSid
@@ -153,8 +132,55 @@ func (s *RoomService) MutePublishedTrack(ctx context.Context, req *livekit.MuteR
if track == nil {
return nil, twirp.NotFoundError(ErrTrackNotFound.Error())
}
err = rtcSink.WriteMessage(&livekit.RTCNodeMessage{
Message: &livekit.RTCNodeMessage_MuteTrack{
MuteTrack: req,
},
})
if err != nil {
return
}
res = &livekit.MuteRoomTrackResponse{
Track: track.(*livekit.TrackInfo),
}
// mute might not have happened, reflect desired state
res.Track.Muted = req.Muted
return
}
func (s *RoomService) UpdateParticipantMetadata(ctx context.Context, req *livekit.UpdateParticipantMetadataRequest) (*livekit.ParticipantInfo, error) {
rtcSink, err := s.createRTCSink(ctx, req.Target.Room, req.Target.Identity)
if err != nil {
return nil, err
}
defer rtcSink.Close()
participant, err := s.roomManager.roomStore.GetParticipant(req.Target.Room, req.Target.Identity)
if err != nil {
return nil, err
}
err = rtcSink.WriteMessage(&livekit.RTCNodeMessage{
Message: &livekit.RTCNodeMessage_UpdateMetadata{
UpdateMetadata: req,
},
})
participant.Metadata = req.Metadata
return participant, nil
}
func (s *RoomService) createRTCSink(ctx context.Context, room, identity string) (routing.MessageSink, error) {
if err := EnsureAdminPermission(ctx, room); err != nil {
return nil, twirpAuthError(err)
}
_, err := s.roomManager.roomStore.GetParticipant(room, identity)
if err != nil {
return nil, err
}
return s.roomManager.router.CreateRTCSink(room, identity)
}

View File

@@ -56,14 +56,24 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
roomName := r.FormValue("room")
reconnectParam := r.FormValue("reconnect")
isReconnect := reconnectParam == "1" || reconnectParam == "true"
claims := GetGrants(r.Context())
// require a claim
if claims == nil || claims.Video == nil {
handleError(w, http.StatusUnauthorized, rtc.ErrPermissionDenied.Error())
return
}
identity := claims.Identity
pi := routing.ParticipantInit{
Reconnect: reconnectParam == "1" || reconnectParam == "true",
Identity: claims.Identity,
}
// only use permissions if any of them are set, default permissive
if claims.Video.CanPublish || claims.Video.CanSubscribe {
pi.Permission = &livekit.ParticipantPermission{
CanSubscribe: claims.Video.CanSubscribe,
CanPublish: claims.Video.CanPublish,
}
}
onlyName, err := EnsureJoinPermission(r.Context())
if err != nil {
@@ -81,17 +91,16 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
}
var metadata string
if claims.Metadata != nil {
if data, err := json.Marshal(claims.Metadata); err != nil {
logger.Warnw("unable to encode metadata", "error", err)
} else {
metadata = string(data)
pi.Metadata = string(data)
}
}
// this needs to be started first *before* using router functions on this node
connId, reqSink, resSource, err := s.router.StartParticipantSignal(roomName, identity, metadata, isReconnect)
connId, reqSink, resSource, err := s.router.StartParticipantSignal(roomName, pi)
if err != nil {
handleError(w, http.StatusInternalServerError, "could not start session: "+err.Error())
return
@@ -100,7 +109,7 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
done := make(chan bool, 1)
// function exits when websocket terminates, it'll close the event reading off of response sink as well
defer func() {
logger.Infow("WS connection closed", "participant", identity, "connectionId", connId)
logger.Infow("WS connection closed", "participant", pi.Identity, "connectionId", connId)
reqSink.Close()
close(done)
}()
@@ -120,7 +129,7 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
"connectionId", connId,
"room", rm.Sid,
"roomName", rm.Name,
"name", identity,
"name", pi.Identity,
)
// handle responses
@@ -137,7 +146,8 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
case msg := <-resSource.ReadChan():
if msg == nil {
logger.Infow("source closed connection", "participant", identity,
logger.Infow("source closed connection",
"participant", pi.Identity,
"connectionId", connId)
return
}
@@ -145,7 +155,7 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if !ok {
logger.Errorw("unexpected message type",
"type", fmt.Sprintf("%T", msg),
"participant", identity,
"participant", pi.Identity,
"connectionId", connId)
continue
}
@@ -172,8 +182,10 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
}
if err := reqSink.WriteMessage(req); err != nil {
logger.Warnw("error writing to request sink", "error", err,
"participant", identity, "connectionId", connId)
logger.Warnw("error writing to request sink",
"error", err,
"participant", pi.Identity,
"connectionId", connId)
}
}
}

View File

@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc v3.15.5
// protoc v3.15.6
// source: internal.proto
package livekit
@@ -197,6 +197,7 @@ type RTCNodeMessage struct {
// *RTCNodeMessage_Request
// *RTCNodeMessage_RemoveParticipant
// *RTCNodeMessage_MuteTrack
// *RTCNodeMessage_UpdateMetadata
Message isRTCNodeMessage_Message `protobuf_oneof:"message"`
}
@@ -274,6 +275,13 @@ func (x *RTCNodeMessage) GetMuteTrack() *MuteRoomTrackRequest {
return nil
}
func (x *RTCNodeMessage) GetUpdateMetadata() *UpdateParticipantMetadataRequest {
if x, ok := x.GetMessage().(*RTCNodeMessage_UpdateMetadata); ok {
return x.UpdateMetadata
}
return nil
}
type isRTCNodeMessage_Message interface {
isRTCNodeMessage_Message()
}
@@ -295,6 +303,10 @@ type RTCNodeMessage_MuteTrack struct {
MuteTrack *MuteRoomTrackRequest `protobuf:"bytes,5,opt,name=mute_track,json=muteTrack,proto3,oneof"`
}
type RTCNodeMessage_UpdateMetadata struct {
UpdateMetadata *UpdateParticipantMetadataRequest `protobuf:"bytes,6,opt,name=update_metadata,json=updateMetadata,proto3,oneof"`
}
func (*RTCNodeMessage_StartSession) isRTCNodeMessage_Message() {}
func (*RTCNodeMessage_Request) isRTCNodeMessage_Message() {}
@@ -303,6 +315,8 @@ func (*RTCNodeMessage_RemoveParticipant) isRTCNodeMessage_Message() {}
func (*RTCNodeMessage_MuteTrack) isRTCNodeMessage_Message() {}
func (*RTCNodeMessage_UpdateMetadata) isRTCNodeMessage_Message() {}
// message to Signal nodes
type SignalNodeMessage struct {
state protoimpl.MessageState
@@ -403,7 +417,8 @@ type StartSession struct {
// if a client is reconnecting (i.e. resume instead of restart)
Reconnect bool `protobuf:"varint,4,opt,name=reconnect,proto3" json:"reconnect,omitempty"`
// metadata to pass to participant
Metadata string `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"`
Metadata string `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"`
Permission *ParticipantPermission `protobuf:"bytes,6,opt,name=permission,proto3" json:"permission,omitempty"`
}
func (x *StartSession) Reset() {
@@ -473,6 +488,68 @@ func (x *StartSession) GetMetadata() string {
return ""
}
func (x *StartSession) GetPermission() *ParticipantPermission {
if x != nil {
return x.Permission
}
return nil
}
type ParticipantPermission struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
CanSubscribe bool `protobuf:"varint,1,opt,name=can_subscribe,json=canSubscribe,proto3" json:"can_subscribe,omitempty"`
CanPublish bool `protobuf:"varint,2,opt,name=can_publish,json=canPublish,proto3" json:"can_publish,omitempty"`
}
func (x *ParticipantPermission) Reset() {
*x = ParticipantPermission{}
if protoimpl.UnsafeEnabled {
mi := &file_internal_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ParticipantPermission) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ParticipantPermission) ProtoMessage() {}
func (x *ParticipantPermission) ProtoReflect() protoreflect.Message {
mi := &file_internal_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ParticipantPermission.ProtoReflect.Descriptor instead.
func (*ParticipantPermission) Descriptor() ([]byte, []int) {
return file_internal_proto_rawDescGZIP(), []int{5}
}
func (x *ParticipantPermission) GetCanSubscribe() bool {
if x != nil {
return x.CanSubscribe
}
return false
}
func (x *ParticipantPermission) GetCanPublish() bool {
if x != nil {
return x.CanPublish
}
return false
}
type EndSession struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -482,7 +559,7 @@ type EndSession struct {
func (x *EndSession) Reset() {
*x = EndSession{}
if protoimpl.UnsafeEnabled {
mi := &file_internal_proto_msgTypes[5]
mi := &file_internal_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -495,7 +572,7 @@ func (x *EndSession) String() string {
func (*EndSession) ProtoMessage() {}
func (x *EndSession) ProtoReflect() protoreflect.Message {
mi := &file_internal_proto_msgTypes[5]
mi := &file_internal_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -508,7 +585,7 @@ func (x *EndSession) ProtoReflect() protoreflect.Message {
// Deprecated: Use EndSession.ProtoReflect.Descriptor instead.
func (*EndSession) Descriptor() ([]byte, []int) {
return file_internal_proto_rawDescGZIP(), []int{5}
return file_internal_proto_rawDescGZIP(), []int{6}
}
type RemoveParticipant struct {
@@ -522,7 +599,7 @@ type RemoveParticipant struct {
func (x *RemoveParticipant) Reset() {
*x = RemoveParticipant{}
if protoimpl.UnsafeEnabled {
mi := &file_internal_proto_msgTypes[6]
mi := &file_internal_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -535,7 +612,7 @@ func (x *RemoveParticipant) String() string {
func (*RemoveParticipant) ProtoMessage() {}
func (x *RemoveParticipant) ProtoReflect() protoreflect.Message {
mi := &file_internal_proto_msgTypes[6]
mi := &file_internal_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -548,7 +625,7 @@ func (x *RemoveParticipant) ProtoReflect() protoreflect.Message {
// Deprecated: Use RemoveParticipant.ProtoReflect.Descriptor instead.
func (*RemoveParticipant) Descriptor() ([]byte, []int) {
return file_internal_proto_rawDescGZIP(), []int{6}
return file_internal_proto_rawDescGZIP(), []int{7}
}
func (x *RemoveParticipant) GetParticipantId() string {
@@ -584,7 +661,7 @@ var file_internal_proto_rawDesc = []byte{
0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x49, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x6e,
0x75, 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x4f, 0x75,
0x74, 0x22, 0xc9, 0x02, 0x0a, 0x0e, 0x52, 0x54, 0x43, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x73,
0x74, 0x22, 0x9f, 0x03, 0x0a, 0x0e, 0x52, 0x54, 0x43, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x73,
0x73, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
0x61, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70,
0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x3c, 0x0a,
@@ -604,37 +681,53 @@ var file_internal_proto_rawDesc = []byte{
0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74,
0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x75, 0x74, 0x65, 0x54, 0x72, 0x61,
0x63, 0x6b, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb2, 0x01,
0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f,
0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e,
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76,
0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
0x36, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x45,
0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x6e, 0x64,
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x73, 0x73,
0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65,
0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0d,
0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49,
0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x04,
0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12,
0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x0c, 0x0a, 0x0a, 0x45,
0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x11, 0x52, 0x65, 0x6d,
0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x25,
0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
0x61, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x6c, 0x69, 0x76, 0x65,
0x6b, 0x69, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x63, 0x6b, 0x12, 0x54, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x69,
0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74,
0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4e, 0x6f,
0x64, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e,
0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x35,
0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61,
0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x65, 0x73,
0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76,
0x65, 0x6b, 0x69, 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48,
0x00, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a,
0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xe6, 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x61,
0x72, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f,
0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f,
0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
0x74, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x6e,
0x6e, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f,
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
0x61, 0x12, 0x3e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18,
0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e,
0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
0x6e, 0x22, 0x5d, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61,
0x6e, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x08, 0x52, 0x0c, 0x63, 0x61, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12,
0x1f, 0x0a, 0x0b, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x02,
0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x61, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
0x22, 0x0c, 0x0a, 0x0a, 0x45, 0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a,
0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
0x61, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72,
0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69,
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74,
0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -649,33 +742,37 @@ func file_internal_proto_rawDescGZIP() []byte {
return file_internal_proto_rawDescData
}
var file_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
var file_internal_proto_goTypes = []interface{}{
(*Node)(nil), // 0: livekit.Node
(*NodeStats)(nil), // 1: livekit.NodeStats
(*RTCNodeMessage)(nil), // 2: livekit.RTCNodeMessage
(*SignalNodeMessage)(nil), // 3: livekit.SignalNodeMessage
(*StartSession)(nil), // 4: livekit.StartSession
(*EndSession)(nil), // 5: livekit.EndSession
(*RemoveParticipant)(nil), // 6: livekit.RemoveParticipant
(*SignalRequest)(nil), // 7: livekit.SignalRequest
(*RoomParticipantIdentity)(nil), // 8: livekit.RoomParticipantIdentity
(*MuteRoomTrackRequest)(nil), // 9: livekit.MuteRoomTrackRequest
(*SignalResponse)(nil), // 10: livekit.SignalResponse
(*Node)(nil), // 0: livekit.Node
(*NodeStats)(nil), // 1: livekit.NodeStats
(*RTCNodeMessage)(nil), // 2: livekit.RTCNodeMessage
(*SignalNodeMessage)(nil), // 3: livekit.SignalNodeMessage
(*StartSession)(nil), // 4: livekit.StartSession
(*ParticipantPermission)(nil), // 5: livekit.ParticipantPermission
(*EndSession)(nil), // 6: livekit.EndSession
(*RemoveParticipant)(nil), // 7: livekit.RemoveParticipant
(*SignalRequest)(nil), // 8: livekit.SignalRequest
(*RoomParticipantIdentity)(nil), // 9: livekit.RoomParticipantIdentity
(*MuteRoomTrackRequest)(nil), // 10: livekit.MuteRoomTrackRequest
(*UpdateParticipantMetadataRequest)(nil), // 11: livekit.UpdateParticipantMetadataRequest
(*SignalResponse)(nil), // 12: livekit.SignalResponse
}
var file_internal_proto_depIdxs = []int32{
1, // 0: livekit.Node.stats:type_name -> livekit.NodeStats
4, // 1: livekit.RTCNodeMessage.start_session:type_name -> livekit.StartSession
7, // 2: livekit.RTCNodeMessage.request:type_name -> livekit.SignalRequest
8, // 3: livekit.RTCNodeMessage.remove_participant:type_name -> livekit.RoomParticipantIdentity
9, // 4: livekit.RTCNodeMessage.mute_track:type_name -> livekit.MuteRoomTrackRequest
10, // 5: livekit.SignalNodeMessage.response:type_name -> livekit.SignalResponse
5, // 6: livekit.SignalNodeMessage.end_session:type_name -> livekit.EndSession
7, // [7:7] is the sub-list for method output_type
7, // [7:7] is the sub-list for method input_type
7, // [7:7] is the sub-list for extension type_name
7, // [7:7] is the sub-list for extension extendee
0, // [0:7] is the sub-list for field type_name
8, // 2: livekit.RTCNodeMessage.request:type_name -> livekit.SignalRequest
9, // 3: livekit.RTCNodeMessage.remove_participant:type_name -> livekit.RoomParticipantIdentity
10, // 4: livekit.RTCNodeMessage.mute_track:type_name -> livekit.MuteRoomTrackRequest
11, // 5: livekit.RTCNodeMessage.update_metadata:type_name -> livekit.UpdateParticipantMetadataRequest
12, // 6: livekit.SignalNodeMessage.response:type_name -> livekit.SignalResponse
6, // 7: livekit.SignalNodeMessage.end_session:type_name -> livekit.EndSession
5, // 8: livekit.StartSession.permission:type_name -> livekit.ParticipantPermission
9, // [9:9] is the sub-list for method output_type
9, // [9:9] is the sub-list for method input_type
9, // [9:9] is the sub-list for extension type_name
9, // [9:9] is the sub-list for extension extendee
0, // [0:9] is the sub-list for field type_name
}
func init() { file_internal_proto_init() }
@@ -747,7 +844,7 @@ func file_internal_proto_init() {
}
}
file_internal_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*EndSession); i {
switch v := v.(*ParticipantPermission); i {
case 0:
return &v.state
case 1:
@@ -759,6 +856,18 @@ func file_internal_proto_init() {
}
}
file_internal_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*EndSession); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_internal_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RemoveParticipant); i {
case 0:
return &v.state
@@ -776,6 +885,7 @@ func file_internal_proto_init() {
(*RTCNodeMessage_Request)(nil),
(*RTCNodeMessage_RemoveParticipant)(nil),
(*RTCNodeMessage_MuteTrack)(nil),
(*RTCNodeMessage_UpdateMetadata)(nil),
}
file_internal_proto_msgTypes[3].OneofWrappers = []interface{}{
(*SignalNodeMessage_Response)(nil),
@@ -787,7 +897,7 @@ func file_internal_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_internal_proto_rawDesc,
NumEnums: 0,
NumMessages: 7,
NumMessages: 8,
NumExtensions: 0,
NumServices: 0,
},

View File

@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc v3.15.5
// protoc v3.15.6
// source: model.proto
package livekit

View File

@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc v3.15.5
// protoc v3.15.6
// source: room.proto
package livekit
@@ -573,6 +573,61 @@ func (x *MuteRoomTrackResponse) GetTrack() *TrackInfo {
return nil
}
type UpdateParticipantMetadataRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Target *RoomParticipantIdentity `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"`
Metadata string `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"`
}
func (x *UpdateParticipantMetadataRequest) Reset() {
*x = UpdateParticipantMetadataRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_room_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UpdateParticipantMetadataRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UpdateParticipantMetadataRequest) ProtoMessage() {}
func (x *UpdateParticipantMetadataRequest) ProtoReflect() protoreflect.Message {
mi := &file_room_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UpdateParticipantMetadataRequest.ProtoReflect.Descriptor instead.
func (*UpdateParticipantMetadataRequest) Descriptor() ([]byte, []int) {
return file_room_proto_rawDescGZIP(), []int{11}
}
func (x *UpdateParticipantMetadataRequest) GetTarget() *RoomParticipantIdentity {
if x != nil {
return x.Target
}
return nil
}
func (x *UpdateParticipantMetadataRequest) GetMetadata() string {
if x != nil {
return x.Metadata
}
return ""
}
var File_room_proto protoreflect.FileDescriptor
var file_room_proto_rawDesc = []byte{
@@ -623,45 +678,59 @@ var file_room_proto_rawDesc = []byte{
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74,
0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63,
0x6b, 0x32, 0xa8, 0x04, 0x0a, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x12, 0x37, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12,
0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x6c, 0x69,
0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x42, 0x0a, 0x09, 0x4c, 0x69,
0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x19, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69,
0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x73,
0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45,
0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1a, 0x2e, 0x6c,
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f,
0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b,
0x69, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72,
0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65,
0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x69,
0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63,
0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c,
0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
0x12, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x50,
0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69,
0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72,
0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x59, 0x0a, 0x11,
0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e,
0x74, 0x12, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d,
0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74,
0x69, 0x74, 0x79, 0x1a, 0x22, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x65,
0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x12, 0x4d, 0x75, 0x74, 0x65, 0x50,
0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1d, 0x2e,
0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d,
0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c,
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54,
0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x31, 0x5a, 0x2f,
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b,
0x69, 0x74, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65,
0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6b, 0x22, 0x78, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69,
0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e,
0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49,
0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12,
0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x32, 0x8a, 0x05, 0x0a, 0x0b,
0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x43,
0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65,
0x6b, 0x69, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e,
0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x42, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d,
0x73, 0x12, 0x19, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74,
0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6c,
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65,
0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74,
0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x44, 0x65, 0x6c,
0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
0x57, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69,
0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e,
0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50,
0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x6c, 0x69, 0x76,
0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6c,
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x59, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x6c, 0x69,
0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63,
0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x22, 0x2e,
0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61,
0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x12, 0x53, 0x0a, 0x12, 0x4d, 0x75, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69,
0x74, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74,
0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64,
0x61, 0x74, 0x61, 0x12, 0x29, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d,
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18,
0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
0x70, 0x61, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68,
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x6c,
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
}
var (
@@ -676,46 +745,50 @@ func file_room_proto_rawDescGZIP() []byte {
return file_room_proto_rawDescData
}
var file_room_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
var file_room_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
var file_room_proto_goTypes = []interface{}{
(*CreateRoomRequest)(nil), // 0: livekit.CreateRoomRequest
(*ListRoomsRequest)(nil), // 1: livekit.ListRoomsRequest
(*ListRoomsResponse)(nil), // 2: livekit.ListRoomsResponse
(*DeleteRoomRequest)(nil), // 3: livekit.DeleteRoomRequest
(*DeleteRoomResponse)(nil), // 4: livekit.DeleteRoomResponse
(*ListParticipantsRequest)(nil), // 5: livekit.ListParticipantsRequest
(*ListParticipantsResponse)(nil), // 6: livekit.ListParticipantsResponse
(*RoomParticipantIdentity)(nil), // 7: livekit.RoomParticipantIdentity
(*RemoveParticipantResponse)(nil), // 8: livekit.RemoveParticipantResponse
(*MuteRoomTrackRequest)(nil), // 9: livekit.MuteRoomTrackRequest
(*MuteRoomTrackResponse)(nil), // 10: livekit.MuteRoomTrackResponse
(*Room)(nil), // 11: livekit.Room
(*ParticipantInfo)(nil), // 12: livekit.ParticipantInfo
(*TrackInfo)(nil), // 13: livekit.TrackInfo
(*CreateRoomRequest)(nil), // 0: livekit.CreateRoomRequest
(*ListRoomsRequest)(nil), // 1: livekit.ListRoomsRequest
(*ListRoomsResponse)(nil), // 2: livekit.ListRoomsResponse
(*DeleteRoomRequest)(nil), // 3: livekit.DeleteRoomRequest
(*DeleteRoomResponse)(nil), // 4: livekit.DeleteRoomResponse
(*ListParticipantsRequest)(nil), // 5: livekit.ListParticipantsRequest
(*ListParticipantsResponse)(nil), // 6: livekit.ListParticipantsResponse
(*RoomParticipantIdentity)(nil), // 7: livekit.RoomParticipantIdentity
(*RemoveParticipantResponse)(nil), // 8: livekit.RemoveParticipantResponse
(*MuteRoomTrackRequest)(nil), // 9: livekit.MuteRoomTrackRequest
(*MuteRoomTrackResponse)(nil), // 10: livekit.MuteRoomTrackResponse
(*UpdateParticipantMetadataRequest)(nil), // 11: livekit.UpdateParticipantMetadataRequest
(*Room)(nil), // 12: livekit.Room
(*ParticipantInfo)(nil), // 13: livekit.ParticipantInfo
(*TrackInfo)(nil), // 14: livekit.TrackInfo
}
var file_room_proto_depIdxs = []int32{
11, // 0: livekit.ListRoomsResponse.rooms:type_name -> livekit.Room
12, // 1: livekit.ListParticipantsResponse.participants:type_name -> livekit.ParticipantInfo
13, // 2: livekit.MuteRoomTrackResponse.track:type_name -> livekit.TrackInfo
0, // 3: livekit.RoomService.CreateRoom:input_type -> livekit.CreateRoomRequest
1, // 4: livekit.RoomService.ListRooms:input_type -> livekit.ListRoomsRequest
3, // 5: livekit.RoomService.DeleteRoom:input_type -> livekit.DeleteRoomRequest
5, // 6: livekit.RoomService.ListParticipants:input_type -> livekit.ListParticipantsRequest
7, // 7: livekit.RoomService.GetParticipant:input_type -> livekit.RoomParticipantIdentity
7, // 8: livekit.RoomService.RemoveParticipant:input_type -> livekit.RoomParticipantIdentity
9, // 9: livekit.RoomService.MutePublishedTrack:input_type -> livekit.MuteRoomTrackRequest
11, // 10: livekit.RoomService.CreateRoom:output_type -> livekit.Room
2, // 11: livekit.RoomService.ListRooms:output_type -> livekit.ListRoomsResponse
4, // 12: livekit.RoomService.DeleteRoom:output_type -> livekit.DeleteRoomResponse
6, // 13: livekit.RoomService.ListParticipants:output_type -> livekit.ListParticipantsResponse
12, // 14: livekit.RoomService.GetParticipant:output_type -> livekit.ParticipantInfo
8, // 15: livekit.RoomService.RemoveParticipant:output_type -> livekit.RemoveParticipantResponse
10, // 16: livekit.RoomService.MutePublishedTrack:output_type -> livekit.MuteRoomTrackResponse
10, // [10:17] is the sub-list for method output_type
3, // [3:10] is the sub-list for method input_type
3, // [3:3] is the sub-list for extension type_name
3, // [3:3] is the sub-list for extension extendee
0, // [0:3] is the sub-list for field type_name
12, // 0: livekit.ListRoomsResponse.rooms:type_name -> livekit.Room
13, // 1: livekit.ListParticipantsResponse.participants:type_name -> livekit.ParticipantInfo
14, // 2: livekit.MuteRoomTrackResponse.track:type_name -> livekit.TrackInfo
7, // 3: livekit.UpdateParticipantMetadataRequest.target:type_name -> livekit.RoomParticipantIdentity
0, // 4: livekit.RoomService.CreateRoom:input_type -> livekit.CreateRoomRequest
1, // 5: livekit.RoomService.ListRooms:input_type -> livekit.ListRoomsRequest
3, // 6: livekit.RoomService.DeleteRoom:input_type -> livekit.DeleteRoomRequest
5, // 7: livekit.RoomService.ListParticipants:input_type -> livekit.ListParticipantsRequest
7, // 8: livekit.RoomService.GetParticipant:input_type -> livekit.RoomParticipantIdentity
7, // 9: livekit.RoomService.RemoveParticipant:input_type -> livekit.RoomParticipantIdentity
9, // 10: livekit.RoomService.MutePublishedTrack:input_type -> livekit.MuteRoomTrackRequest
11, // 11: livekit.RoomService.UpdateParticipantMetadata:input_type -> livekit.UpdateParticipantMetadataRequest
12, // 12: livekit.RoomService.CreateRoom:output_type -> livekit.Room
2, // 13: livekit.RoomService.ListRooms:output_type -> livekit.ListRoomsResponse
4, // 14: livekit.RoomService.DeleteRoom:output_type -> livekit.DeleteRoomResponse
6, // 15: livekit.RoomService.ListParticipants:output_type -> livekit.ListParticipantsResponse
13, // 16: livekit.RoomService.GetParticipant:output_type -> livekit.ParticipantInfo
8, // 17: livekit.RoomService.RemoveParticipant:output_type -> livekit.RemoveParticipantResponse
10, // 18: livekit.RoomService.MutePublishedTrack:output_type -> livekit.MuteRoomTrackResponse
13, // 19: livekit.RoomService.UpdateParticipantMetadata:output_type -> livekit.ParticipantInfo
12, // [12:20] is the sub-list for method output_type
4, // [4:12] is the sub-list for method input_type
4, // [4:4] is the sub-list for extension type_name
4, // [4:4] is the sub-list for extension extendee
0, // [0:4] is the sub-list for field type_name
}
func init() { file_room_proto_init() }
@@ -857,6 +930,18 @@ func file_room_proto_init() {
return nil
}
}
file_room_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdateParticipantMetadataRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
@@ -864,7 +949,7 @@ func file_room_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_room_proto_rawDesc,
NumEnums: 0,
NumMessages: 11,
NumMessages: 12,
NumExtensions: 0,
NumServices: 1,
},

View File

@@ -60,6 +60,9 @@ type RoomService interface {
// mute/unmute a participant, requires RoomAdmin
MutePublishedTrack(context.Context, *MuteRoomTrackRequest) (*MuteRoomTrackResponse, error)
// update participant metadata
UpdateParticipantMetadata(context.Context, *UpdateParticipantMetadataRequest) (*ParticipantInfo, error)
}
// ===========================
@@ -68,7 +71,7 @@ type RoomService interface {
type roomServiceProtobufClient struct {
client HTTPClient
urls [7]string
urls [8]string
interceptor twirp.Interceptor
opts twirp.ClientOptions
}
@@ -88,7 +91,7 @@ func NewRoomServiceProtobufClient(baseURL string, client HTTPClient, opts ...twi
// Build method URLs: <baseURL>[<prefix>]/<package>.<Service>/<Method>
serviceURL := sanitizeBaseURL(baseURL)
serviceURL += baseServicePath(clientOpts.PathPrefix(), "livekit", "RoomService")
urls := [7]string{
urls := [8]string{
serviceURL + "CreateRoom",
serviceURL + "ListRooms",
serviceURL + "DeleteRoom",
@@ -96,6 +99,7 @@ func NewRoomServiceProtobufClient(baseURL string, client HTTPClient, opts ...twi
serviceURL + "GetParticipant",
serviceURL + "RemoveParticipant",
serviceURL + "MutePublishedTrack",
serviceURL + "UpdateParticipantMetadata",
}
return &roomServiceProtobufClient{
@@ -428,13 +432,59 @@ func (c *roomServiceProtobufClient) callMutePublishedTrack(ctx context.Context,
return out, nil
}
func (c *roomServiceProtobufClient) UpdateParticipantMetadata(ctx context.Context, in *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
ctx = ctxsetters.WithPackageName(ctx, "livekit")
ctx = ctxsetters.WithServiceName(ctx, "RoomService")
ctx = ctxsetters.WithMethodName(ctx, "UpdateParticipantMetadata")
caller := c.callUpdateParticipantMetadata
if c.interceptor != nil {
caller = func(ctx context.Context, req *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
resp, err := c.interceptor(
func(ctx context.Context, req interface{}) (interface{}, error) {
typedReq, ok := req.(*UpdateParticipantMetadataRequest)
if !ok {
return nil, twirp.InternalError("failed type assertion req.(*UpdateParticipantMetadataRequest) when calling interceptor")
}
return c.callUpdateParticipantMetadata(ctx, typedReq)
},
)(ctx, req)
if resp != nil {
typedResp, ok := resp.(*ParticipantInfo)
if !ok {
return nil, twirp.InternalError("failed type assertion resp.(*ParticipantInfo) when calling interceptor")
}
return typedResp, err
}
return nil, err
}
}
return caller(ctx, in)
}
func (c *roomServiceProtobufClient) callUpdateParticipantMetadata(ctx context.Context, in *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
out := new(ParticipantInfo)
ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[7], in, out)
if err != nil {
twerr, ok := err.(twirp.Error)
if !ok {
twerr = twirp.InternalErrorWith(err)
}
callClientError(ctx, c.opts.Hooks, twerr)
return nil, err
}
callClientResponseReceived(ctx, c.opts.Hooks)
return out, nil
}
// =======================
// RoomService JSON Client
// =======================
type roomServiceJSONClient struct {
client HTTPClient
urls [7]string
urls [8]string
interceptor twirp.Interceptor
opts twirp.ClientOptions
}
@@ -454,7 +504,7 @@ func NewRoomServiceJSONClient(baseURL string, client HTTPClient, opts ...twirp.C
// Build method URLs: <baseURL>[<prefix>]/<package>.<Service>/<Method>
serviceURL := sanitizeBaseURL(baseURL)
serviceURL += baseServicePath(clientOpts.PathPrefix(), "livekit", "RoomService")
urls := [7]string{
urls := [8]string{
serviceURL + "CreateRoom",
serviceURL + "ListRooms",
serviceURL + "DeleteRoom",
@@ -462,6 +512,7 @@ func NewRoomServiceJSONClient(baseURL string, client HTTPClient, opts ...twirp.C
serviceURL + "GetParticipant",
serviceURL + "RemoveParticipant",
serviceURL + "MutePublishedTrack",
serviceURL + "UpdateParticipantMetadata",
}
return &roomServiceJSONClient{
@@ -794,6 +845,52 @@ func (c *roomServiceJSONClient) callMutePublishedTrack(ctx context.Context, in *
return out, nil
}
func (c *roomServiceJSONClient) UpdateParticipantMetadata(ctx context.Context, in *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
ctx = ctxsetters.WithPackageName(ctx, "livekit")
ctx = ctxsetters.WithServiceName(ctx, "RoomService")
ctx = ctxsetters.WithMethodName(ctx, "UpdateParticipantMetadata")
caller := c.callUpdateParticipantMetadata
if c.interceptor != nil {
caller = func(ctx context.Context, req *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
resp, err := c.interceptor(
func(ctx context.Context, req interface{}) (interface{}, error) {
typedReq, ok := req.(*UpdateParticipantMetadataRequest)
if !ok {
return nil, twirp.InternalError("failed type assertion req.(*UpdateParticipantMetadataRequest) when calling interceptor")
}
return c.callUpdateParticipantMetadata(ctx, typedReq)
},
)(ctx, req)
if resp != nil {
typedResp, ok := resp.(*ParticipantInfo)
if !ok {
return nil, twirp.InternalError("failed type assertion resp.(*ParticipantInfo) when calling interceptor")
}
return typedResp, err
}
return nil, err
}
}
return caller(ctx, in)
}
func (c *roomServiceJSONClient) callUpdateParticipantMetadata(ctx context.Context, in *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
out := new(ParticipantInfo)
ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[7], in, out)
if err != nil {
twerr, ok := err.(twirp.Error)
if !ok {
twerr = twirp.InternalErrorWith(err)
}
callClientError(ctx, c.opts.Hooks, twerr)
return nil, err
}
callClientResponseReceived(ctx, c.opts.Hooks)
return out, nil
}
// ==========================
// RoomService Server Handler
// ==========================
@@ -899,6 +996,9 @@ func (s *roomServiceServer) ServeHTTP(resp http.ResponseWriter, req *http.Reques
case "MutePublishedTrack":
s.serveMutePublishedTrack(ctx, resp, req)
return
case "UpdateParticipantMetadata":
s.serveUpdateParticipantMetadata(ctx, resp, req)
return
default:
msg := fmt.Sprintf("no handler for path %q", req.URL.Path)
s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path))
@@ -2131,6 +2231,181 @@ func (s *roomServiceServer) serveMutePublishedTrackProtobuf(ctx context.Context,
callResponseSent(ctx, s.hooks)
}
func (s *roomServiceServer) serveUpdateParticipantMetadata(ctx context.Context, resp http.ResponseWriter, req *http.Request) {
header := req.Header.Get("Content-Type")
i := strings.Index(header, ";")
if i == -1 {
i = len(header)
}
switch strings.TrimSpace(strings.ToLower(header[:i])) {
case "application/json":
s.serveUpdateParticipantMetadataJSON(ctx, resp, req)
case "application/protobuf":
s.serveUpdateParticipantMetadataProtobuf(ctx, resp, req)
default:
msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type"))
twerr := badRouteError(msg, req.Method, req.URL.Path)
s.writeError(ctx, resp, twerr)
}
}
func (s *roomServiceServer) serveUpdateParticipantMetadataJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) {
var err error
ctx = ctxsetters.WithMethodName(ctx, "UpdateParticipantMetadata")
ctx, err = callRequestRouted(ctx, s.hooks)
if err != nil {
s.writeError(ctx, resp, err)
return
}
reqContent := new(UpdateParticipantMetadataRequest)
unmarshaler := jsonpb.Unmarshaler{AllowUnknownFields: true}
if err = unmarshaler.Unmarshal(req.Body, reqContent); err != nil {
s.writeError(ctx, resp, malformedRequestError("the json request could not be decoded"))
return
}
handler := s.RoomService.UpdateParticipantMetadata
if s.interceptor != nil {
handler = func(ctx context.Context, req *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
resp, err := s.interceptor(
func(ctx context.Context, req interface{}) (interface{}, error) {
typedReq, ok := req.(*UpdateParticipantMetadataRequest)
if !ok {
return nil, twirp.InternalError("failed type assertion req.(*UpdateParticipantMetadataRequest) when calling interceptor")
}
return s.RoomService.UpdateParticipantMetadata(ctx, typedReq)
},
)(ctx, req)
if resp != nil {
typedResp, ok := resp.(*ParticipantInfo)
if !ok {
return nil, twirp.InternalError("failed type assertion resp.(*ParticipantInfo) when calling interceptor")
}
return typedResp, err
}
return nil, err
}
}
// Call service method
var respContent *ParticipantInfo
func() {
defer ensurePanicResponses(ctx, resp, s.hooks)
respContent, err = handler(ctx, reqContent)
}()
if err != nil {
s.writeError(ctx, resp, err)
return
}
if respContent == nil {
s.writeError(ctx, resp, twirp.InternalError("received a nil *ParticipantInfo and nil error while calling UpdateParticipantMetadata. nil responses are not supported"))
return
}
ctx = callResponsePrepared(ctx, s.hooks)
var buf bytes.Buffer
marshaler := &jsonpb.Marshaler{OrigName: true, EmitDefaults: !s.jsonSkipDefaults}
if err = marshaler.Marshal(&buf, respContent); err != nil {
s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response"))
return
}
ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK)
respBytes := buf.Bytes()
resp.Header().Set("Content-Type", "application/json")
resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes)))
resp.WriteHeader(http.StatusOK)
if n, err := resp.Write(respBytes); err != nil {
msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error())
twerr := twirp.NewError(twirp.Unknown, msg)
ctx = callError(ctx, s.hooks, twerr)
}
callResponseSent(ctx, s.hooks)
}
func (s *roomServiceServer) serveUpdateParticipantMetadataProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) {
var err error
ctx = ctxsetters.WithMethodName(ctx, "UpdateParticipantMetadata")
ctx, err = callRequestRouted(ctx, s.hooks)
if err != nil {
s.writeError(ctx, resp, err)
return
}
buf, err := ioutil.ReadAll(req.Body)
if err != nil {
s.writeError(ctx, resp, wrapInternal(err, "failed to read request body"))
return
}
reqContent := new(UpdateParticipantMetadataRequest)
if err = proto.Unmarshal(buf, reqContent); err != nil {
s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded"))
return
}
handler := s.RoomService.UpdateParticipantMetadata
if s.interceptor != nil {
handler = func(ctx context.Context, req *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
resp, err := s.interceptor(
func(ctx context.Context, req interface{}) (interface{}, error) {
typedReq, ok := req.(*UpdateParticipantMetadataRequest)
if !ok {
return nil, twirp.InternalError("failed type assertion req.(*UpdateParticipantMetadataRequest) when calling interceptor")
}
return s.RoomService.UpdateParticipantMetadata(ctx, typedReq)
},
)(ctx, req)
if resp != nil {
typedResp, ok := resp.(*ParticipantInfo)
if !ok {
return nil, twirp.InternalError("failed type assertion resp.(*ParticipantInfo) when calling interceptor")
}
return typedResp, err
}
return nil, err
}
}
// Call service method
var respContent *ParticipantInfo
func() {
defer ensurePanicResponses(ctx, resp, s.hooks)
respContent, err = handler(ctx, reqContent)
}()
if err != nil {
s.writeError(ctx, resp, err)
return
}
if respContent == nil {
s.writeError(ctx, resp, twirp.InternalError("received a nil *ParticipantInfo and nil error while calling UpdateParticipantMetadata. nil responses are not supported"))
return
}
ctx = callResponsePrepared(ctx, s.hooks)
respBytes, err := proto.Marshal(respContent)
if err != nil {
s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response"))
return
}
ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK)
resp.Header().Set("Content-Type", "application/protobuf")
resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes)))
resp.WriteHeader(http.StatusOK)
if n, err := resp.Write(respBytes); err != nil {
msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error())
twerr := twirp.NewError(twirp.Unknown, msg)
ctx = callError(ctx, s.hooks, twerr)
}
callResponseSent(ctx, s.hooks)
}
func (s *roomServiceServer) ServiceDescriptor() ([]byte, int) {
return twirpFileDescriptor0, 0
}
@@ -2693,40 +2968,43 @@ func callClientError(ctx context.Context, h *twirp.ClientHooks, err twirp.Error)
}
var twirpFileDescriptor0 = []byte{
// 549 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdf, 0x6f, 0x12, 0x41,
0x10, 0x0e, 0xb6, 0xb4, 0x30, 0x14, 0x2d, 0x13, 0x0c, 0xd7, 0x23, 0x1a, 0x3c, 0x1f, 0xc4, 0x87,
0x42, 0xc4, 0x07, 0x7d, 0xf0, 0xc5, 0xaa, 0x31, 0x24, 0x35, 0x69, 0x8e, 0x26, 0xfe, 0x78, 0x21,
0x07, 0x37, 0xda, 0x4d, 0xd9, 0x5b, 0xbc, 0xdb, 0x23, 0xe5, 0xbf, 0xf0, 0xcf, 0xf0, 0xcf, 0x34,
0xbb, 0x7b, 0x1c, 0x4b, 0x39, 0x88, 0x4f, 0xdc, 0xce, 0x7c, 0x33, 0xdf, 0x37, 0xb3, 0xdf, 0x02,
0x10, 0x0b, 0xc1, 0x7b, 0xf3, 0x58, 0x48, 0x81, 0xc7, 0x33, 0xb6, 0xa0, 0x5b, 0x26, 0xdd, 0x1a,
0x17, 0x21, 0xcd, 0x4c, 0xd4, 0xfb, 0x53, 0x82, 0xc6, 0x87, 0x98, 0x02, 0x49, 0xbe, 0x10, 0xdc,
0xa7, 0xdf, 0x29, 0x25, 0x12, 0x11, 0x0e, 0xa3, 0x80, 0x93, 0x53, 0xea, 0x94, 0xba, 0x55, 0x5f,
0x7f, 0xe3, 0x73, 0xa8, 0x13, 0x9f, 0xcb, 0xe5, 0x58, 0x32, 0x4e, 0x22, 0x95, 0xce, 0x83, 0x4e,
0xa9, 0x5b, 0xf7, 0x4f, 0x74, 0xf0, 0xda, 0xc4, 0xf0, 0x25, 0x9c, 0xf2, 0xe0, 0x6e, 0x3c, 0x0f,
0x62, 0xc9, 0xa6, 0x6c, 0x1e, 0x44, 0x32, 0x71, 0x0e, 0x34, 0xee, 0x11, 0x0f, 0xee, 0xae, 0xac,
0x30, 0xb6, 0xe0, 0x38, 0x12, 0x21, 0x8d, 0x59, 0xe8, 0x1c, 0x6a, 0x9a, 0x23, 0x75, 0x1c, 0x86,
0x1e, 0xc2, 0xe9, 0x25, 0x4b, 0xa4, 0xd2, 0x93, 0x64, 0x82, 0xbc, 0xb7, 0xd0, 0xb0, 0x62, 0xc9,
0x5c, 0x44, 0x89, 0x52, 0x54, 0x56, 0xf3, 0x25, 0x4e, 0xa9, 0x73, 0xd0, 0xad, 0x0d, 0xea, 0xbd,
0x6c, 0xc2, 0x9e, 0x1e, 0xc5, 0xe4, 0xbc, 0x17, 0xd0, 0xf8, 0x48, 0x33, 0xda, 0x9a, 0x4f, 0x65,
0x57, 0xf3, 0xa9, 0x6f, 0xaf, 0x09, 0x68, 0x03, 0x0d, 0x87, 0x77, 0x0e, 0x2d, 0x45, 0x6c, 0x2b,
0xdf, 0xd7, 0xe4, 0x1b, 0x38, 0xdb, 0xf0, 0x4c, 0xee, 0x3b, 0x38, 0xd9, 0xd8, 0x8b, 0x51, 0xed,
0xe4, 0xaa, 0xad, 0xa2, 0x61, 0xf4, 0x53, 0xf8, 0x1b, 0x68, 0x6f, 0x08, 0x2d, 0x25, 0xcc, 0x06,
0x85, 0x14, 0x49, 0x26, 0x97, 0x45, 0x42, 0xd0, 0x85, 0x0a, 0xcb, 0xf2, 0xfa, 0xa2, 0xaa, 0x7e,
0x7e, 0xf6, 0xda, 0x70, 0xe6, 0x13, 0x17, 0x0b, 0xb2, 0x9a, 0xe5, 0x03, 0x2f, 0xa1, 0xf9, 0x25,
0x35, 0x4b, 0xb8, 0x8e, 0x83, 0xe9, 0xed, 0x9e, 0x69, 0xf7, 0x91, 0x60, 0x1b, 0xaa, 0x52, 0xd5,
0x8f, 0x13, 0x16, 0x6a, 0x0b, 0x54, 0xfd, 0x8a, 0x0e, 0x8c, 0x58, 0x88, 0x4d, 0x28, 0xf3, 0x54,
0x92, 0xb9, 0xf9, 0x8a, 0x6f, 0x0e, 0xde, 0x7b, 0x78, 0x7c, 0x8f, 0x3a, 0xdb, 0x5c, 0x17, 0xca,
0xba, 0x54, 0x93, 0xd7, 0x06, 0x98, 0xaf, 0x4c, 0xc3, 0xf4, 0xb2, 0x0c, 0x60, 0xf0, 0xf7, 0x10,
0x6a, 0xaa, 0x7e, 0x44, 0xf1, 0x82, 0x4d, 0x09, 0xdf, 0x00, 0xac, 0xdd, 0x8d, 0x6e, 0x5e, 0xb8,
0x65, 0x79, 0x77, 0xd3, 0x3d, 0x78, 0x01, 0xd5, 0xdc, 0x70, 0x78, 0x96, 0xe7, 0xee, 0x1b, 0xd3,
0x75, 0x8b, 0x52, 0x99, 0xec, 0x4f, 0x00, 0x6b, 0x47, 0x59, 0xe4, 0x5b, 0x7e, 0x74, 0xdb, 0x85,
0xb9, 0xac, 0xcd, 0x57, 0xf3, 0x1e, 0x36, 0x1e, 0x4f, 0x67, 0x83, 0xb6, 0xc0, 0x9d, 0xee, 0xb3,
0x3d, 0x88, 0xac, 0xf1, 0x25, 0x3c, 0xfc, 0x4c, 0x76, 0xca, 0x6a, 0xbb, 0xc3, 0x6b, 0xee, 0x4e,
0xbb, 0xe2, 0x77, 0x68, 0x6c, 0xb9, 0xea, 0x3f, 0x1a, 0x7a, 0x6b, 0xc4, 0x2e, 0x4f, 0xe2, 0x08,
0x50, 0x19, 0xe3, 0x2a, 0x9d, 0xcc, 0x58, 0x72, 0x43, 0xa1, 0xbe, 0x76, 0x7c, 0x92, 0x57, 0x16,
0x19, 0xd6, 0x7d, 0xba, 0x2b, 0x6d, 0x9a, 0x5e, 0xbc, 0xfa, 0xd1, 0xff, 0xc5, 0xe4, 0x4d, 0x3a,
0xe9, 0x4d, 0x05, 0xef, 0x67, 0xd8, 0xd5, 0xef, 0x79, 0x42, 0xf1, 0x82, 0xe2, 0xbe, 0xfe, 0x93,
0x5c, 0x05, 0x27, 0x47, 0xfa, 0xf8, 0xfa, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x99, 0x66, 0x2b,
0xf4, 0x57, 0x05, 0x00, 0x00,
// 604 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0x4d, 0x6f, 0xd3, 0x40,
0x10, 0x55, 0x68, 0xd3, 0x36, 0x93, 0x16, 0x9a, 0x55, 0x51, 0x5d, 0x57, 0x20, 0x63, 0x0e, 0xa4,
0x87, 0x26, 0x22, 0x1c, 0xe8, 0x81, 0x0b, 0x05, 0x84, 0x22, 0xb5, 0x52, 0xe5, 0x14, 0xf1, 0x71,
0x09, 0x9b, 0x78, 0x68, 0x57, 0xcd, 0x7a, 0x8d, 0xbd, 0x8e, 0x92, 0xbf, 0xc0, 0x89, 0x9f, 0x8c,
0x76, 0xbd, 0x76, 0xec, 0xc6, 0x49, 0x39, 0xc5, 0x33, 0xf3, 0xe6, 0xe3, 0xcd, 0xce, 0x53, 0x00,
0x22, 0x21, 0x78, 0x27, 0x8c, 0x84, 0x14, 0x64, 0x7b, 0xc2, 0xa6, 0x78, 0xc7, 0xa4, 0xdd, 0xe4,
0xc2, 0xc7, 0x49, 0xea, 0x75, 0xff, 0xd6, 0xa0, 0xf5, 0x21, 0x42, 0x2a, 0xd1, 0x13, 0x82, 0x7b,
0xf8, 0x3b, 0xc1, 0x58, 0x12, 0x02, 0x9b, 0x01, 0xe5, 0x68, 0xd5, 0x9c, 0x5a, 0xbb, 0xe1, 0xe9,
0x6f, 0xf2, 0x12, 0xf6, 0x90, 0x87, 0x72, 0x3e, 0x94, 0x8c, 0xa3, 0x48, 0xa4, 0xf5, 0xc8, 0xa9,
0xb5, 0xf7, 0xbc, 0x5d, 0xed, 0xbc, 0x4e, 0x7d, 0xe4, 0x04, 0xf6, 0x39, 0x9d, 0x0d, 0x43, 0x1a,
0x49, 0x36, 0x66, 0x21, 0x0d, 0x64, 0x6c, 0x6d, 0x68, 0xdc, 0x13, 0x4e, 0x67, 0x57, 0x05, 0x37,
0x39, 0x84, 0xed, 0x40, 0xf8, 0x38, 0x64, 0xbe, 0xb5, 0xa9, 0xdb, 0x6c, 0x29, 0xb3, 0xef, 0xbb,
0x04, 0xf6, 0x2f, 0x58, 0x2c, 0xd5, 0x3c, 0xb1, 0x19, 0xc8, 0x3d, 0x83, 0x56, 0xc1, 0x17, 0x87,
0x22, 0x88, 0xd5, 0x44, 0x75, 0xc5, 0x2f, 0xb6, 0x6a, 0xce, 0x46, 0xbb, 0xd9, 0xdb, 0xeb, 0x18,
0x86, 0x1d, 0x4d, 0x25, 0x8d, 0xb9, 0xaf, 0xa0, 0xf5, 0x11, 0x27, 0xb8, 0xc4, 0x4f, 0x45, 0x33,
0x7e, 0xea, 0xdb, 0x3d, 0x00, 0x52, 0x04, 0xa6, 0x3d, 0xdc, 0x53, 0x38, 0x54, 0x8d, 0x8b, 0x93,
0xaf, 0x2b, 0xf2, 0x0d, 0xac, 0x65, 0xb8, 0x19, 0xf7, 0x1d, 0xec, 0x96, 0xf6, 0x92, 0x4e, 0x6d,
0xe5, 0x53, 0x17, 0x92, 0xfa, 0xc1, 0x2f, 0xe1, 0x95, 0xd0, 0x6e, 0x1f, 0x0e, 0xd5, 0x60, 0x45,
0x90, 0x8f, 0x81, 0x64, 0x72, 0x5e, 0x35, 0x08, 0xb1, 0x61, 0x87, 0x99, 0xb8, 0x7e, 0xa8, 0x86,
0x97, 0xdb, 0xee, 0x31, 0x1c, 0x79, 0xc8, 0xc5, 0x14, 0x0b, 0xc5, 0x72, 0xc2, 0x73, 0x38, 0xb8,
0x4c, 0xd2, 0x25, 0x5c, 0x47, 0x74, 0x7c, 0xb7, 0x86, 0xed, 0xba, 0x26, 0xe4, 0x18, 0x1a, 0x52,
0xe5, 0x0f, 0x63, 0xe6, 0xeb, 0x13, 0x68, 0x78, 0x3b, 0xda, 0x31, 0x60, 0x3e, 0x39, 0x80, 0x3a,
0x4f, 0x24, 0xa6, 0x2f, 0xbf, 0xe3, 0xa5, 0x86, 0xfb, 0x1e, 0x9e, 0xde, 0x6b, 0x6d, 0x36, 0xd7,
0x86, 0xba, 0x4e, 0xd5, 0xcd, 0x9b, 0x3d, 0x92, 0xaf, 0x4c, 0xc3, 0xf4, 0xb2, 0x52, 0x80, 0x3b,
0x03, 0xe7, 0x4b, 0xe8, 0x53, 0x59, 0xa4, 0x76, 0x89, 0x92, 0xfa, 0x54, 0xd2, 0x8c, 0xc9, 0x19,
0x6c, 0x49, 0x1a, 0xdd, 0xa0, 0x34, 0xe5, 0x9c, 0xd2, 0xdd, 0x54, 0x2c, 0xd8, 0x33, 0x78, 0xc5,
0x97, 0x9b, 0x62, 0x19, 0xdf, 0xcc, 0xee, 0xfd, 0xa9, 0x43, 0x53, 0xe5, 0x0f, 0x30, 0x9a, 0xb2,
0x31, 0x92, 0xb7, 0x00, 0x0b, 0x5d, 0x11, 0x3b, 0xef, 0xb1, 0x24, 0x36, 0xbb, 0x7c, 0xb7, 0xe4,
0x1c, 0x1a, 0xf9, 0xa9, 0x93, 0xa3, 0x3c, 0x76, 0x5f, 0x12, 0xb6, 0x5d, 0x15, 0x32, 0x0b, 0xfb,
0x04, 0xb0, 0xb8, 0xe5, 0x42, 0xf3, 0x25, 0x25, 0xd8, 0xc7, 0x95, 0x31, 0x53, 0xe6, 0x6b, 0xaa,
0xc4, 0x92, 0x6c, 0x9d, 0x52, 0xdb, 0x0a, 0x5d, 0xd8, 0x2f, 0xd6, 0x20, 0x4c, 0xe1, 0x0b, 0x78,
0xfc, 0x19, 0x8b, 0x21, 0xf2, 0xe0, 0x23, 0xd8, 0x2b, 0x85, 0x42, 0xbe, 0x43, 0x6b, 0xe9, 0x9e,
0xff, 0xa3, 0xa0, 0xbb, 0x40, 0xac, 0x52, 0x03, 0x19, 0x00, 0x51, 0x27, 0x79, 0x95, 0x8c, 0x26,
0x2c, 0xbe, 0x45, 0x5f, 0x1f, 0x1c, 0x79, 0x96, 0x67, 0x56, 0x49, 0xc5, 0x7e, 0xbe, 0x2a, 0x6c,
0x8a, 0xfe, 0x84, 0xa3, 0x95, 0x47, 0x4a, 0x4e, 0xf2, 0xe4, 0x87, 0x0e, 0x79, 0xf5, 0x46, 0xce,
0x5f, 0xff, 0xe8, 0xde, 0x30, 0x79, 0x9b, 0x8c, 0x3a, 0x63, 0xc1, 0xbb, 0x06, 0x95, 0xfd, 0x9e,
0xc6, 0x18, 0x4d, 0x31, 0xea, 0xea, 0x3f, 0x80, 0xcc, 0x39, 0xda, 0xd2, 0xe6, 0x9b, 0x7f, 0x01,
0x00, 0x00, 0xff, 0xff, 0xa1, 0x4e, 0xfb, 0xa7, 0x33, 0x06, 0x00, 0x00,
}

View File

@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc v3.15.5
// protoc v3.15.6
// source: rtc.proto
package livekit
@@ -247,7 +247,7 @@ type SignalRequest_AddTrack struct {
}
type SignalRequest_Mute struct {
// mute the participant's own tracks
// mute the participant's published tracks
Mute *MuteTrackRequest `protobuf:"bytes,5,opt,name=mute,proto3,oneof"`
}
@@ -999,7 +999,6 @@ type UpdateSubscription struct {
TrackSids []string `protobuf:"bytes,1,rep,name=track_sids,json=trackSids,proto3" json:"track_sids,omitempty"`
Subscribe bool `protobuf:"varint,2,opt,name=subscribe,proto3" json:"subscribe,omitempty"`
Mute bool `protobuf:"varint,3,opt,name=mute,proto3" json:"mute,omitempty"`
Quality VideoQuality `protobuf:"varint,4,opt,name=quality,proto3,enum=livekit.VideoQuality" json:"quality,omitempty"`
}
@@ -1049,13 +1048,6 @@ func (x *UpdateSubscription) GetSubscribe() bool {
return false
}
func (x *UpdateSubscription) GetMute() bool {
if x != nil {
return x.Mute
}
return false
}
func (x *UpdateSubscription) GetQuality() VideoQuality {
if x != nil {
return x.Quality
@@ -1306,39 +1298,38 @@ var file_rtc_proto_rawDesc = []byte{
0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c,
0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a,
0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61,
0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a,
0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
0x52, 0x09, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73,
0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x75, 0x74,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6d, 0x75, 0x74, 0x65, 0x12, 0x2f, 0x0a,
0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15,
0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75,
0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x79,
0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x74,
0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x73,
0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, 0x61, 0x63, 0x6b,
0x53, 0x69, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01,
0x28, 0x08, 0x52, 0x04, 0x6d, 0x75, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x71, 0x75, 0x61, 0x6c,
0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65,
0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79,
0x52, 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x5b, 0x0a, 0x09, 0x49, 0x43, 0x45,
0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01,
0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73,
0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73,
0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e,
0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64,
0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2a, 0x2d, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c,
0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53,
0x48, 0x45, 0x52, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49,
0x42, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x0c, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75,
0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x00, 0x12, 0x0a,
0x0a, 0x06, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49,
0x47, 0x48, 0x10, 0x02, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b,
0x69, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x71, 0x75, 0x61,
0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76,
0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74,
0x79, 0x52, 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x79, 0x0a, 0x13, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x64, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x69, 0x64, 0x73,
0x12, 0x12, 0x0a, 0x04, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04,
0x6d, 0x75, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e,
0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x07, 0x71, 0x75,
0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x5b, 0x0a, 0x09, 0x49, 0x43, 0x45, 0x53, 0x65, 0x72, 0x76,
0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
0x52, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c,
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69,
0x61, 0x6c, 0x2a, 0x2d, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x54, 0x61, 0x72, 0x67,
0x65, 0x74, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x52, 0x10,
0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x52, 0x10,
0x01, 0x2a, 0x2d, 0x0a, 0x0c, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74,
0x79, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45,
0x44, 0x49, 0x55, 0x4d, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, 0x02,
0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c,
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2d, 0x73,
0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x76, 0x65,
0x6b, 0x69, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (