From c618f8c42f36dc177abc1be16dce8fb4234798a6 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 13 Nov 2020 12:31:01 -0800 Subject: [PATCH] client consumes provided track --- cmd/cli/client/client.go | 59 +++++++++- cmd/cli/client/trackwriter.go | 8 ++ cmd/cli/commands/rtc.go | 4 +- pkg/rtc/mediaengine.go | 4 +- pkg/rtc/peer.go | 4 +- pkg/rtc/receiver.go | 14 ++- pkg/rtc/track.go | 5 +- pkg/rtc/utils.go | 21 ++++ proto/livekit/model.pb.go | 214 +++++++++++++++++++++++++++++++--- proto/livekit/room.pb.go | 199 ++++++++----------------------- proto/livekit/room.twirp.go | 43 +++---- proto/model.proto | 14 +++ proto/room.proto | 10 +- 13 files changed, 388 insertions(+), 211 deletions(-) create mode 100644 pkg/rtc/utils.go diff --git a/cmd/cli/client/client.go b/cmd/cli/client/client.go index 5fe6b5b51..2a581f8f9 100644 --- a/cmd/cli/client/client.go +++ b/cmd/cli/client/client.go @@ -12,10 +12,12 @@ import ( "github.com/gorilla/websocket" "github.com/pion/randutil" "github.com/pion/webrtc/v3" + "github.com/pkg/errors" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" "github.com/livekit/livekit-server/pkg/logger" + "github.com/livekit/livekit-server/pkg/rtc" "github.com/livekit/livekit-server/pkg/service" "github.com/livekit/livekit-server/proto/livekit" ) @@ -30,6 +32,8 @@ type RTCClient struct { connected bool iceConnected bool paused bool + me *rtc.MediaEngine // optional, populated only when receiving tracks + receivers []*rtc.Receiver // pending actions to start after connected to peer pendingCandidates []*webrtc.ICECandidate @@ -81,7 +85,6 @@ func NewRTCClient(conn *websocket.Conn) (*RTCClient, error) { } c.ctx, c.cancel = context.WithCancel(context.Background()) - // TODO: set up callbacks peerConn.OnICECandidate(func(ic *webrtc.ICECandidate) { if ic == nil { return @@ -101,9 +104,19 @@ func NewRTCClient(conn *websocket.Conn) (*RTCClient, error) { } }) - peerConn.OnTrack(func(track *webrtc.Track, r *webrtc.RTPReceiver) { + peerConn.OnTrack(func(track *webrtc.Track, rtpReceiver *webrtc.RTPReceiver) { c.AppendLog("track received", "label", track.Label(), "id", track.ID()) - // TODO: set up track consumer to read + peerId, _ := rtc.UnpackPeerTrack(track.ID()) + tccExt := 0 + if c.me != nil { + tccExt = c.me.TCCExt + } + r := rtc.NewReceiver(c.ctx, peerId, rtpReceiver, rtc.ReceiverConfig{}, tccExt) + c.lock.Lock() + c.receivers = append(c.receivers, r) + r.Start() + go c.consumeReceiver(r) + c.lock.Unlock() }) peerConn.OnNegotiationNeeded(func() { @@ -214,7 +227,7 @@ func (c *RTCClient) Run() error { c.pendingCandidates = nil c.lock.Unlock() case *livekit.SignalResponse_Negotiate: - c.AppendLog("received negotate answer", + c.AppendLog("received negotiate", "type", msg.Negotiate.Type) desc := service.FromProtoSessionDescription(msg.Negotiate) if err := c.handleNegotiate(desc); err != nil { @@ -323,12 +336,19 @@ func (c *RTCClient) Negotiate() error { } func (c *RTCClient) handleNegotiate(desc webrtc.SessionDescription) error { - // always set remote description + // always set remote description for both offer and answer if err := c.PeerConn.SetRemoteDescription(desc); err != nil { return err } + // if we received an offer, we'd have to answer if desc.Type == webrtc.SDPTypeOffer { + // create media engine + c.me = &rtc.MediaEngine{} + if err := c.me.PopulateFromSDP(desc); err != nil { + return errors.Wrapf(err, "could not parse SDP") + } + answer, err := c.PeerConn.CreateAnswer(nil) if err != nil { return err @@ -419,3 +439,32 @@ func (c *RTCClient) logLoop() { } } } + +func (c *RTCClient) consumeReceiver(r *rtc.Receiver) { + lastUpdate := time.Time{} + peerId, trackId := rtc.UnpackPeerTrack(r.TrackId()) + numBytes := 0 + for { + select { + case packet, ok := <-r.RTPChan(): + if !ok { + // channel closed, we are done + return + } + numBytes += packet.MarshalSize() + if time.Now().Sub(lastUpdate) > 30*time.Second { + c.AppendLog("consumed from peer", + "track", trackId, "peer", peerId, + "size", numBytes) + numBytes = 0 + lastUpdate = time.Now() + } + case <-c.ctx.Done(): + return + } + + if c.ctx.Err() != nil { + return + } + } +} diff --git a/cmd/cli/client/trackwriter.go b/cmd/cli/client/trackwriter.go index 223798587..ee0573c31 100644 --- a/cmd/cli/client/trackwriter.go +++ b/cmd/cli/client/trackwriter.go @@ -15,6 +15,8 @@ import ( "github.com/livekit/livekit-server/pkg/logger" ) +// Writes a file to an RTP track. +// makes it easier to debug and create RTP streams type TrackWriter struct { ctx context.Context track *webrtc.Track @@ -72,6 +74,9 @@ func (w *TrackWriter) writeOgg() { // Keep track of last granule, the difference is the amount of samples in the buffer var lastGranule uint64 for { + if w.ctx.Err() != nil { + return + } pageData, pageHeader, err := w.ogg.ParseNextPage() if err == io.EOF { logger.GetLogger().Infow("all audio samples parsed and sent") @@ -103,6 +108,9 @@ func (w *TrackWriter) writeVP8() { // This isn't required since the video is timestamped, but we will such much higher loss if we send all at once. sleepTime := time.Millisecond * time.Duration((float32(w.ivfheader.TimebaseNumerator)/float32(w.ivfheader.TimebaseDenominator))*1000) for { + if w.ctx.Err() != nil { + return + } frame, _, err := w.ivf.ParseNextFrame() if err == io.EOF { logger.GetLogger().Infow("all video frames parsed and sent") diff --git a/cmd/cli/commands/rtc.go b/cmd/cli/commands/rtc.go index 7f91a1f5f..10f61a5a6 100644 --- a/cmd/cli/commands/rtc.go +++ b/cmd/cli/commands/rtc.go @@ -159,7 +159,7 @@ func handleAddMedia(rc *client.RTCClient, isAudio bool) error { mediaPath = ExpandUser(mediaPath) // TODO: see what the ID should be - err = rc.AddTrack(mediaPath, codecType, filepath.Base(mediaPath), "livekit") + err = rc.AddTrack(mediaPath, codecType, codecType.String(), filepath.Base(mediaPath)) if err != nil { return err } @@ -177,7 +177,7 @@ func handleAddMedia(rc *client.RTCClient, isAudio bool) error { audioPath := mediaPath[0:len(mediaPath)-len(videoExt)] + ".ogg" if _, err = os.Stat(audioPath); err == nil { - err = rc.AddTrack(audioPath, webrtc.RTPCodecTypeAudio, filepath.Base(audioPath), "livekit") + err = rc.AddTrack(audioPath, webrtc.RTPCodecTypeAudio, codecType.String(), filepath.Base(audioPath)) if err != nil { fmt.Printf("added audio track: %s\n", audioPath) } diff --git a/pkg/rtc/mediaengine.go b/pkg/rtc/mediaengine.go index b14350ff6..cf61cd02e 100644 --- a/pkg/rtc/mediaengine.go +++ b/pkg/rtc/mediaengine.go @@ -18,7 +18,7 @@ const ( type MediaEngine struct { webrtc.MediaEngine feedbackTypes []webrtc.RTCPFeedback - tCCExt int + TCCExt int } // PopulateFromSDP finds all codecs in sd and adds them to m, using the dynamic @@ -40,7 +40,7 @@ func (e *MediaEngine) PopulateFromSDP(sd webrtc.SessionDescription) error { for _, att := range md.Attributes { if att.Key == sdp.AttrKeyExtMap && strings.HasSuffix(att.Value, sdp.TransportCCURI) { - e.tCCExt, _ = strconv.Atoi(att.Value[:1]) + e.TCCExt, _ = strconv.Atoi(att.Value[:1]) break } } diff --git a/pkg/rtc/peer.go b/pkg/rtc/peer.go index 9ecb5d4c7..ed46e1959 100644 --- a/pkg/rtc/peer.go +++ b/pkg/rtc/peer.go @@ -98,7 +98,7 @@ func (p *WebRTCPeer) Answer(sdp webrtc.SessionDescription) (answer webrtc.Sessio // only set after answered p.conn.OnNegotiationNeeded(func() { - logger.GetLogger().Debugw("negotiation needed") + logger.GetLogger().Debugw("negotiation needed", "peerId", p.ID()) offer, err := p.conn.CreateOffer(nil) if err != nil { // TODO: log @@ -182,7 +182,7 @@ func (p *WebRTCPeer) onTrack(track *webrtc.Track, rtpReceiver *webrtc.RTPReceive logger.GetLogger().Debugw("track added", "peerId", p.ID(), "track", track.Label()) // create Receiver - receiver := NewReceiver(p.ctx, p.id, rtpReceiver, p.receiverConfig, p.mediaEngine) + receiver := NewReceiver(p.ctx, p.id, rtpReceiver, p.receiverConfig, p.mediaEngine.TCCExt) pt := NewPeerTrack(p.ctx, p.id, p.conn, track, receiver) p.lock.Lock() diff --git a/pkg/rtc/receiver.go b/pkg/rtc/receiver.go index 9d5608807..13b10e7e4 100644 --- a/pkg/rtc/receiver.go +++ b/pkg/rtc/receiver.go @@ -34,7 +34,7 @@ type Receiver struct { onCloseHandler func(r *Receiver) } -func NewReceiver(ctx context.Context, peerId string, rtpReceiver *webrtc.RTPReceiver, conf ReceiverConfig, me *MediaEngine) *Receiver { +func NewReceiver(ctx context.Context, peerId string, rtpReceiver *webrtc.RTPReceiver, conf ReceiverConfig, tccExt int) *Receiver { ctx, cancel := context.WithCancel(ctx) track := rtpReceiver.Track() return &Receiver{ @@ -47,12 +47,20 @@ func NewReceiver(ctx context.Context, peerId string, rtpReceiver *webrtc.RTPRece buffer: sfu.NewBuffer(track, sfu.BufferOptions{ BufferTime: conf.maxBufferTime, MaxBitRate: conf.maxBandwidth * 1000, - TCCExt: me.tCCExt, + TCCExt: tccExt, }), once: sync.Once{}, } } +func (r *Receiver) PeerId() string { + return r.peerId +} + +func (r *Receiver) TrackId() string { + return r.track.ID() +} + // starts reading RTP and push to buffer func (r *Receiver) Start() { r.once.Do(func() { @@ -69,7 +77,7 @@ func (r *Receiver) Close() { r.cancel() } -// reaturns channel to read rtp packets +// returns channel to read rtp packets func (r *Receiver) RTPChan() <-chan *rtp.Packet { return r.rtpChan } diff --git a/pkg/rtc/track.go b/pkg/rtc/track.go index ae95279b5..ab6e68616 100644 --- a/pkg/rtc/track.go +++ b/pkg/rtc/track.go @@ -58,8 +58,11 @@ func (t *PeerTrack) AddSubscriber(peer *WebRTCPeer) error { return ErrUnsupportedPayloadType } + // pack ID to identify all tracks + packedId := PackPeerTrack(t.peerId, t.track.ID()) + // use existing SSRC with simple forwarders. adaptive forwarders require unique SSRC per layer - outTrack, err := peer.conn.NewTrack(codecs[0].PayloadType, t.track.SSRC(), t.track.ID(), t.track.Label()) + outTrack, err := peer.conn.NewTrack(codecs[0].PayloadType, t.track.SSRC(), packedId, t.track.Label()) if err != nil { return err } diff --git a/pkg/rtc/utils.go b/pkg/rtc/utils.go new file mode 100644 index 000000000..252536490 --- /dev/null +++ b/pkg/rtc/utils.go @@ -0,0 +1,21 @@ +package rtc + +import ( + "strings" +) + +const ( + trackIdSeparator = "|" +) + +func UnpackPeerTrack(packed string) (peerId string, trackId string) { + parts := strings.Split(packed, trackIdSeparator) + if len(parts) > 1 { + return parts[0], packed[len(parts[0]):] + } + return "", packed +} + +func PackPeerTrack(peerId, trackId string) string { + return peerId + trackIdSeparator + trackId +} diff --git a/proto/livekit/model.pb.go b/proto/livekit/model.pb.go index e73474112..9c7a2b70e 100644 --- a/proto/livekit/model.pb.go +++ b/proto/livekit/model.pb.go @@ -230,6 +230,148 @@ func (x *Room) GetToken() string { return "" } +type RoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` + NodeIp string `protobuf:"bytes,2,opt,name=node_ip,json=nodeIp,proto3" json:"node_ip,omitempty"` + NodeRtcPort uint32 `protobuf:"varint,3,opt,name=node_rtc_port,json=nodeRtcPort,proto3" json:"node_rtc_port,omitempty"` + CreationTime int64 `protobuf:"varint,4,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"` + Token string `protobuf:"bytes,5,opt,name=token,proto3" json:"token,omitempty"` +} + +func (x *RoomInfo) Reset() { + *x = RoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoomInfo) ProtoMessage() {} + +func (x *RoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[3] + 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 RoomInfo.ProtoReflect.Descriptor instead. +func (*RoomInfo) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{3} +} + +func (x *RoomInfo) GetRoomId() string { + if x != nil { + return x.RoomId + } + return "" +} + +func (x *RoomInfo) GetNodeIp() string { + if x != nil { + return x.NodeIp + } + return "" +} + +func (x *RoomInfo) GetNodeRtcPort() uint32 { + if x != nil { + return x.NodeRtcPort + } + return 0 +} + +func (x *RoomInfo) GetCreationTime() int64 { + if x != nil { + return x.CreationTime + } + return 0 +} + +func (x *RoomInfo) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type PeerInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PeerId string `protobuf:"bytes,1,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"` + HasAudio bool `protobuf:"varint,2,opt,name=has_audio,json=hasAudio,proto3" json:"has_audio,omitempty"` + HasVideo bool `protobuf:"varint,3,opt,name=has_video,json=hasVideo,proto3" json:"has_video,omitempty"` +} + +func (x *PeerInfo) Reset() { + *x = PeerInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PeerInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PeerInfo) ProtoMessage() {} + +func (x *PeerInfo) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[4] + 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 PeerInfo.ProtoReflect.Descriptor instead. +func (*PeerInfo) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{4} +} + +func (x *PeerInfo) GetPeerId() string { + if x != nil { + return x.PeerId + } + return "" +} + +func (x *PeerInfo) GetHasAudio() bool { + if x != nil { + return x.HasAudio + } + return false +} + +func (x *PeerInfo) GetHasVideo() bool { + if x != nil { + return x.HasVideo + } + return false +} + type DataChannel struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -242,7 +384,7 @@ type DataChannel struct { func (x *DataChannel) Reset() { *x = DataChannel{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[3] + mi := &file_model_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -255,7 +397,7 @@ func (x *DataChannel) String() string { func (*DataChannel) ProtoMessage() {} func (x *DataChannel) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[3] + mi := &file_model_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -268,7 +410,7 @@ func (x *DataChannel) ProtoReflect() protoreflect.Message { // Deprecated: Use DataChannel.ProtoReflect.Descriptor instead. func (*DataChannel) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{3} + return file_model_proto_rawDescGZIP(), []int{5} } func (x *DataChannel) GetSessionId() string { @@ -311,15 +453,31 @@ var file_model_proto_rawDesc = []byte{ 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x46, 0x0a, 0x0b, 0x44, - 0x61, 0x74, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 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, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x9b, 0x01, 0x0a, 0x08, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x70, 0x12, 0x22, 0x0a, 0x0d, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x72, 0x74, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x52, 0x74, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5d, 0x0a, 0x08, 0x50, 0x65, 0x65, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x68, + 0x61, 0x73, 0x5f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x68, 0x61, 0x73, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x22, 0x46, 0x0a, 0x0b, 0x44, 0x61, 0x74, 0x61, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 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 ( @@ -334,12 +492,14 @@ func file_model_proto_rawDescGZIP() []byte { return file_model_proto_rawDescData } -var file_model_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_model_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_model_proto_goTypes = []interface{}{ (*Node)(nil), // 0: livekit.Node (*NodeStats)(nil), // 1: livekit.NodeStats (*Room)(nil), // 2: livekit.Room - (*DataChannel)(nil), // 3: livekit.DataChannel + (*RoomInfo)(nil), // 3: livekit.RoomInfo + (*PeerInfo)(nil), // 4: livekit.PeerInfo + (*DataChannel)(nil), // 5: livekit.DataChannel } var file_model_proto_depIdxs = []int32{ 1, // 0: livekit.Node.stats:type_name -> livekit.NodeStats @@ -393,6 +553,30 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PeerInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DataChannel); i { case 0: return &v.state @@ -411,7 +595,7 @@ func file_model_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_model_proto_rawDesc, NumEnums: 0, - NumMessages: 4, + NumMessages: 6, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/livekit/room.pb.go b/proto/livekit/room.pb.go index 457463ebd..ff085521a 100644 --- a/proto/livekit/room.pb.go +++ b/proto/livekit/room.pb.go @@ -136,85 +136,6 @@ func (x *GetRoomRequest) GetRoomId() string { return "" } -type RoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"` - NodeIp string `protobuf:"bytes,2,opt,name=node_ip,json=nodeIp,proto3" json:"node_ip,omitempty"` - NodeRtcPort uint32 `protobuf:"varint,3,opt,name=node_rtc_port,json=nodeRtcPort,proto3" json:"node_rtc_port,omitempty"` - CreationTime int64 `protobuf:"varint,4,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"` - Token string `protobuf:"bytes,5,opt,name=token,proto3" json:"token,omitempty"` -} - -func (x *RoomInfo) Reset() { - *x = RoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_room_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoomInfo) ProtoMessage() {} - -func (x *RoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_room_proto_msgTypes[2] - 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 RoomInfo.ProtoReflect.Descriptor instead. -func (*RoomInfo) Descriptor() ([]byte, []int) { - return file_room_proto_rawDescGZIP(), []int{2} -} - -func (x *RoomInfo) GetRoomId() string { - if x != nil { - return x.RoomId - } - return "" -} - -func (x *RoomInfo) GetNodeIp() string { - if x != nil { - return x.NodeIp - } - return "" -} - -func (x *RoomInfo) GetNodeRtcPort() uint32 { - if x != nil { - return x.NodeRtcPort - } - return 0 -} - -func (x *RoomInfo) GetCreationTime() int64 { - if x != nil { - return x.CreationTime - } - return 0 -} - -func (x *RoomInfo) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - type DeleteRoomRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -226,7 +147,7 @@ type DeleteRoomRequest struct { func (x *DeleteRoomRequest) Reset() { *x = DeleteRoomRequest{} if protoimpl.UnsafeEnabled { - mi := &file_room_proto_msgTypes[3] + mi := &file_room_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -239,7 +160,7 @@ func (x *DeleteRoomRequest) String() string { func (*DeleteRoomRequest) ProtoMessage() {} func (x *DeleteRoomRequest) ProtoReflect() protoreflect.Message { - mi := &file_room_proto_msgTypes[3] + mi := &file_room_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -252,7 +173,7 @@ func (x *DeleteRoomRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRoomRequest.ProtoReflect.Descriptor instead. func (*DeleteRoomRequest) Descriptor() ([]byte, []int) { - return file_room_proto_rawDescGZIP(), []int{3} + return file_room_proto_rawDescGZIP(), []int{2} } func (x *DeleteRoomRequest) GetRoomId() string { @@ -271,7 +192,7 @@ type DeleteRoomResponse struct { func (x *DeleteRoomResponse) Reset() { *x = DeleteRoomResponse{} if protoimpl.UnsafeEnabled { - mi := &file_room_proto_msgTypes[4] + mi := &file_room_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -284,7 +205,7 @@ func (x *DeleteRoomResponse) String() string { func (*DeleteRoomResponse) ProtoMessage() {} func (x *DeleteRoomResponse) ProtoReflect() protoreflect.Message { - mi := &file_room_proto_msgTypes[4] + mi := &file_room_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -297,55 +218,46 @@ func (x *DeleteRoomResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRoomResponse.ProtoReflect.Descriptor instead. func (*DeleteRoomResponse) Descriptor() ([]byte, []int) { - return file_room_proto_rawDescGZIP(), []int{4} + return file_room_proto_rawDescGZIP(), []int{3} } var File_room_proto protoreflect.FileDescriptor var file_room_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x6c, 0x69, - 0x76, 0x65, 0x6b, 0x69, 0x74, 0x22, 0x7c, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, - 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, - 0x6e, 0x74, 0x73, 0x22, 0x29, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x9b, - 0x01, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x72, - 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x70, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x70, 0x12, 0x22, 0x0a, - 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x74, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x52, 0x74, 0x63, 0x50, 0x6f, 0x72, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x2c, 0x0a, 0x11, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x32, 0xc8, 0x01, 0x0a, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x3b, 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, 0x11, 0x2e, 0x6c, 0x69, 0x76, - 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x35, 0x0a, - 0x07, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, - 0x69, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x11, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x6e, 0x66, 0x6f, 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, 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, + 0x76, 0x65, 0x6b, 0x69, 0x74, 0x1a, 0x0b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x7c, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0f, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, + 0x22, 0x29, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x11, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, + 0xc8, 0x01, 0x0a, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x3b, 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, 0x11, 0x2e, 0x6c, 0x69, 0x76, 0x65, + 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x35, 0x0a, 0x07, + 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, + 0x74, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x11, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x6e, 0x66, 0x6f, 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, 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 ( @@ -360,21 +272,21 @@ func file_room_proto_rawDescGZIP() []byte { return file_room_proto_rawDescData } -var file_room_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_room_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_room_proto_goTypes = []interface{}{ (*CreateRoomRequest)(nil), // 0: livekit.CreateRoomRequest (*GetRoomRequest)(nil), // 1: livekit.GetRoomRequest - (*RoomInfo)(nil), // 2: livekit.RoomInfo - (*DeleteRoomRequest)(nil), // 3: livekit.DeleteRoomRequest - (*DeleteRoomResponse)(nil), // 4: livekit.DeleteRoomResponse + (*DeleteRoomRequest)(nil), // 2: livekit.DeleteRoomRequest + (*DeleteRoomResponse)(nil), // 3: livekit.DeleteRoomResponse + (*RoomInfo)(nil), // 4: livekit.RoomInfo } var file_room_proto_depIdxs = []int32{ 0, // 0: livekit.RoomService.CreateRoom:input_type -> livekit.CreateRoomRequest 1, // 1: livekit.RoomService.GetRoom:input_type -> livekit.GetRoomRequest - 3, // 2: livekit.RoomService.DeleteRoom:input_type -> livekit.DeleteRoomRequest - 2, // 3: livekit.RoomService.CreateRoom:output_type -> livekit.RoomInfo - 2, // 4: livekit.RoomService.GetRoom:output_type -> livekit.RoomInfo - 4, // 5: livekit.RoomService.DeleteRoom:output_type -> livekit.DeleteRoomResponse + 2, // 2: livekit.RoomService.DeleteRoom:input_type -> livekit.DeleteRoomRequest + 4, // 3: livekit.RoomService.CreateRoom:output_type -> livekit.RoomInfo + 4, // 4: livekit.RoomService.GetRoom:output_type -> livekit.RoomInfo + 3, // 5: livekit.RoomService.DeleteRoom:output_type -> livekit.DeleteRoomResponse 3, // [3:6] is the sub-list for method output_type 0, // [0:3] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name @@ -387,6 +299,7 @@ func file_room_proto_init() { if File_room_proto != nil { return } + file_model_proto_init() if !protoimpl.UnsafeEnabled { file_room_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateRoomRequest); i { @@ -413,18 +326,6 @@ func file_room_proto_init() { } } file_room_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_room_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteRoomRequest); i { case 0: return &v.state @@ -436,7 +337,7 @@ func file_room_proto_init() { return nil } } - file_room_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_room_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteRoomResponse); i { case 0: return &v.state @@ -455,7 +356,7 @@ func file_room_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_room_proto_rawDesc, NumEnums: 0, - NumMessages: 5, + NumMessages: 4, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/livekit/room.twirp.go b/proto/livekit/room.twirp.go index 8f62eb13f..e66a5e385 100644 --- a/proto/livekit/room.twirp.go +++ b/proto/livekit/room.twirp.go @@ -1595,28 +1595,23 @@ func callClientError(ctx context.Context, h *twirp.ClientHooks, err twirp.Error) } var twirpFileDescriptor0 = []byte{ - // 360 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x4d, 0x6f, 0xda, 0x40, - 0x10, 0x95, 0x4b, 0xc1, 0x65, 0x80, 0xb6, 0xac, 0x90, 0xb0, 0xe8, 0x05, 0xb9, 0x17, 0x90, 0x5a, - 0xa3, 0x36, 0xca, 0x29, 0xb7, 0x7c, 0x28, 0xe2, 0x86, 0x9c, 0x9c, 0x72, 0xb1, 0x8c, 0x99, 0x24, - 0x2b, 0xb0, 0x67, 0xb3, 0x1e, 0x10, 0x91, 0xf2, 0x4f, 0xf2, 0x87, 0xf2, 0xb3, 0xa2, 0x5d, 0xcc, - 0x47, 0x04, 0x91, 0x38, 0x59, 0xf3, 0xde, 0xb3, 0xe7, 0xbd, 0x37, 0x06, 0xd0, 0x44, 0x69, 0xa0, - 0x34, 0x31, 0x09, 0x77, 0x26, 0x17, 0x38, 0x95, 0xec, 0xbf, 0x40, 0xf3, 0x42, 0x63, 0xcc, 0x18, - 0x12, 0xa5, 0x21, 0x3e, 0xcd, 0x31, 0x67, 0xd1, 0x06, 0xd7, 0x68, 0x23, 0x39, 0xf1, 0x9c, 0xae, - 0xd3, 0xab, 0x86, 0x15, 0x33, 0x0e, 0x27, 0xe2, 0x37, 0x34, 0x30, 0x55, 0xfc, 0x1c, 0xb1, 0x4c, - 0x91, 0xe6, 0xec, 0x7d, 0xe9, 0x3a, 0xbd, 0x46, 0x58, 0xb7, 0xe0, 0xed, 0x0a, 0x13, 0x7d, 0xf8, - 0x99, 0xc6, 0xcb, 0x48, 0xc5, 0x9a, 0x65, 0x22, 0x55, 0x9c, 0x71, 0xee, 0x95, 0xac, 0xee, 0x47, - 0x1a, 0x2f, 0x47, 0x3b, 0xb0, 0xdf, 0x87, 0xef, 0xd7, 0xc8, 0xc7, 0xac, 0xf6, 0x5f, 0x1d, 0xf8, - 0x66, 0x84, 0xc3, 0xec, 0x9e, 0x3e, 0x37, 0xd8, 0x06, 0x37, 0xa3, 0x09, 0x46, 0x52, 0x59, 0x6b, - 0xd5, 0xb0, 0x62, 0xc6, 0xa1, 0x12, 0x3e, 0x34, 0x2c, 0xa1, 0x39, 0x89, 0x14, 0x69, 0x2e, 0x1c, - 0xd5, 0x0c, 0x18, 0x72, 0x32, 0x22, 0xcd, 0x26, 0x5d, 0x62, 0xba, 0x90, 0x94, 0xd9, 0x80, 0xde, - 0xd7, 0xae, 0xd3, 0x2b, 0x85, 0xf5, 0x35, 0x68, 0x02, 0x8a, 0x16, 0x94, 0x99, 0xa6, 0x98, 0x79, - 0x65, 0xfb, 0xfd, 0xd5, 0xe0, 0xff, 0x81, 0xe6, 0x25, 0xce, 0xf0, 0xb8, 0x1a, 0xfd, 0x16, 0x88, - 0x5d, 0x75, 0xae, 0x28, 0xcb, 0xf1, 0xff, 0x9b, 0x03, 0x35, 0x03, 0xdc, 0xa0, 0x5e, 0xc8, 0x04, - 0xc5, 0x19, 0xc0, 0xf6, 0x34, 0xa2, 0x13, 0x14, 0x27, 0x0b, 0xf6, 0xee, 0xd5, 0x69, 0x6e, 0xb8, - 0x4d, 0x43, 0xa7, 0xe0, 0x16, 0xcd, 0x8a, 0xf6, 0x86, 0xfd, 0xd8, 0xf5, 0xa1, 0xd7, 0xae, 0x00, - 0xb6, 0xce, 0x76, 0x76, 0xee, 0x85, 0xeb, 0xfc, 0x3a, 0xc8, 0xad, 0xa2, 0x9c, 0xff, 0xbb, 0x1b, - 0x3c, 0x48, 0x7e, 0x9c, 0x8f, 0x83, 0x84, 0xd2, 0x41, 0x21, 0x5c, 0x3f, 0xff, 0xe6, 0xa8, 0x17, - 0xa8, 0x07, 0xf6, 0x4f, 0x5c, 0x83, 0xe3, 0x8a, 0x1d, 0x4f, 0xde, 0x03, 0x00, 0x00, 0xff, 0xff, - 0x88, 0x0b, 0xf0, 0x4d, 0xa6, 0x02, 0x00, 0x00, + // 288 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x4f, 0x4b, 0xc3, 0x40, + 0x10, 0xc5, 0x89, 0x42, 0x8b, 0x53, 0xab, 0x76, 0x11, 0x1a, 0xe2, 0xa5, 0xc4, 0x4b, 0x0b, 0x9a, + 0xa0, 0xe2, 0xc9, 0x9b, 0x7f, 0x90, 0xde, 0x24, 0x7a, 0xf2, 0x12, 0xd2, 0x64, 0xd4, 0xc5, 0x6c, + 0x26, 0x6e, 0x26, 0xa1, 0x82, 0x1f, 0xd0, 0x8f, 0x25, 0xf9, 0xd3, 0x36, 0xd2, 0x1e, 0x7a, 0x5a, + 0xe6, 0x37, 0x6f, 0x98, 0xf7, 0x66, 0x01, 0x34, 0x91, 0x72, 0x52, 0x4d, 0x4c, 0xa2, 0x1b, 0xcb, + 0x02, 0x3f, 0x25, 0x5b, 0x3d, 0x45, 0x11, 0xc6, 0x35, 0xb5, 0x7f, 0x60, 0x70, 0xa7, 0x31, 0x60, + 0xf4, 0x88, 0x94, 0x87, 0x5f, 0x39, 0x66, 0x2c, 0x86, 0xd0, 0x2d, 0x07, 0x7d, 0x19, 0x99, 0xc6, + 0xc8, 0x18, 0xef, 0x79, 0x9d, 0xb2, 0x9c, 0x46, 0xe2, 0x14, 0xfa, 0xa8, 0x52, 0xfe, 0xf6, 0x59, + 0x2a, 0xa4, 0x9c, 0xcd, 0x9d, 0x91, 0x31, 0xee, 0x7b, 0xfb, 0x15, 0x7c, 0xa9, 0x99, 0x98, 0xc0, + 0x91, 0x0a, 0xe6, 0x7e, 0x1a, 0x68, 0x96, 0xa1, 0x4c, 0x83, 0x84, 0x33, 0x73, 0xb7, 0xd2, 0x1d, + 0xaa, 0x60, 0xfe, 0xd4, 0xc2, 0xf6, 0x04, 0x0e, 0x1e, 0x91, 0xb7, 0x59, 0x6d, 0x9f, 0xc1, 0xe0, + 0x1e, 0x63, 0xdc, 0xce, 0xa8, 0x7d, 0x0c, 0xa2, 0xad, 0xce, 0x52, 0x4a, 0x32, 0xbc, 0xfc, 0x35, + 0xa0, 0x57, 0x82, 0x67, 0xd4, 0x85, 0x0c, 0x51, 0xdc, 0x00, 0xac, 0xc2, 0x0b, 0xcb, 0x69, 0x2e, + 0xe4, 0xac, 0x5d, 0xc4, 0x1a, 0x2c, 0x7b, 0x25, 0x9d, 0x26, 0x6f, 0x24, 0xae, 0xa1, 0xdb, 0x78, + 0x17, 0xc3, 0x65, 0xf7, 0x7f, 0x9a, 0x4d, 0x63, 0x0f, 0x00, 0x2b, 0x67, 0xad, 0x9d, 0x6b, 0xe1, + 0xac, 0x93, 0x8d, 0xbd, 0x3a, 0xca, 0xed, 0xc5, 0xab, 0xfb, 0x2e, 0xf9, 0x23, 0x9f, 0x39, 0x21, + 0x29, 0xb7, 0x11, 0x2e, 0xde, 0xf3, 0x0c, 0x75, 0x81, 0xda, 0xad, 0xbe, 0x78, 0x01, 0x67, 0x9d, + 0xaa, 0xbc, 0xfa, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x26, 0x82, 0x91, 0x90, 0x15, 0x02, 0x00, 0x00, } diff --git a/proto/model.proto b/proto/model.proto index b8493329a..2e66ccc39 100644 --- a/proto/model.proto +++ b/proto/model.proto @@ -25,6 +25,20 @@ message Room { string token = 5; } +message RoomInfo { + string room_id = 1; + string node_ip = 2; + uint32 node_rtc_port = 3; + int64 creation_time = 4; + string token = 5; +} + +message PeerInfo { + string peer_id = 1; + bool has_audio = 2; + bool has_video = 3; +} + message DataChannel { string session_id = 1; bytes payload = 2; diff --git a/proto/room.proto b/proto/room.proto index c6b7385fa..3aae37ef5 100644 --- a/proto/room.proto +++ b/proto/room.proto @@ -3,6 +3,8 @@ syntax = "proto3"; package livekit; option go_package = "github.com/livekit/livekit-server/proto/livekit"; +import "model.proto"; + // Room service that can be performed on any node // they are simple HTTP req/responses service RoomService { @@ -24,14 +26,6 @@ message GetRoomRequest { string room_id = 1; } -message RoomInfo { - string room_id = 1; - string node_ip = 2; - uint32 node_rtc_port = 3; - int64 creation_time = 4; - string token = 5; -} - message DeleteRoomRequest { string room_id = 1; }