Connection.VideoProvider
public
static
abstract
class
Connection.VideoProvider
extends Object
java.lang.Object | |
↳ | android.telecom.Connection.VideoProvider |
Provides a means of controlling the video session associated with a Connection
.
Implementations create a custom subclass of VideoProvider
and the
ConnectionService
creates an instance sets it on the Connection
using
Connection.setVideoProvider(VideoProvider)
. Any connection which supports video
should set the VideoProvider
.
The VideoProvider
serves two primary purposes: it provides a means for Telecom and
InCallService
implementations to issue requests related to the video session;
it provides a means for the ConnectionService
to report events and information
related to the video session to Telecom and the InCallService
implementations.
InCallService
implementations interact with the VideoProvider
via
InCallService.VideoCall
.
Summary
Constants | |
---|---|
int |
SESSION_EVENT_CAMERA_FAILURE
A camera failure has occurred for the selected camera. |
int |
SESSION_EVENT_CAMERA_PERMISSION_ERROR
Session event raised by Telecom when
|
int |
SESSION_EVENT_CAMERA_READY
Issued after |
int |
SESSION_EVENT_RX_PAUSE
Video is not being received (no protocol pause was issued). |
int |
SESSION_EVENT_RX_RESUME
Video reception has resumed after a |
int |
SESSION_EVENT_TX_START
Video transmission has begun. |
int |
SESSION_EVENT_TX_STOP
Video transmission has stopped. |
int |
SESSION_MODIFY_REQUEST_FAIL
Session modify request failed. |
int |
SESSION_MODIFY_REQUEST_INVALID
Session modify request ignored due to invalid parameters. |
int |
SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE
Session modify request rejected by remote user. |
int |
SESSION_MODIFY_REQUEST_SUCCESS
Session modify request was successful. |
int |
SESSION_MODIFY_REQUEST_TIMED_OUT
Session modify request timed out. |
Public constructors | |
---|---|
VideoProvider()
|
Public methods | |
---|---|
void
|
changeCameraCapabilities(VideoProfile.CameraCapabilities cameraCapabilities)
Used to inform listening |
void
|
changePeerDimensions(int width, int height)
Used to inform listening |
void
|
changeVideoQuality(int videoQuality)
Used to inform listening |
void
|
handleCallSessionEvent(int event)
Used to inform listening |
abstract
void
|
onRequestCameraCapabilities()
Issues a request to the |
abstract
void
|
onRequestConnectionDataUsage()
Issues a request to the |
abstract
void
|
onSendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile)
Issues a request to modify the properties of the current video session. |
abstract
void
|
onSendSessionModifyResponse(VideoProfile responseProfile)
Provides a response to a request to change the current video session properties. |
abstract
void
|
onSetCamera(String cameraId)
Sets the camera to be used for the outgoing video. |
abstract
void
|
onSetDeviceOrientation(int rotation)
Sets the device orientation, in degrees. |
abstract
void
|
onSetDisplaySurface(Surface surface)
Sets the surface to be used for displaying the video received from the remote device. |
abstract
void
|
onSetPauseImage(Uri uri)
Provides the |
abstract
void
|
onSetPreviewSurface(Surface surface)
Sets the surface to be used for displaying a preview of what the user's camera is currently capturing. |
abstract
void
|
onSetZoom(float value)
Sets the camera zoom ratio. |
void
|
receiveSessionModifyRequest(VideoProfile videoProfile)
Used to inform listening |
void
|
receiveSessionModifyResponse(int status, VideoProfile requestedProfile, VideoProfile responseProfile)
Used to inform listening |
void
|
setCallDataUsage(long dataUsage)
Used to inform listening |
Inherited methods | |
---|---|
Constants
SESSION_EVENT_CAMERA_FAILURE
public static final int SESSION_EVENT_CAMERA_FAILURE
A camera failure has occurred for the selected camera. The VideoProvider
can use
this as a cue to inform the user the camera is not available.
See also:
Constant Value: 5 (0x00000005)
SESSION_EVENT_CAMERA_PERMISSION_ERROR
public static final int SESSION_EVENT_CAMERA_PERMISSION_ERROR
Session event raised by Telecom when
InCallService.VideoCall.setCamera(String)
is called and the
caller does not have the necessary Manifest.permission.CAMERA
permission.
See also:
Constant Value: 7 (0x00000007)
SESSION_EVENT_CAMERA_READY
public static final int SESSION_EVENT_CAMERA_READY
Issued after SESSION_EVENT_CAMERA_FAILURE
when the camera is once again ready
for operation. The VideoProvider
can use this as a cue to inform the user that
the camera has become available again.
See also:
Constant Value: 6 (0x00000006)
SESSION_EVENT_RX_PAUSE
public static final int SESSION_EVENT_RX_PAUSE
Video is not being received (no protocol pause was issued).
See also:
Constant Value: 1 (0x00000001)
SESSION_EVENT_RX_RESUME
public static final int SESSION_EVENT_RX_RESUME
Video reception has resumed after a SESSION_EVENT_RX_PAUSE
.
See also:
Constant Value: 2 (0x00000002)
SESSION_EVENT_TX_START
public static final int SESSION_EVENT_TX_START
Video transmission has begun. This occurs after a negotiated start of video transmission when the underlying protocol has actually begun transmitting video to the remote party.
See also:
Constant Value: 3 (0x00000003)
SESSION_EVENT_TX_STOP
public static final int SESSION_EVENT_TX_STOP
Video transmission has stopped. This occurs after a negotiated stop of video transmission when the underlying protocol has actually stopped transmitting video to the remote party.
See also:
Constant Value: 4 (0x00000004)
SESSION_MODIFY_REQUEST_FAIL
public static final int SESSION_MODIFY_REQUEST_FAIL
Session modify request failed.
Constant Value: 2 (0x00000002)
SESSION_MODIFY_REQUEST_INVALID
public static final int SESSION_MODIFY_REQUEST_INVALID
Session modify request ignored due to invalid parameters.
Constant Value: 3 (0x00000003)
SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE
public static final int SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE
Session modify request rejected by remote user.
Constant Value: 5 (0x00000005)
SESSION_MODIFY_REQUEST_SUCCESS
public static final int SESSION_MODIFY_REQUEST_SUCCESS
Session modify request was successful.
Constant Value: 1 (0x00000001)
SESSION_MODIFY_REQUEST_TIMED_OUT
public static final int SESSION_MODIFY_REQUEST_TIMED_OUT
Session modify request timed out.
Constant Value: 4 (0x00000004)
Public constructors
Public methods
changeCameraCapabilities
public void changeCameraCapabilities (VideoProfile.CameraCapabilities cameraCapabilities)
Used to inform listening InCallService
implementations when the capabilities of
the current camera have changed.
The VideoProvider
should call this in response to
VideoProvider.onRequestCameraCapabilities()
, or when the current camera is
changed via VideoProvider.onSetCamera(String)
.
Received by the InCallService
via
InCallService.VideoCall.Callback.onCameraCapabilitiesChanged(
VideoProfile.CameraCapabilities)
.
Parameters | |
---|---|
cameraCapabilities |
VideoProfile.CameraCapabilities : The new camera capabilities. |
changePeerDimensions
public void changePeerDimensions (int width, int height)
Used to inform listening InCallService
implementations when the dimensions of the
peer's video have changed.
This could occur if, for example, the peer rotates their device, changing the aspect ratio of the video, or if the user switches between the back and front cameras.
Received by the InCallService
via
InCallService.VideoCall.Callback.onPeerDimensionsChanged(int, int)
.
Parameters | |
---|---|
width |
int : The updated peer video width. |
height |
int : The updated peer video height. |
changeVideoQuality
public void changeVideoQuality (int videoQuality)
Used to inform listening InCallService
implementations when the video quality
of the call has changed.
Received by the InCallService
via
InCallService.VideoCall.Callback.onVideoQualityChanged(int)
.
Parameters | |
---|---|
videoQuality |
int : The updated video quality. Valid values:
VideoProfile.QUALITY_HIGH ,
VideoProfile.QUALITY_MEDIUM ,
VideoProfile.QUALITY_LOW ,
VideoProfile.QUALITY_DEFAULT . |
handleCallSessionEvent
public void handleCallSessionEvent (int event)
Used to inform listening InCallService
implementations when the
VideoProvider
reports a call session event.
Received by the InCallService
via
InCallService.VideoCall.Callback.onCallSessionEvent(int)
.
onRequestCameraCapabilities
public abstract void onRequestCameraCapabilities ()
Issues a request to the VideoProvider
to retrieve the camera capabilities.
The VideoProvider
should respond by communicating the capabilities of the chosen
camera via
VideoProvider.changeCameraCapabilities(VideoProfile.CameraCapabilities)
.
Sent from the InCallService
via
InCallService.VideoCall.requestCameraCapabilities()
.
onRequestConnectionDataUsage
public abstract void onRequestConnectionDataUsage ()
Issues a request to the VideoProvider
to retrieve the current data usage for the
video component of the current Connection
.
The VideoProvider
should respond by communicating current data usage, in bytes,
via VideoProvider.setCallDataUsage(long)
.
Sent from the InCallService
via
InCallService.VideoCall.requestCallDataUsage()
.
onSendSessionModifyRequest
public abstract void onSendSessionModifyRequest (VideoProfile fromProfile, VideoProfile toProfile)
Issues a request to modify the properties of the current video session.
Example scenarios include: requesting an audio-only call to be upgraded to a
bi-directional video call, turning on or off the user's camera, sending a pause signal
when the InCallService
is no longer the foreground application.
If the VideoProvider
determines a request to be invalid, it should call
receiveSessionModifyResponse(int, android.telecom.VideoProfile, android.telecom.VideoProfile)
to report the
invalid request back to the InCallService
.
Where a request requires confirmation from the user of the peer device, the
VideoProvider
must communicate the request to the peer device and handle the
user's response. receiveSessionModifyResponse(int, android.telecom.VideoProfile, android.telecom.VideoProfile)
is used to inform the InCallService
of the result of the request.
Sent from the InCallService
via
InCallService.VideoCall.sendSessionModifyRequest(VideoProfile)
.
Parameters | |
---|---|
fromProfile |
VideoProfile : The video profile prior to the request. |
toProfile |
VideoProfile : The video profile with the requested changes made. |
onSendSessionModifyResponse
public abstract void onSendSessionModifyResponse (VideoProfile responseProfile)
Provides a response to a request to change the current video session properties.
For example, if the peer requests and upgrade from an audio-only call to a bi-directional
video call, could decline the request and keep the call as audio-only.
In such a scenario, the responseProfile
would have a video state of
VideoProfile.STATE_AUDIO_ONLY
. If the user had decided to accept the request,
the video state would be VideoProfile.STATE_BIDIRECTIONAL
.
Sent from the InCallService
via
InCallService.VideoCall.sendSessionModifyResponse(VideoProfile)
in response to
a InCallService.VideoCall.Callback.onSessionModifyRequestReceived(VideoProfile)
callback.
Parameters | |
---|---|
responseProfile |
VideoProfile : The response video profile. |
onSetCamera
public abstract void onSetCamera (String cameraId)
Sets the camera to be used for the outgoing video.
The VideoProvider
should respond by communicating the capabilities of the chosen
camera via
VideoProvider.changeCameraCapabilities(VideoProfile.CameraCapabilities)
.
Sent from the InCallService
via
InCallService.VideoCall.setCamera(String)
.
Parameters | |
---|---|
cameraId |
String : The id of the camera (use ids as reported by
CameraManager.getCameraIdList() ). |
onSetDeviceOrientation
public abstract void onSetDeviceOrientation (int rotation)
Sets the device orientation, in degrees. Assumes that a standard portrait orientation of the device is 0 degrees.
Sent from the InCallService
via
InCallService.VideoCall.setDeviceOrientation(int)
.
Parameters | |
---|---|
rotation |
int : The device orientation, in degrees. |
onSetDisplaySurface
public abstract void onSetDisplaySurface (Surface surface)
Sets the surface to be used for displaying the video received from the remote device.
Sent from the InCallService
via
InCallService.VideoCall.setDisplaySurface(Surface)
.
Parameters | |
---|---|
surface |
Surface : The Surface . |
onSetPauseImage
public abstract void onSetPauseImage (Uri uri)
Provides the VideoProvider
with the Uri
of an image to be displayed to
the peer device when the video signal is paused.
Sent from the InCallService
via
InCallService.VideoCall.setPauseImage(Uri)
.
Parameters | |
---|---|
uri |
Uri : URI of image to display. |
onSetPreviewSurface
public abstract void onSetPreviewSurface (Surface surface)
Sets the surface to be used for displaying a preview of what the user's camera is currently capturing. When video transmission is enabled, this is the video signal which is sent to the remote device.
Sent from the InCallService
via
InCallService.VideoCall.setPreviewSurface(Surface)
.
Parameters | |
---|---|
surface |
Surface : The Surface . |
onSetZoom
public abstract void onSetZoom (float value)
Sets the camera zoom ratio.
Sent from the InCallService
via InCallService.VideoCall.setZoom(float)
.
Parameters | |
---|---|
value |
float : The camera zoom ratio; for the current camera, should be a value in the
range defined by
CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE . |
receiveSessionModifyRequest
public void receiveSessionModifyRequest (VideoProfile videoProfile)
Used to inform listening InCallService
implementations when the
VideoProvider
receives a session modification request.
Received by the InCallService
via
InCallService.VideoCall.Callback.onSessionModifyRequestReceived(VideoProfile)
,
Parameters | |
---|---|
videoProfile |
VideoProfile : The requested video profile. |
receiveSessionModifyResponse
public void receiveSessionModifyResponse (int status, VideoProfile requestedProfile, VideoProfile responseProfile)
Used to inform listening InCallService
implementations when the
VideoProvider
receives a response to a session modification request.
Received by the InCallService
via
InCallService.VideoCall.Callback.onSessionModifyResponseReceived(int,
VideoProfile, VideoProfile)
.
Parameters | |
---|---|
status |
int : Status of the session modify request. Valid values are
VideoProvider.SESSION_MODIFY_REQUEST_SUCCESS ,
VideoProvider.SESSION_MODIFY_REQUEST_FAIL ,
VideoProvider.SESSION_MODIFY_REQUEST_INVALID ,
VideoProvider.SESSION_MODIFY_REQUEST_TIMED_OUT ,
VideoProvider.SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE |
requestedProfile |
VideoProfile : The original request which was sent to the peer device. |
responseProfile |
VideoProfile : The actual profile changes agreed to by the peer device. |
setCallDataUsage
public void setCallDataUsage (long dataUsage)
Used to inform listening InCallService
implementations when the data usage of the
video associated with the current Connection
has changed.
This could be in response to a preview request via
onRequestConnectionDataUsage()
, or as a periodic update by the
VideoProvider
. Where periodic updates of data usage are provided, they should be
provided at most for every 1 MB of data transferred and no more than once every 10 sec.
Received by the InCallService
via
InCallService.VideoCall.Callback.onCallDataUsageChanged(long)
.
Parameters | |
---|---|
dataUsage |
long : The updated data usage (in bytes). Reported as the cumulative bytes
used since the start of the call. |