SetStreams API of RtpSender wrapped for iOS and Android
Bug: webrtc:10129
Change-Id: I36ea0110de655bbffa2bd18a024abd15a2136838
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/155983
Commit-Queue: Kári Helgason <kthelgason@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29405}
diff --git a/AUTHORS b/AUTHORS
index ac4d742..d445c36 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -14,6 +14,7 @@
Christophe Dumez <ch.dumez@samsung.com>
Cody Barnes <conceptgenesis@gmail.com>
Colin Plumb
+Cyril Lashkevich <notorca@gmail.com>
David Porter <david@porter.me>
Dax Booysen <dax@younow.com>
Danail Kirov <dkirovbroadsoft@gmail.com>
diff --git a/sdk/android/api/org/webrtc/RtpSender.java b/sdk/android/api/org/webrtc/RtpSender.java
index 168f927..bc894e5 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 @@
return cachedTrack;
}
+ public void setStreams(List<String> streamIds) {
+ checkRtpSenderExists();
+ nativeSetStreams(nativeRtpSender, streamIds);
+ }
+
+ public List<String> getStreams() {
+ checkRtpSenderExists();
+ return nativeGetStreams(nativeRtpSender);
+ }
+
public boolean setParameters(RtpParameters parameters) {
checkRtpSenderExists();
return nativeSetParameters(nativeRtpSender, parameters);
@@ -117,6 +128,10 @@
// Will be released in dispose() or setTrack().
private static native long nativeGetTrack(long rtpSender);
+ private static native void nativeSetStreams(long rtpSender, List<String> streamIds);
+
+ private static native List<String> 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 e3ef185..411e5dc 100644
--- a/sdk/android/src/jni/pc/rtp_sender.cc
+++ b/sdk/android/src/jni/pc/rtp_sender.cc
@@ -45,6 +45,26 @@
.release());
}
+static void JNI_RtpSender_SetStreams(
+ JNIEnv* jni,
+ jlong j_rtp_sender_pointer,
+ const JavaParamRef<jobject>& j_stream_labels) {
+ reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
+ ->SetStreams(JavaListToNativeVector<std::string, jstring>(
+ jni, j_stream_labels, &JavaToNativeString));
+}
+
+ScopedJavaLocalRef<jobject> JNI_RtpSender_GetStreams(
+ JNIEnv* jni,
+ jlong j_rtp_sender_pointer) {
+ ScopedJavaLocalRef<jstring> (*convert_function)(JNIEnv*, const std::string&) =
+ &NativeToJavaString;
+ return NativeToJavaList(
+ jni,
+ reinterpret_cast<RtpSenderInterface*>(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 49f61b8..c03b4cc 100644
--- a/sdk/objc/api/peerconnection/RTCRtpSender.h
+++ b/sdk/objc/api/peerconnection/RTCRtpSender.h
@@ -35,6 +35,9 @@
*/
@property(nonatomic, copy, nullable) RTCMediaStreamTrack *track;
+/** IDs of streams associated with the RTP sender */
+@property(nonatomic, copy) NSArray<NSString *> *streamIds;
+
/** The RTCDtmfSender accociated with the RTP sender. */
@property(nonatomic, readonly, nullable) id<RTCDtmfSender> dtmfSender;
diff --git a/sdk/objc/api/peerconnection/RTCRtpSender.mm b/sdk/objc/api/peerconnection/RTCRtpSender.mm
index b227025..d292651 100644
--- a/sdk/objc/api/peerconnection/RTCRtpSender.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpSender.mm
@@ -57,6 +57,23 @@
}
}
+- (NSArray<NSString *> *)streamIds {
+ std::vector<std::string> 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<NSString *> *)streamIds {
+ std::vector<std::string> 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];