From 670e0ee17d11d296d430483a0ac7989292c160ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Thu, 9 Dec 2021 21:48:02 +0100 Subject: [PATCH] member profile can share media. --- internal/api/members/controler.go | 1 + internal/member/dummy/provider.go | 1 + internal/member/object/provider.go | 2 ++ internal/types/member.go | 1 + internal/webrtc/manager.go | 19 +++++++++++++------ 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/internal/api/members/controler.go b/internal/api/members/controler.go index e5de26b0..6b85f3a7 100644 --- a/internal/api/members/controler.go +++ b/internal/api/members/controler.go @@ -62,6 +62,7 @@ func (h *MembersHandler) membersCreate(w http.ResponseWriter, r *http.Request) e CanConnect: true, CanWatch: true, CanHost: true, + CanShareMedia: true, CanAccessClipboard: true, SendsInactiveCursor: true, CanSeeInactiveCursors: true, diff --git a/internal/member/dummy/provider.go b/internal/member/dummy/provider.go index 073d8327..88bef7ca 100644 --- a/internal/member/dummy/provider.go +++ b/internal/member/dummy/provider.go @@ -14,6 +14,7 @@ func New() types.MemberProvider { CanConnect: true, CanWatch: true, CanHost: true, + CanShareMedia: true, CanAccessClipboard: true, SendsInactiveCursor: true, CanSeeInactiveCursors: true, diff --git a/internal/member/object/provider.go b/internal/member/object/provider.go index 1bcb5c49..80b68b00 100644 --- a/internal/member/object/provider.go +++ b/internal/member/object/provider.go @@ -28,6 +28,7 @@ func (provider *MemberProviderCtx) Connect() error { CanConnect: true, CanWatch: true, CanHost: true, + CanShareMedia: true, CanAccessClipboard: true, SendsInactiveCursor: true, CanSeeInactiveCursors: true, @@ -43,6 +44,7 @@ func (provider *MemberProviderCtx) Connect() error { CanConnect: true, CanWatch: true, CanHost: true, + CanShareMedia: true, CanAccessClipboard: true, SendsInactiveCursor: true, CanSeeInactiveCursors: false, diff --git a/internal/types/member.go b/internal/types/member.go index c220b856..116c1684 100644 --- a/internal/types/member.go +++ b/internal/types/member.go @@ -15,6 +15,7 @@ type MemberProfile struct { CanConnect bool `json:"can_connect"` CanWatch bool `json:"can_watch"` CanHost bool `json:"can_host"` + CanShareMedia bool `json:"can_share_media"` CanAccessClipboard bool `json:"can_access_clipboard"` SendsInactiveCursor bool `json:"sends_inactive_cursor"` CanSeeInactiveCursors bool `json:"can_see_inactive_cursors"` diff --git a/internal/webrtc/manager.go b/internal/webrtc/manager.go index 5ef23318..299a7506 100644 --- a/internal/webrtc/manager.go +++ b/internal/webrtc/manager.go @@ -157,12 +157,18 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin } connection.OnTrack(func(track *webrtc.TrackRemote, receiver *webrtc.RTPReceiver) { + if !session.Profile().CanShareMedia { + logger.Warn(). + Str("kind", track.Kind().String()). + Msgf("got track but share media is disabled for this session") + + receiver.Stop() + return + } + logger.Info(). - Str("stream-id", track.StreamID()). - Str("id", track.ID()). - Str("rid", track.RID()). + Str("kind", track.Kind().String()). Str("mime", track.Codec().RTPCodecCapability.MimeType). - Uint8("payload-type", uint8(track.PayloadType())). Msgf("received new track") // parse codec @@ -186,7 +192,6 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin logger.Err(err).Msg("failed to start pipeline") return } - defer srcManager.Stop() // TODO: Ensure no new publisher took over. // Send a PLI on an interval so that the publisher is pushing a keyframe every rtcpPLIInterval ticker := time.NewTicker(time.Second * 3) @@ -212,7 +217,9 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin srcManager.Push(buf[:i]) } - logger.Warn().Msg("src manager stream connection died") + logger.Warn().Msg("src manager stream connection died, stopping") + srcManager.Stop() + logger.Warn().Msg("src manager stream stopped!!!!!!!!!!!!!!!") }) connection.OnDataChannel(func(dc *webrtc.DataChannel) {