Maven Dependency
compile(group: 'sg.com.temasys.skylink.sdk', name: 'skylink_sdk', version: '0.11.0-RELEASE', ext: 'aar'){ transitive = true }
CDN Links
- Skylink for Android SDK AAR:
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.11.0/skylink_sdk-0.11.0-RELEASE.aar
- libWebRTC files (not required to download if using Android Studio set up as documented):
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.11.0/libjingle_peerconnection.jar
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.11.0/arm64-v8a/libjingle_peerconnection_so.so
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.11.0/armeabi-v7a/libjingle_peerconnection_so.so
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.11.0/x86/libjingle_peerconnection_so.so
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.11.0/x86_64/libjingle_peerconnection_so.so
- Readme and other docs:
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.11.0/readme.md
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.11.0/Android_SDK_Version_Required.md
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.11.0/SkylinkSDK_Android_Studio_Setup.md
- API Documentation
https://cdn.temasys.com.sg/skylink/skylinksdk/android/latest/doc/reference/packages.html
Notable changes
General
- Updated to use libWebRTC-21964 Chrome 65.
- Enabled local input video resolution (width, height, framerate) to be set using new libWebRTC's new API.
- Input, sent, and received video resolution can be queried via new Skylink API and Listener callbacks.
-- These callbacks can also be automatically triggered when resolution change, or camera is toggled, via SkylinkConfig setting.
- Added concept of VideoDevice which is used to specify video input source.
-- Currently there are only the front and back camera.
-- Will expand to include others like the screen in the future.
Fixes
- Improved stability when reconnecting after disconnecting.
Known Issues
- With Skylink Media Relay:
-- Mobile is unable to initiate Restart
--- Receiving screensharing from Web is not affected.
-- Users with no Audio and no Video for both send and receive configs are not supported:
--- If a Peer joins a room with NO_AUDIO_NO_VIDEO for both send and receive configs, the Peer will not be able to connect to other Peers.
--- This issue does not exist in a normal room (without Skylink Media Relay).
--- Possible workaround is for user to join room with AUDIO_ONLY or VIDEO_ONLY for setAudioVideoReceiveConfig, but mute and not display these streams when they are received.
-- Only stats of the receiving media can be obtained.
SkylinkConnection API changes:
getCurrentCameraName [NEW]
- Get the name of the current camera being used.
toggleCamera [CHANGED]
- Both versions of this method no longer throw SkylinkException.
- Both versions now trigger LifeCycleListener.onWarning if an error occurs.
-- For e.g. with errorCode 13 if local video source is not available.
isConnected [DEPRECATED]
- Use getSkylinkState() to determine if SkylinkConnection is connected.
getCaptureFormat [NEW]
- Get the SkylinkCaptureFormat that is currently being used by the camera.
getCaptureFormats [NEW]
- Get the possible capture format(s) of the specified camera device in an array.
getCurrentVideoDevice [NEW]
- Get the current VideoDevice being used.
getInputVideoResolution [NEW]
- Get the current resolution of the video being captured by the local camera and the SkylinkCaptureFormat used.
getReceivedVideoResolution [NEW]
- Get the current resolution of the video received from a specific Peer.
getSentVideoResolution [NEW]
- Get the current resolution of the video being sent to a specific Peer.
setInputVideoResolution [NEW]
- Set the camera's current captured video stream to the specified resolution.
getSkylinkState [NEW]
- Gets the current SkylinkState of the current SkylinkConnection instance.
Skylink Listener changes:
MediaListener
.onInputVideoResolutionObtained(int width, int height, int fps, SkylinkCaptureFormat captureFormat) [NEW]
- Inform app about input video resolution captured by the local camera when it starts to capture video.
- It can be triggered via:
-- Calling SkylinkConnection#getInputVideoResolution
-- When it's video dimension changes, if SkylinkConfig#isReportVideoResolutionOnChange is true.
.onReceivedVideoResolutionObtained(String peerId, int width, int height, int fps) [NEW]
- Inform app about video resolution received from remote Peer.
- It can be triggered via:
-- Calling SkylinkConnection#getReceivedVideoResolution
-- When it's video dimension changes, if SkylinkConfig#isReportVideoResolutionOnChange is true.
.onSentVideoResolutionObtained(String peerId, int width, int height, int fps) [NEW]
- Inform app about video resolution sent to remote Peer.
- It can be triggered via:
-- Calling SkylinkConnection#getSentVideoResolution
-- When it's video dimension changes, if SkylinkConfig#isReportVideoResolutionOnChange is true.
SkylinkConfig API changes:
Enum VideoDevice [NEW]
- A list of devices that can be the source of a video stream.
[is|set]AudioAutoGainControl [NEW]
- Get/set whether audio auto gain control by WebRTC is enabled.
- Enabled by default.
[is|set]AudioEchoCancellation [NEW]
- Get/set whether audio echo cancellation by WebRTC is enabled.
- Enabled by default.
[is|set]AudioHighPassFilter [NEW]
- Get/set whether audio high pass filter by WebRTC is enabled.
- Enabled by default.
[is|set]AudioNoiseSuppression [NEW]
- Get/set whether audio noise suppression by WebRTC is enabled.
- Enabled by default.
[is|set]AudioStereo [NEW]
- Get/set whether stereo audio is enabled.
[is|set]StereoAudio [DEPRECATED]
- Use [is|set]AudioStereo instead.
[get|set]DefaultVideoDevice [NEW]
- Get/set the default VideoDevice from which to obtain the local video stream.
- Deprecates setDefaultCameraBack and setDefaultCameraFront.
setDefaultCameraBack [DEPRECATED]
- Use setDefaultVideoDevice with VideoDevice.CAMERA_BACK instead.
setDefaultCameraFront [DEPRECATED]
- Use setDefaultVideoDevice with VideoDevice.CAMERA_FRONT instead.
[is|set]ReportVideoResolutionOnChange [NEW]
- Get/set if video resolutions are automatically reported when video dimensions change.
Other SDK changes:
- Added new classes:
-- SkylinkCaptureFormat that represent a video CaptureFormat with important fields:
--- width, height: in number of pixels
--- fpksMin, fpksMax: Min and max framerate in number frames per 1000 seconds.
-- SkylinkVideoResolution that represents a video resolution.
--- width, height: in number of pixels
--- fps: framerate in number frames per second.
-- Enum SkylinkState of possible states of the SkylinkConnection instance:
--- CONNECTING
---- In a process that will lead to being connected to room, if successful.
--- CONNECTED
---- Stably connected to room.
--- DISCONNECTING
---- In a process that will lead to being disconnected from room, if successful.
---- In general, avoid calling any Skylink APIs when in this state.
--- DISCONNECTED
---- Disconnected from room.
- Added new Errors codes:
-- VIDEO_UNABLE_TO_START_CAMERA_ERROR
-- VIDEO_UNABLE_TO_START_SKYLINK_ERROR
Sample App
- Upgraded to the newly released Skylink SDK for Android 0.11.0.
- Used new SkylinkConnection API(s)
-- In all samples:
--- getSkylinkState
-- In VideoCallFragment, MultiPartyVideoCallFragment:
--- getInputVideoResolution
--- getReceivedVideoResolution
--- getSentVideoResolution
-- In VideoCallFragment:
--- getCurrentCameraName
--- getCaptureFormat
--- getCaptureFormats
--- getCurrentVideoDevice
--- setInputVideoResolution
- Implemented new MediaListener methods.
-- In AudioCallFragment, VideoCallFragment, MultiPartyVideoCallFragment.
-- Handled the methods of MediaListener:
--- onInputVideoResolutionObtained
--- onReceivedVideoResolutionObtained
--- onSentVideoResolutionObtained
- Used new SkylinkConfig API(s)
-- In VideoCallFragment, MultiPartyVideoCallFragment:
--- setReportVideoResolutionOnChange
---- Set to true to enable video resolution to be automatically reported when video dimension changes.
- Added Utils method isConnectingOrConnected.
-- Determines if we are currently connected or at least in process of connecting, by checking current SkylinkConnection.SkylinkState.
- Added ability to adjust (input) and display input, sent, and received video resolution in VideoCallFragment.
-- Added SeekBars and TextViews for controlling resolution dimensions (width, height in pixels) and framerate in fps, frame per second).
--- TextViews display input, sent and received video resolution.
--- Change SeekBars position to change resolution dimensions and framerate.
---- SeekBars logic for setting new video resolutions:
----- onProgressChanged: Update TextView UI value.
----- onStopTrackingTouch: Call SDK to update resolution via setInputVideoResolution.
- Added ability to trigger display of input, sent, and received video resolution in MultiPartyVideoCallFragment.
-- To get current input video resolutions:
--- Tap on local Peer video.
--- In Pop up menu, select "INPUT VIDEO RESOLUTIONS".
--- This will call Skylink APIs to get the input video resolution.
-- To get current sent and received video resolutions to a specific remote Peer:
--- Tap on specific remote Peer video.
--- In Pop up menu, select either "Video Res: Sent" or "Video Res: Recv".
--- This will call Skylink APIs to get the video resolution sent to or received from the remote Peer.
- Improved UIs in VideoCallFragment and MultiPartyVideoCallFragment:
-- Both local and remote views show true aspect ratios.
-- Allowed entire local and remote views to be shown.
- Added compileOptions to build.gradle for Java 8, due to requirement of new libWebRTC.
-- sourceCompatibility 1.8
-- targetCompatibility 1.8
- Fixes:
-- Fixed error in getting file path when file path is manually entered on FileTransferFragment UI.