diff --git a/AUTHORS b/AUTHORS index ac4d742f72..d445c3618d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -14,6 +14,7 @@ Chris Tserng Christophe Dumez Cody Barnes Colin Plumb +Cyril Lashkevich David Porter Dax Booysen Danail Kirov diff --git a/sdk/android/api/org/webrtc/RtpSender.java b/sdk/android/api/org/webrtc/RtpSender.java index 168f9278de..bc894e5d04 100644 --- a/sdk/android/api/org/webrtc/RtpSender.java +++ b/sdk/android/api/org/webrtc/RtpSender.java @@ -11,6 +11,7 @@ package org.webrtc; import android.support.annotation.Nullable; +import java.util.List; /** Java wrapper for a C++ RtpSenderInterface. */ public class RtpSender { @@ -62,6 +63,16 @@ public class RtpSender { return cachedTrack; } + public void setStreams(List streamIds) { + checkRtpSenderExists(); + nativeSetStreams(nativeRtpSender, streamIds); + } + + public List getStreams() { + checkRtpSenderExists(); + return nativeGetStreams(nativeRtpSender); + } + public boolean setParameters(RtpParameters parameters) { checkRtpSenderExists(); return nativeSetParameters(nativeRtpSender, parameters); @@ -117,6 +128,10 @@ public class RtpSender { // Will be released in dispose() or setTrack(). private static native long nativeGetTrack(long rtpSender); + private static native void nativeSetStreams(long rtpSender, List streamIds); + + private static native List nativeGetStreams(long rtpSender); + // This should increment the reference count of the DTMF sender. // Will be released in dispose(). private static native long nativeGetDtmfSender(long rtpSender); diff --git a/sdk/android/src/jni/pc/rtp_sender.cc b/sdk/android/src/jni/pc/rtp_sender.cc index e3ef185bd1..411e5dc8c5 100644 --- a/sdk/android/src/jni/pc/rtp_sender.cc +++ b/sdk/android/src/jni/pc/rtp_sender.cc @@ -45,6 +45,26 @@ jlong JNI_RtpSender_GetTrack(JNIEnv* jni, .release()); } +static void JNI_RtpSender_SetStreams( + JNIEnv* jni, + jlong j_rtp_sender_pointer, + const JavaParamRef& j_stream_labels) { + reinterpret_cast(j_rtp_sender_pointer) + ->SetStreams(JavaListToNativeVector( + jni, j_stream_labels, &JavaToNativeString)); +} + +ScopedJavaLocalRef JNI_RtpSender_GetStreams( + JNIEnv* jni, + jlong j_rtp_sender_pointer) { + ScopedJavaLocalRef (*convert_function)(JNIEnv*, const std::string&) = + &NativeToJavaString; + return NativeToJavaList( + jni, + reinterpret_cast(j_rtp_sender_pointer)->stream_ids(), + convert_function); +} + jlong JNI_RtpSender_GetDtmfSender(JNIEnv* jni, jlong j_rtp_sender_pointer) { return jlongFromPointer( diff --git a/sdk/objc/api/peerconnection/RTCRtpSender.h b/sdk/objc/api/peerconnection/RTCRtpSender.h index 49f61b81d5..c03b4cc88c 100644 --- a/sdk/objc/api/peerconnection/RTCRtpSender.h +++ b/sdk/objc/api/peerconnection/RTCRtpSender.h @@ -35,6 +35,9 @@ RTC_OBJC_EXPORT */ @property(nonatomic, copy, nullable) RTCMediaStreamTrack *track; +/** IDs of streams associated with the RTP sender */ +@property(nonatomic, copy) NSArray *streamIds; + /** The RTCDtmfSender accociated with the RTP sender. */ @property(nonatomic, readonly, nullable) id dtmfSender; diff --git a/sdk/objc/api/peerconnection/RTCRtpSender.mm b/sdk/objc/api/peerconnection/RTCRtpSender.mm index b227025867..d29265102b 100644 --- a/sdk/objc/api/peerconnection/RTCRtpSender.mm +++ b/sdk/objc/api/peerconnection/RTCRtpSender.mm @@ -57,6 +57,23 @@ } } +- (NSArray *)streamIds { + std::vector nativeStreamIds = _nativeRtpSender->stream_ids(); + NSMutableArray *streamIds = [NSMutableArray arrayWithCapacity:nativeStreamIds.size()]; + for (const auto &s : nativeStreamIds) { + [streamIds addObject:[NSString stringForStdString:s]]; + } + return streamIds; +} + +- (void)setStreamIds:(NSArray *)streamIds { + std::vector nativeStreamIds; + for (NSString *streamId in streamIds) { + nativeStreamIds.push_back([streamId UTF8String]); + } + _nativeRtpSender->SetStreams(nativeStreamIds); +} + - (NSString *)description { return [NSString stringWithFormat:@"RTCRtpSender {\n senderId: %@\n}", self.senderId];