in src/main/java/com/amazonaws/kinesisvideo/demoapp/activity/WebRtcActivity.java [522:627]
private void createLocalPeerConnection() {
PeerConnection.RTCConfiguration rtcConfig = new PeerConnection.RTCConfiguration(peerIceServers);
rtcConfig.bundlePolicy = PeerConnection.BundlePolicy.MAXBUNDLE;
rtcConfig.sdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLAN;
rtcConfig.continualGatheringPolicy = PeerConnection.ContinualGatheringPolicy.GATHER_CONTINUALLY;
rtcConfig.keyType = PeerConnection.KeyType.ECDSA;
rtcConfig.rtcpMuxPolicy = PeerConnection.RtcpMuxPolicy.REQUIRE;
rtcConfig.tcpCandidatePolicy = PeerConnection.TcpCandidatePolicy.ENABLED;
localPeer = peerConnectionFactory.createPeerConnection(rtcConfig, new KinesisVideoPeerConnection() {
@Override
public void onIceCandidate(IceCandidate iceCandidate) {
super.onIceCandidate(iceCandidate);
Message message = createIceCandidateMessage(iceCandidate);
Log.d(TAG, "Sending IceCandidate to remote peer " + iceCandidate.toString());
client.sendIceCandidate(message); /* Send to Peer */
}
@Override
public void onAddStream(MediaStream mediaStream) {
super.onAddStream(mediaStream);
Log.d(TAG, "Adding remote video stream (and audio) to the view");
addRemoteStreamToVideoView(mediaStream);
}
@Override
public void onDataChannel(DataChannel dataChannel) {
super.onDataChannel(dataChannel);
dataChannel.registerObserver(new DataChannel.Observer() {
@Override
public void onBufferedAmountChange(long l) {
// no op on receiver side
}
@Override
public void onStateChange() {
Log.d(TAG, "Remote Data Channel onStateChange: state: " + dataChannel.state().toString());
}
@Override
public void onMessage(DataChannel.Buffer buffer) {
runOnUiThread(new Runnable() {
@Override
public void run() {
byte[] bytes;
if (buffer.data.hasArray()) {
bytes = buffer.data.array();
} else {
bytes = new byte[buffer.data.remaining()];
buffer.data.get(bytes);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getApplicationContext().getResources(),
R.mipmap.ic_launcher))
.setContentTitle("Message from Peer!")
.setContentText(new String(bytes, Charset.defaultCharset()))
.setPriority(NotificationCompat.PRIORITY_MAX)
.setAutoCancel(true);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext());
// notificationId is a unique int for each notification that you must define
notificationManager.notify(mNotificationId++, builder.build());
Toast.makeText(getApplicationContext(), "New message from peer, check notification.", Toast.LENGTH_SHORT).show();
}
});
}
});
}
});
if (localPeer != null) {
localPeer.getStats(new RTCStatsCollectorCallback() {
@Override
public void onStatsDelivered(RTCStatsReport rtcStatsReport) {
Map<String, RTCStats> statsMap = rtcStatsReport.getStatsMap();
Set<Map.Entry<String, RTCStats>> entries = statsMap.entrySet();
for (Map.Entry<String, RTCStats> entry : entries) {
Log.d(TAG, "Stats: " + entry.getKey() + " ," + entry.getValue());
}
}
});
}
addDataChannelToLocalPeer();
addStreamToLocalPeer();
}