1 /* 2 * Copyright (c) 2018 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.androidnativeapi; 12 13 import android.content.Context; 14 import android.os.Handler; 15 import android.os.HandlerThread; 16 import org.webrtc.CapturerObserver; 17 import org.webrtc.SurfaceTextureHelper; 18 import org.webrtc.VideoCapturer; 19 import org.webrtc.VideoSink; 20 21 public class CallClient { 22 private static final String TAG = "CallClient"; 23 private static final int CAPTURE_WIDTH = 640; 24 private static final int CAPTURE_HEIGHT = 480; 25 private static final int CAPTURE_FPS = 30; 26 27 private final Context applicationContext; 28 private final HandlerThread thread; 29 private final Handler handler; 30 31 private long nativeClient; 32 private SurfaceTextureHelper surfaceTextureHelper; 33 private VideoCapturer videoCapturer; 34 CallClient(Context applicationContext)35 public CallClient(Context applicationContext) { 36 this.applicationContext = applicationContext; 37 thread = new HandlerThread(TAG + "Thread"); 38 thread.start(); 39 handler = new Handler(thread.getLooper()); 40 handler.post(() -> { nativeClient = nativeCreateClient(); }); 41 } 42 call(VideoSink localSink, VideoSink remoteSink, VideoCapturer videoCapturer, SurfaceTextureHelper videoCapturerSurfaceTextureHelper)43 public void call(VideoSink localSink, VideoSink remoteSink, VideoCapturer videoCapturer, 44 SurfaceTextureHelper videoCapturerSurfaceTextureHelper) { 45 handler.post(() -> { 46 nativeCall(nativeClient, localSink, remoteSink); 47 videoCapturer.initialize(videoCapturerSurfaceTextureHelper, applicationContext, 48 nativeGetJavaVideoCapturerObserver(nativeClient)); 49 videoCapturer.startCapture(CAPTURE_WIDTH, CAPTURE_HEIGHT, CAPTURE_FPS); 50 }); 51 } 52 hangup()53 public void hangup() { 54 handler.post(() -> { nativeHangup(nativeClient); }); 55 } 56 close()57 public void close() { 58 handler.post(() -> { 59 nativeDelete(nativeClient); 60 nativeClient = 0; 61 }); 62 thread.quitSafely(); 63 } 64 nativeCreateClient()65 private static native long nativeCreateClient(); nativeCall( long nativeAndroidCallClient, VideoSink localSink, VideoSink remoteSink)66 private static native void nativeCall( 67 long nativeAndroidCallClient, VideoSink localSink, VideoSink remoteSink); nativeHangup(long nativeAndroidCallClient)68 private static native void nativeHangup(long nativeAndroidCallClient); nativeDelete(long nativeAndroidCallClient)69 private static native void nativeDelete(long nativeAndroidCallClient); nativeGetJavaVideoCapturerObserver( long nativeAndroidCallClient)70 private static native CapturerObserver nativeGetJavaVideoCapturerObserver( 71 long nativeAndroidCallClient); 72 } 73