xref: /aosp_15_r20/external/webrtc/sdk/android/api/org/webrtc/RtpReceiver.java (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright 2015 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 package org.webrtc;
12 
13 import androidx.annotation.Nullable;
14 import org.webrtc.MediaStreamTrack;
15 
16 /** Java wrapper for a C++ RtpReceiverInterface. */
17 public class RtpReceiver {
18   /** Java wrapper for a C++ RtpReceiverObserverInterface*/
19   public static interface Observer {
20     // Called when the first audio or video packet is received.
21     @CalledByNative("Observer")
onFirstPacketReceived(MediaStreamTrack.MediaType media_type)22     public void onFirstPacketReceived(MediaStreamTrack.MediaType media_type);
23   }
24 
25   private long nativeRtpReceiver;
26   private long nativeObserver;
27 
28   @Nullable private MediaStreamTrack cachedTrack;
29 
30   @CalledByNative
RtpReceiver(long nativeRtpReceiver)31   public RtpReceiver(long nativeRtpReceiver) {
32     this.nativeRtpReceiver = nativeRtpReceiver;
33     long nativeTrack = nativeGetTrack(nativeRtpReceiver);
34     cachedTrack = MediaStreamTrack.createMediaStreamTrack(nativeTrack);
35   }
36 
37   @Nullable
track()38   public MediaStreamTrack track() {
39     return cachedTrack;
40   }
41 
getParameters()42   public RtpParameters getParameters() {
43     checkRtpReceiverExists();
44     return nativeGetParameters(nativeRtpReceiver);
45   }
46 
id()47   public String id() {
48     checkRtpReceiverExists();
49     return nativeGetId(nativeRtpReceiver);
50   }
51 
52   /** Returns a pointer to webrtc::RtpReceiverInterface. */
getNativeRtpReceiver()53   long getNativeRtpReceiver() {
54     checkRtpReceiverExists();
55     return nativeRtpReceiver;
56   }
57 
58   @CalledByNative
dispose()59   public void dispose() {
60     checkRtpReceiverExists();
61     cachedTrack.dispose();
62     if (nativeObserver != 0) {
63       nativeUnsetObserver(nativeRtpReceiver, nativeObserver);
64       nativeObserver = 0;
65     }
66     JniCommon.nativeReleaseRef(nativeRtpReceiver);
67     nativeRtpReceiver = 0;
68   }
69 
SetObserver(Observer observer)70   public void SetObserver(Observer observer) {
71     checkRtpReceiverExists();
72     // Unset the existing one before setting a new one.
73     if (nativeObserver != 0) {
74       nativeUnsetObserver(nativeRtpReceiver, nativeObserver);
75     }
76     nativeObserver = nativeSetObserver(nativeRtpReceiver, observer);
77   }
78 
setFrameDecryptor(FrameDecryptor frameDecryptor)79   public void setFrameDecryptor(FrameDecryptor frameDecryptor) {
80     checkRtpReceiverExists();
81     nativeSetFrameDecryptor(nativeRtpReceiver, frameDecryptor.getNativeFrameDecryptor());
82   }
83 
checkRtpReceiverExists()84   private void checkRtpReceiverExists() {
85     if (nativeRtpReceiver == 0) {
86       throw new IllegalStateException("RtpReceiver has been disposed.");
87     }
88   }
89 
90   // This should increment the reference count of the track.
91   // Will be released in dispose().
nativeGetTrack(long rtpReceiver)92   private static native long nativeGetTrack(long rtpReceiver);
nativeGetParameters(long rtpReceiver)93   private static native RtpParameters nativeGetParameters(long rtpReceiver);
nativeGetId(long rtpReceiver)94   private static native String nativeGetId(long rtpReceiver);
nativeSetObserver(long rtpReceiver, Observer observer)95   private static native long nativeSetObserver(long rtpReceiver, Observer observer);
nativeUnsetObserver(long rtpReceiver, long nativeObserver)96   private static native void nativeUnsetObserver(long rtpReceiver, long nativeObserver);
nativeSetFrameDecryptor(long rtpReceiver, long nativeFrameDecryptor)97   private static native void nativeSetFrameDecryptor(long rtpReceiver, long nativeFrameDecryptor);
98 };
99