Do not create DtmfSender for video sender.

On Android bindings, do not build a DtmfSender instance in a
RtpSender if its video kind is Video.
This will prevent showing an error when trying to access
that DtmfSender instance that has no native reference

Bug: webrtc:14680
Change-Id: Iba67a12cae8604c032915156b581af269f6ed265
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/283742
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Sergey Silkin <ssilkin@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38724}
This commit is contained in:
Roberto Perez 2022-11-17 14:18:44 +01:00 committed by WebRTC LUCI CQ
parent d409621f28
commit b05968e5ec
2 changed files with 19 additions and 2 deletions

View File

@ -12,6 +12,7 @@ package org.webrtc;
import androidx.annotation.Nullable;
import java.util.List;
import org.webrtc.MediaStreamTrack;
/** Java wrapper for a C++ RtpSenderInterface. */
public class RtpSender {
@ -27,8 +28,12 @@ public class RtpSender {
long nativeTrack = nativeGetTrack(nativeRtpSender);
cachedTrack = MediaStreamTrack.createMediaStreamTrack(nativeTrack);
long nativeDtmfSender = nativeGetDtmfSender(nativeRtpSender);
dtmfSender = (nativeDtmfSender != 0) ? new DtmfSender(nativeDtmfSender) : null;
if (nativeGetMediaType(nativeRtpSender).equalsIgnoreCase(MediaStreamTrack.AUDIO_TRACK_KIND)) {
long nativeDtmfSender = nativeGetDtmfSender(nativeRtpSender);
dtmfSender = (nativeDtmfSender != 0) ? new DtmfSender(nativeDtmfSender) : null;
} else {
dtmfSender = null;
}
}
/**
@ -143,4 +148,6 @@ public class RtpSender {
private static native String nativeGetId(long rtpSender);
private static native void nativeSetFrameEncryptor(long rtpSender, long nativeFrameEncryptor);
private static native String nativeGetMediaType(long rtpSender);
};

View File

@ -110,5 +110,15 @@ static void JNI_RtpSender_SetFrameEncryptor(JNIEnv* jni,
j_frame_encryptor_pointer)));
}
static ScopedJavaLocalRef<jstring> JNI_RtpSender_GetMediaType(
JNIEnv* jni,
jlong j_rtp_sender_pointer) {
cricket::MediaType media_type =
reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->media_type();
return media_type == cricket::MEDIA_TYPE_AUDIO
? NativeToJavaString(jni, "audio")
: NativeToJavaString(jni, "video");
}
} // namespace jni
} // namespace webrtc