Skip to content

Commit 9dab54f

Browse files
authored
feat: Add getStats for RtpSender/RtpReceiver. (#46)
1 parent d84883e commit 9dab54f

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

sdk/android/api/org/webrtc/PeerConnection.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,14 @@ public void getStats(RTCStatsCollectorCallback callback) {
11761176
nativeNewGetStats(callback);
11771177
}
11781178

1179+
public void getStats(RTCStatsCollectorCallback callback, RtpSender sender) {
1180+
nativeNewGetStatsForSender(callback, sender.getNativeRtpSender());
1181+
}
1182+
1183+
public void getStats(RTCStatsCollectorCallback callback, RtpReceiver receiver) {
1184+
nativeNewGetStatsForReceiver(callback, receiver.getNativeRtpReceiver());
1185+
}
1186+
11791187
/**
11801188
* Limits the bandwidth allocated for all RTP streams sent by this
11811189
* PeerConnection. Pass null to leave a value unchanged.
@@ -1310,6 +1318,10 @@ private native void nativeAddIceCandidateWithObserver(
13101318
private native void nativeRemoveLocalStream(long stream);
13111319
private native boolean nativeOldGetStats(StatsObserver observer, long nativeTrack);
13121320
private native void nativeNewGetStats(RTCStatsCollectorCallback callback);
1321+
private native void nativeNewGetStatsForSender(
1322+
RTCStatsCollectorCallback callback, long nativeRtpSender);
1323+
private native void nativeNewGetStatsForReceiver(
1324+
RTCStatsCollectorCallback callback, long nativeRtpReceiver);
13131325
private native RtpSender nativeCreateSender(String kind, String stream_id);
13141326
private native List<RtpSender> nativeGetSenders();
13151327
private native List<RtpReceiver> nativeGetReceivers();

sdk/android/api/org/webrtc/RtpReceiver.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ public void setFrameDecryptor(FrameDecryptor frameDecryptor) {
7575
nativeSetFrameDecryptor(nativeRtpReceiver, frameDecryptor.getNativeFrameDecryptor());
7676
}
7777

78+
/** Returns a pointer to webrtc::RtpReceiverInterface. */
79+
long getNativeRtpReceiver() {
80+
checkRtpReceiverExists();
81+
return nativeRtpReceiver;
82+
}
83+
7884
private void checkRtpReceiverExists() {
7985
if (nativeRtpReceiver == 0) {
8086
throw new IllegalStateException("RtpReceiver has been disposed.");

sdk/android/src/jni/pc/peer_connection.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,30 @@ static void JNI_PeerConnection_NewGetStats(
842842
ExtractNativePC(jni, j_pc)->GetStats(callback.get());
843843
}
844844

845+
static void JNI_PeerConnection_NewGetStatsForSender(
846+
JNIEnv* jni,
847+
const JavaParamRef<jobject>& j_pc,
848+
const JavaParamRef<jobject>& j_callback,
849+
jlong native_sener) {
850+
auto callback =
851+
rtc::make_ref_counted<RTCStatsCollectorCallbackWrapper>(jni, j_callback);
852+
rtc::scoped_refptr<RtpSenderInterface> selector(
853+
reinterpret_cast<RtpSenderInterface*>(native_sener));
854+
ExtractNativePC(jni, j_pc)->GetStats(selector, callback);
855+
}
856+
857+
static void JNI_PeerConnection_NewGetStatsForReceiver(
858+
JNIEnv* jni,
859+
const JavaParamRef<jobject>& j_pc,
860+
const JavaParamRef<jobject>& j_callback,
861+
jlong native_receiver) {
862+
auto callback =
863+
rtc::make_ref_counted<RTCStatsCollectorCallbackWrapper>(jni, j_callback);
864+
rtc::scoped_refptr<RtpReceiverInterface> selector(
865+
reinterpret_cast<RtpReceiverInterface*>(native_receiver));
866+
ExtractNativePC(jni, j_pc)->GetStats(selector, callback);
867+
}
868+
845869
static jboolean JNI_PeerConnection_SetBitrate(
846870
JNIEnv* jni,
847871
const JavaParamRef<jobject>& j_pc,

0 commit comments

Comments
 (0)