1 /* 2 * Copyright (c) 2020 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.examples.androidvoip; 12 13 import android.content.Context; 14 import android.os.Handler; 15 import android.os.HandlerThread; 16 import java.util.ArrayList; 17 import java.util.List; 18 import org.webrtc.CalledByNative; 19 20 public class VoipClient { 21 private long nativeClient; 22 private OnVoipClientTaskCompleted listener; 23 VoipClient(Context applicationContext, OnVoipClientTaskCompleted listener)24 public VoipClient(Context applicationContext, OnVoipClientTaskCompleted listener) { 25 this.listener = listener; 26 nativeClient = nativeCreateClient(applicationContext, this); 27 } 28 isInitialized()29 private boolean isInitialized() { 30 return nativeClient != 0; 31 } 32 getAndSetUpSupportedCodecs()33 public void getAndSetUpSupportedCodecs() { 34 if (isInitialized()) { 35 nativeGetSupportedCodecs(nativeClient); 36 } else { 37 listener.onUninitializedVoipClient(); 38 } 39 } 40 getAndSetUpLocalIPAddress()41 public void getAndSetUpLocalIPAddress() { 42 if (isInitialized()) { 43 nativeGetLocalIPAddress(nativeClient); 44 } else { 45 listener.onUninitializedVoipClient(); 46 } 47 } 48 setEncoder(String encoder)49 public void setEncoder(String encoder) { 50 if (isInitialized()) { 51 nativeSetEncoder(nativeClient, encoder); 52 } else { 53 listener.onUninitializedVoipClient(); 54 } 55 } 56 setDecoders(List<String> decoders)57 public void setDecoders(List<String> decoders) { 58 if (isInitialized()) { 59 nativeSetDecoders(nativeClient, decoders); 60 } else { 61 listener.onUninitializedVoipClient(); 62 } 63 } 64 setLocalAddress(String ipAddress, int portNumber)65 public void setLocalAddress(String ipAddress, int portNumber) { 66 if (isInitialized()) { 67 nativeSetLocalAddress(nativeClient, ipAddress, portNumber); 68 } else { 69 listener.onUninitializedVoipClient(); 70 } 71 } 72 setRemoteAddress(String ipAddress, int portNumber)73 public void setRemoteAddress(String ipAddress, int portNumber) { 74 if (isInitialized()) { 75 nativeSetRemoteAddress(nativeClient, ipAddress, portNumber); 76 } else { 77 listener.onUninitializedVoipClient(); 78 } 79 } 80 startSession()81 public void startSession() { 82 if (isInitialized()) { 83 nativeStartSession(nativeClient); 84 } else { 85 listener.onUninitializedVoipClient(); 86 } 87 } 88 stopSession()89 public void stopSession() { 90 if (isInitialized()) { 91 nativeStopSession(nativeClient); 92 } else { 93 listener.onUninitializedVoipClient(); 94 } 95 } 96 startSend()97 public void startSend() { 98 if (isInitialized()) { 99 nativeStartSend(nativeClient); 100 } else { 101 listener.onUninitializedVoipClient(); 102 } 103 } 104 stopSend()105 public void stopSend() { 106 if (isInitialized()) { 107 nativeStopSend(nativeClient); 108 } else { 109 listener.onUninitializedVoipClient(); 110 } 111 } 112 startPlayout()113 public void startPlayout() { 114 if (isInitialized()) { 115 nativeStartPlayout(nativeClient); 116 } else { 117 listener.onUninitializedVoipClient(); 118 } 119 } 120 stopPlayout()121 public void stopPlayout() { 122 if (isInitialized()) { 123 nativeStopPlayout(nativeClient); 124 } else { 125 listener.onUninitializedVoipClient(); 126 } 127 } 128 close()129 public void close() { 130 nativeDelete(nativeClient); 131 nativeClient = 0; 132 } 133 134 @CalledByNative onGetLocalIPAddressCompleted(String localIPAddress)135 public void onGetLocalIPAddressCompleted(String localIPAddress) { 136 listener.onGetLocalIPAddressCompleted(localIPAddress); 137 } 138 139 @CalledByNative onGetSupportedCodecsCompleted(List<String> supportedCodecs)140 public void onGetSupportedCodecsCompleted(List<String> supportedCodecs) { 141 listener.onGetSupportedCodecsCompleted(supportedCodecs); 142 } 143 144 @CalledByNative onStartSessionCompleted(boolean isSuccessful)145 public void onStartSessionCompleted(boolean isSuccessful) { 146 listener.onStartSessionCompleted(isSuccessful); 147 } 148 149 @CalledByNative onStopSessionCompleted(boolean isSuccessful)150 public void onStopSessionCompleted(boolean isSuccessful) { 151 listener.onStopSessionCompleted(isSuccessful); 152 } 153 154 @CalledByNative onStartSendCompleted(boolean isSuccessful)155 public void onStartSendCompleted(boolean isSuccessful) { 156 listener.onStartSendCompleted(isSuccessful); 157 } 158 159 @CalledByNative onStopSendCompleted(boolean isSuccessful)160 public void onStopSendCompleted(boolean isSuccessful) { 161 listener.onStopSendCompleted(isSuccessful); 162 } 163 164 @CalledByNative onStartPlayoutCompleted(boolean isSuccessful)165 public void onStartPlayoutCompleted(boolean isSuccessful) { 166 listener.onStartPlayoutCompleted(isSuccessful); 167 } 168 169 @CalledByNative onStopPlayoutCompleted(boolean isSuccessful)170 public void onStopPlayoutCompleted(boolean isSuccessful) { 171 listener.onStopPlayoutCompleted(isSuccessful); 172 } 173 nativeCreateClient( Context applicationContext, VoipClient javaVoipClient)174 private static native long nativeCreateClient( 175 Context applicationContext, VoipClient javaVoipClient); nativeGetSupportedCodecs(long nativeAndroidVoipClient)176 private static native void nativeGetSupportedCodecs(long nativeAndroidVoipClient); nativeGetLocalIPAddress(long nativeAndroidVoipClient)177 private static native void nativeGetLocalIPAddress(long nativeAndroidVoipClient); nativeSetEncoder(long nativeAndroidVoipClient, String encoder)178 private static native void nativeSetEncoder(long nativeAndroidVoipClient, String encoder); nativeSetDecoders(long nativeAndroidVoipClient, List<String> decoders)179 private static native void nativeSetDecoders(long nativeAndroidVoipClient, List<String> decoders); nativeSetLocalAddress( long nativeAndroidVoipClient, String ipAddress, int portNumber)180 private static native void nativeSetLocalAddress( 181 long nativeAndroidVoipClient, String ipAddress, int portNumber); nativeSetRemoteAddress( long nativeAndroidVoipClient, String ipAddress, int portNumber)182 private static native void nativeSetRemoteAddress( 183 long nativeAndroidVoipClient, String ipAddress, int portNumber); nativeStartSession(long nativeAndroidVoipClient)184 private static native void nativeStartSession(long nativeAndroidVoipClient); nativeStopSession(long nativeAndroidVoipClient)185 private static native void nativeStopSession(long nativeAndroidVoipClient); nativeStartSend(long nativeAndroidVoipClient)186 private static native void nativeStartSend(long nativeAndroidVoipClient); nativeStopSend(long nativeAndroidVoipClient)187 private static native void nativeStopSend(long nativeAndroidVoipClient); nativeStartPlayout(long nativeAndroidVoipClient)188 private static native void nativeStartPlayout(long nativeAndroidVoipClient); nativeStopPlayout(long nativeAndroidVoipClient)189 private static native void nativeStopPlayout(long nativeAndroidVoipClient); nativeDelete(long nativeAndroidVoipClient)190 private static native void nativeDelete(long nativeAndroidVoipClient); 191 } 192