diff options
author | Boris Grozev <boris@jitsi.org> | 2013-07-18 12:56:38 +0300 |
---|---|---|
committer | Boris Grozev <boris@jitsi.org> | 2013-07-18 12:56:38 +0300 |
commit | 82c41a77473887421350e6dcf81497acf0ec6917 (patch) | |
tree | be98e3648f4ad3659006079ffcc7524acbde6389 /src/net/java/sip/communicator/service/protocol/media | |
parent | c1557f7519c1137bb0b9687303373666d35d71fc (diff) | |
download | jitsi-82c41a77473887421350e6dcf81497acf0ec6917.zip jitsi-82c41a77473887421350e6dcf81497acf0ec6917.tar.gz jitsi-82c41a77473887421350e6dcf81497acf0ec6917.tar.bz2 |
When a ConferenceMember is removed from a conference with a
Jitsi-videobridge, an RTCP BYE packet is not always sent. Therefore, if the
ConferenceMember had an associated video SSRC, the stream isn't be
removed until it times out, leaving a blank video container in the interface
for a few seconds.
This works around the problem by removing the
ConferenceMember's ReceiveStream when the ConferenceMember is
removed. The proper solution is to ensure that RTCP BYEs are sent whenever
necessary, and when it is deployed this code should be removed.
Diffstat (limited to 'src/net/java/sip/communicator/service/protocol/media')
-rw-r--r-- | src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java index bdc84a6..d9e1733 100644 --- a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java +++ b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java @@ -1182,4 +1182,33 @@ public abstract class MediaAwareCallPeer * <tt>mediaType</tt> that we have with this <tt>CallPeer</tt>. */ public abstract MediaDirection getDirection(MediaType mediaType); + + /** + * {@inheritDoc} + * + * When a <tt>ConferenceMember</tt> is removed from a conference with a + * Jitsi-videobridge, an RTCP BYE packet is not always sent. Therefore, + * if the <tt>ConferenceMember</tt> had an associated video SSRC, the stream + * isn't be removed until it times out, leaving a blank video container in + * the interface for a few seconds. + * TODO: This works around the problem by removing the + * <tt>ConferenceMember</tt>'s <tt>ReceiveStream</tt> when the + * <tt>ConferenceMember</tt> is removed. The proper solution is to ensure + * that RTCP BYEs are sent whenever necessary, and when it is deployed this + * code should be removed. + * + * @param conferenceMember a <tt>ConferenceMember</tt> to be removed from + * the list of <tt>ConferenceMember</tt> reported by this peer. If the + * specified <tt>ConferenceMember</tt> is no contained in the list, no event + */ + @Override + public void removeConferenceMember(ConferenceMember conferenceMember) + { + MediaStream videoStream = getMediaHandler().getStream(MediaType.VIDEO); + if (videoStream != null) + videoStream.removeReceiveStreamForSsrc( + conferenceMember.getVideoSsrc()); + + super.removeConferenceMember(conferenceMember); + } } |