Maven Dependency



<code>compile(group: 'sg.com.temasys.skylink.sdk', name: 'skylink_sdk', version: '0.10.0-RELEASE', ext: 'aar'){
transitive = true
} </code>


CDN links

- Skylink for Android SDK AAR:
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.10.0/skylink_sdk-0.10.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.10.0/libjingle_peerconnection.jar
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.10.0/arm64-v8a/libjingle_peerconnection_so.so
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.10.0/armeabi-v7a/libjingle_peerconnection_so.so
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.10.0/x86/libjingle_peerconnection_so.so
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.10.0/x86_64/libjingle_peerconnection_so.so

Readme and other docs:
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.10.0/readme.md
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.10.0/Android_SDK_Version_Required.md
https://cdn.temasys.com.sg/skylink/skylinksdk/android/0.10.0/SkylinkSDK_Android_Studio_Setup.md

API Documentation
https://cdn.temasys.com.sg/skylink/skylinksdk/android/latest/doc/reference/packages.html


Notable changes


General

- Implemented Runtime Permission requests compatible with Android 6.
-- To enable Runtime Permission requests, users would have to:
--- Target Android API 23 and above.
--- Implement Android method onRequestPermissionsResult.
--- Implement OsListener and the 3 methods in it.
---- Check out the examples in Sample App Fragments where OsListener was implemented (VideoCall, MultiPartyVideo, AudioCall, FileTransfer).
---- There are standardised methods in Sample App Utils that each Fragment makes use of to implement OsListener.
- Added methods to obtain WebRTC Stats and get transfer speeds.
- Updated readme.md for OsListener usage.
- targetSdkVersion is now 23.
- compileSdkVersion is now 25.


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:

init
- All Listeners will be removed (if any exist), i.e. set to null.

processPermissionsResult [NEW]
- Process Android 6 Runtime permission results received by App.

getTransferSpeeds [NEW]
- Request for instantaneous transfer speed(s) of media stream(s), at the moment of request.

getWebrtcStats [NEW]
- Request for WebRTC statistics of the specified media stream.

Skylink Listener changes:

OsListener [NEW]
- Must be implemented to enable Android 6 (>= API 23) Runtime Permissions.
- Apps that target below Android API 23 MUST NOT implement OsListener.
.onPermissionRequired
- Inform app about specific permission required by SDK.
.onPermissionGranted
- Inform app that specific permission had been granted.
.onPermissionDenied
- Inform app that specific permission had been denied.

StatsListener [NEW]
- Must be implemented to get WebRTC stats and transfer speeds.
.onTransferSpeedReceived
- Inform app about transfer speed(s) calculated.
.onWebrtcStatsReceived
- Inform app about WebRTC stats obtained.


SkylinkConfig API changes:

- Nil.


Other SDK changes:

- Improved usage of Info and Errors.
-- Errors will be delivered via lifeCycleListener.onWarning instead of lifeCycleListener.onReceiveLog.
-- New Errors.VIDEO_UNABLE_TO_START_CAMERA_ERROR replaced:
--- Info.CAM_START_NO and Errors.VIDEO_UNABLE_TO_START
-- New Errors.VIDEO_UNABLE_TO_SWITCH_CAMERA_ERROR replaced:
--- Info.CAM_SWITCH_NO and Errors.VIDEO_SWITCH_CAMERA_ERROR
- Added new Errors codes:
-- AUDIO_UNABLE_TO_START_PERM
-- VIDEO_UNABLE_TO_START_PERM
-- DC_UNABLE_TO_RECEIVE_FILE_PERM
-- DC_UNABLE_TO_SEND_FILE_PERM
-- STATS_GET_TRANSFER_SPEED_ERROR
-- STATS_GET_WEBRTC_STATS_ERROR
- Added new Info code for permission related messages:
-- PERM_AUDIO_MIC
-- PERM_VIDEO_CAM
-- PERM_STORAGE_READ
-- PERM_STORAGE_WRITE


Sample App

- Upgraded to the newly released Skylink SDK for Android 0.10.0.
- Updated targetSdkVersion to 23, compileSdkVersion to 25.
-- Supports Android Runtime permissions on Android 6.0 and above.
- Used new SkylinkConnection API(s)
-- processPermissionsResult
--- Called in Utils#onRequestPermissionsResultHandler to handle Android's onRequestPermissionsResult.
- Implemented new Listener, OsListener.
-- In fragments VideoCall, MultiPartyVideoCall, AudioCall, FileTransfer.
-- Handled the methods of OsListener using methods provided in SA Utils:
--- onPermissionRequired via onPermissionRequiredHandler
--- onPermissionGranted via onPermissionGrantedHandler
--- onPermissionDenied via onPermissionDeniedHandler
- Created means in Utils to put permission requests in a queue and process them one at a time from the queue.
-- This is to avoid Android giving empty permissions results array at the onRequestPermissionsResult callback when more than 1 permission is processed at the same time.
-- Each request is handled by a new class PermRequester that stores parameters required for making permission request and have methods to perform permission request.
-- PermRequesters are queued in ArrayDeque permQ.
-- Request is created when handling OsListener#onPermissionRequired.
-- Request is considered completed when cancelled or when onRequestPermissionsResult is called.
- Used new SkylinkConnection API(s)
-- getWebrtcStats
--- Called in MultiPartyVideoCallFragment to request for WebRTC statistics of the specified media streams
-- getTransferSpeeds
--- Called in MultiPartyVideoCallFragment to request for transfer speeds of the specified media streams.
- Implemented new Listener, StatsListener.
-- In MultiPartyVideoCallFragment.
-- Handled the methods of StatsListener:
--- onTransferSpeedReceived
--- onWebrtcStatsReceived
- Added ability to log WebRTC stats and transfer speeds in MultiPartyVideoCallFragment.
-- Tap on remote Peer video.
-- In Pop up menu,
--- To log WebRTC stats for this Peer, select "WebRTC stats (OFF)".
---- WebRTC stats will be logged for this Peer (both sending and receiving).
---- Via new SkylinkConnection API getWebrtcStats.
---- To turn off logging, in the same Pop up menu, select "WebRTC stats (ON)".
---- If not turned off, logging of WebRTC stats will continue to occur at regular intervals.
--- To log transfer speeds for this Peer, select "Transfer speed".
---- Transfer speeds for all media streams with this Peer will be logged in kilobit per second (kbps).
---- Via new SkylinkConnection API getTransferSpeeds.
- Enhanced FileTransferFragment to enable manual selection of file to send.
-- After selecting Peer(s) to send to, click on file path and enter desired file path.
-- File path will be validated to be a file before change is accepted.
- Improved usage of Info and Errors.
-- Errors will be delivered via lifeCycleListener.onWarning instead of lifeCycleListener.onReceiveLog.
-- New Errors.VIDEO_UNABLE_TO_START_CAMERA_ERROR replaced:
--- Info.CAM_START_NO and Errors.VIDEO_UNABLE_TO_START
-- New Errors.VIDEO_UNABLE_TO_SWITCH_CAMERA_ERROR replaced:
--- Info.CAM_SWITCH_NO and Errors.VIDEO_SWITCH_CAMERA_ERROR