Package com.twilio.video
Class CameraCapturer
- java.lang.Object
-
- com.twilio.video.CameraCapturer
-
- All Implemented Interfaces:
VideoCapturer
,VideoCapturer
public class CameraCapturer extends java.lang.Object implements VideoCapturer
The CameraCapturer class is used to provide video frames for aLocalVideoTrack
from a givencameraId
. The frames are provided via the preview API ofCamera
.This class represents an implementation of a
VideoCapturer
interface. Although public, these methods are not meant to be invoked directly.Note: This capturer can be reused, but cannot be shared across multiple
LocalVideoTrack
s simultaneously.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
CameraCapturer.Error
static interface
CameraCapturer.Listener
Interface that provides events and errors related toCameraCapturer
.
-
Field Summary
Fields Modifier and Type Field Description static int
ERROR_CAMERA_FREEZE
static int
ERROR_CAMERA_PERMISSION_NOT_GRANTED
static int
ERROR_CAMERA_SERVER_STOPPED
static int
ERROR_CAMERA_SWITCH_FAILED
static int
ERROR_UNKNOWN
static int
ERROR_UNSUPPORTED_SOURCE
-
Constructor Summary
Constructors Constructor Description CameraCapturer(android.content.Context context, java.lang.String cameraId)
Constructs a CameraCapturer instance.CameraCapturer(android.content.Context context, java.lang.String cameraId, CameraCapturer.Listener listener)
Constructs a CameraCapturer instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
dispose()
This method provides an optional step to perform a final cleanup.java.lang.String
getCameraId()
Returns the currently set cameraID.void
initialize(SurfaceTextureHelper surfaceTextureHelper, android.content.Context context, CapturerObserver capturerObserver)
This function is used to initialize the camera thread, the android application context, and the capture observer.boolean
isScreencast()
Indicates that the camera capturer is not a screen cast.void
startCapture(int width, int height, int framerate)
Start capturing frames in a format that is as close as possible towidth x height
andframerate
.void
stopCapture()
Stops all frames being captured.void
switchCamera(java.lang.String newCameraId)
Switches the currentcameraId
.boolean
updateCameraParameters(CameraParameterUpdater cameraParameterUpdater)
Schedules a camera parameter update.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.twilio.video.VideoCapturer
changeCaptureFormat, getCaptureFormat
-
-
-
-
Field Detail
-
ERROR_CAMERA_FREEZE
public static final int ERROR_CAMERA_FREEZE
- See Also:
- Constant Field Values
-
ERROR_CAMERA_SERVER_STOPPED
public static final int ERROR_CAMERA_SERVER_STOPPED
- See Also:
- Constant Field Values
-
ERROR_UNSUPPORTED_SOURCE
public static final int ERROR_UNSUPPORTED_SOURCE
- See Also:
- Constant Field Values
-
ERROR_CAMERA_PERMISSION_NOT_GRANTED
public static final int ERROR_CAMERA_PERMISSION_NOT_GRANTED
- See Also:
- Constant Field Values
-
ERROR_CAMERA_SWITCH_FAILED
public static final int ERROR_CAMERA_SWITCH_FAILED
- See Also:
- Constant Field Values
-
ERROR_UNKNOWN
public static final int ERROR_UNKNOWN
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
CameraCapturer
public CameraCapturer(@NonNull android.content.Context context, @NonNull java.lang.String cameraId)
Constructs a CameraCapturer instance.- Parameters:
context
- application contextcameraId
- unique identifier of the camera device to open that must be specified inCamera1Enumerator.getDeviceNames()
-
CameraCapturer
public CameraCapturer(@NonNull android.content.Context context, @NonNull java.lang.String cameraId, @Nullable CameraCapturer.Listener listener)
Constructs a CameraCapturer instance.- Parameters:
context
- application contextcameraId
- unique identifier of the camera device to open that must be specified inCamera1Enumerator.getDeviceNames()
listener
- an optional listener of camera capturer events
-
-
Method Detail
-
isScreencast
public boolean isScreencast()
Indicates that the camera capturer is not a screen cast.- Specified by:
isScreencast
in interfaceVideoCapturer
- Returns:
- true if-and-only-if this is a screen capturer.
-
initialize
public void initialize(@NonNull SurfaceTextureHelper surfaceTextureHelper, @NonNull android.content.Context context, @NonNull CapturerObserver capturerObserver)
Description copied from interface:VideoCapturer
This function is used to initialize the camera thread, the android application context, and the capture observer. It will be called only once and before any startCapture() request. The camera thread is guaranteed to be valid until dispose() is called. If the VideoCapturer wants to deliver texture frames, it should do this by rendering on the SurfaceTexture insurfaceTextureHelper
, register itself as a listener, and forward the frames to CapturerObserver.onFrameCaptured(). The caller still has ownership ofsurfaceTextureHelper
and is responsible for making sure surfaceTextureHelper.dispose() is called. This also means that the caller can reuse the SurfaceTextureHelper to initialize a new VideoCapturer once the previous VideoCapturer has been disposed.- Specified by:
initialize
in interfaceVideoCapturer
-
startCapture
public void startCapture(int width, int height, int framerate)
Description copied from interface:VideoCapturer
Start capturing frames in a format that is as close as possible towidth x height
andframerate
.- Specified by:
startCapture
in interfaceVideoCapturer
-
stopCapture
public void stopCapture()
Stops all frames being captured. TheCamera
interface should be available for use upon completion.Note: This method is not meant to be invoked directly.
- Specified by:
stopCapture
in interfaceVideoCapturer
-
dispose
public void dispose()
Description copied from interface:VideoCapturer
This method provides an optional step to perform a final cleanup.- Specified by:
dispose
in interfaceVideoCapturer
- Specified by:
dispose
in interfaceVideoCapturer
-
getCameraId
@NonNull public java.lang.String getCameraId()
Returns the currently set cameraID.
-
switchCamera
public void switchCamera(@NonNull java.lang.String newCameraId)
Switches the currentcameraId
. This method can be invoked while capturing frames or not.- Parameters:
newCameraId
- the new camera id.
-
updateCameraParameters
public boolean updateCameraParameters(@NonNull CameraParameterUpdater cameraParameterUpdater)
Schedules a camera parameter update. The current camera'sCamera.Parameters
will be provided for modification viaCameraParameterUpdater.apply(Camera.Parameters)
. Any changes to the parameters will be applied after the invocation of this callback. This method can be invoked while capturing frames or not.The following snippet demonstrates how to turn on the flash of a camera while capturing.
// Create camera capturer CameraCapturer cameraCapturer = new CameraCapturer(context, cameraId, null); // Start camera capturer LocalVideoTrack cameraVideoTrack = LocalVideoTrack.create(context, true, cameraCapturer); // Schedule camera parameter update cameraCapturer.updateCameraParameters(new CameraParameterUpdater() { @Override public void apply(Camera.Parameters cameraParameters) { // Ensure camera supports flash and turn on if (cameraParameters.getFlashMode() != null) { cameraParameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); } } });
- Parameters:
cameraParameterUpdater
- camera parameter updater that receives current camera parameters for modification.- Returns:
- true if update was scheduled or false if an update is pending or could not be scheduled.
-
-