/* * Copyright 2015 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ package org.webrtc; import android.support.annotation.Nullable; import java.util.List; /** Java wrapper for a C++ RtpSenderInterface. */ public class RtpSender { private long nativeRtpSender; @Nullable private MediaStreamTrack cachedTrack; private boolean ownsTrack = true; private final @Nullable DtmfSender dtmfSender; @CalledByNative public RtpSender(long nativeRtpSender) { this.nativeRtpSender = nativeRtpSender; long nativeTrack = nativeGetTrack(nativeRtpSender); cachedTrack = MediaStreamTrack.createMediaStreamTrack(nativeTrack); long nativeDtmfSender = nativeGetDtmfSender(nativeRtpSender); dtmfSender = (nativeDtmfSender != 0) ? new DtmfSender(nativeDtmfSender) : null; } /** * Starts sending a new track, without requiring additional SDP negotiation. *
* Note: This is equivalent to replaceTrack in the official WebRTC API. It
* was just implemented before the standards group settled on a name.
*
* @param takeOwnership If true, the RtpSender takes ownership of the track
* from the caller, and will auto-dispose of it when no
* longer needed. |takeOwnership| should only be used if
* the caller owns the track; it is not appropriate when
* the track is owned by, for example, another RtpSender
* or a MediaStream.
* @return true on success and false on failure.
*/
public boolean setTrack(@Nullable MediaStreamTrack track, boolean takeOwnership) {
checkRtpSenderExists();
if (!nativeSetTrack(nativeRtpSender, (track == null) ? 0 : track.getNativeMediaStreamTrack())) {
return false;
}
if (cachedTrack != null && ownsTrack) {
cachedTrack.dispose();
}
cachedTrack = track;
ownsTrack = takeOwnership;
return true;
}
@Nullable
public MediaStreamTrack track() {
return cachedTrack;
}
public void setStreams(List