in src/main/java/com/amazonaws/kinesisvideo/demoapp/activity/WebRtcActivity.java [390:488]
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Intent intent = getIntent();
mChannelArn = intent.getStringExtra(KEY_CHANNEL_ARN);
mWssEndpoint = intent.getStringExtra(KEY_WSS_ENDPOINT);
mClientId = intent.getStringExtra(KEY_CLIENT_ID);
if (mClientId == null || mClientId.isEmpty()) {
mClientId = UUID.randomUUID().toString();
}
master = intent.getBooleanExtra(KEY_IS_MASTER, true);
isAudioSent = intent.getBooleanExtra(KEY_SEND_AUDIO, false);
ArrayList<String> mUserNames = intent.getStringArrayListExtra(KEY_ICE_SERVER_USER_NAME);
ArrayList<String> mPasswords = intent.getStringArrayListExtra(KEY_ICE_SERVER_PASSWORD);
ArrayList<Integer> mTTLs = intent.getIntegerArrayListExtra(KEY_ICE_SERVER_TTL);
ArrayList<List<String>> mUrisList = (ArrayList<List<String>>) intent.getSerializableExtra(KEY_ICE_SERVER_URI);
mRegion = intent.getStringExtra(KEY_REGION);
mCameraFacingFront = intent.getBooleanExtra(KEY_CAMERA_FRONT_FACING, true);
rootEglBase = EglBase.create();
//TODO: add ui to control TURN only option
PeerConnection.IceServer stun = PeerConnection
.IceServer
.builder(String.format("stun:stun.kinesisvideo.%s.amazonaws.com:443", mRegion))
.createIceServer();
peerIceServers.add(stun);
if (mUrisList != null) {
for (int i = 0; i < mUrisList.size(); i++) {
String turnServer = mUrisList.get(i).toString();
if( turnServer != null) {
IceServer iceServer = IceServer.builder(turnServer.replace("[", "").replace("]", ""))
.setUsername(mUserNames.get(i))
.setPassword(mPasswords.get(i))
.createIceServer();
Log.d(TAG, "IceServer details (TURN) = " + iceServer.toString());
peerIceServers.add(iceServer);
}
}
}
setContentView(R.layout.activity_webrtc_main);
PeerConnectionFactory.initialize(PeerConnectionFactory
.InitializationOptions
.builder(this)
.createInitializationOptions());
peerConnectionFactory =
PeerConnectionFactory.builder()
.setVideoDecoderFactory(new DefaultVideoDecoderFactory(rootEglBase.getEglBaseContext()))
.setVideoEncoderFactory(new DefaultVideoEncoderFactory(rootEglBase.getEglBaseContext(), ENABLE_INTEL_VP8_ENCODER, ENABLE_H264_HIGH_PROFILE))
.createPeerConnectionFactory();
videoCapturer = createVideoCapturer();
// Local video view
localView = findViewById(R.id.local_view);
localView.init(rootEglBase.getEglBaseContext(), null);
localView.setEnableHardwareScaler(true);
videoSource = peerConnectionFactory.createVideoSource(false);
SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create(Thread.currentThread().getName(), rootEglBase.getEglBaseContext());
videoCapturer.initialize(surfaceTextureHelper, this.getApplicationContext(), videoSource.getCapturerObserver());
localVideoTrack = peerConnectionFactory.createVideoTrack(VideoTrackID, videoSource);
localVideoTrack.addSink(localView);
if(isAudioSent) {
AudioSource audioSource = peerConnectionFactory.createAudioSource(new MediaConstraints());
localAudioTrack = peerConnectionFactory.createAudioTrack(AudioTrackID, audioSource);
localAudioTrack.setEnabled(true);
}
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
originalAudioMode = audioManager.getMode();
originalSpeakerphoneOn = audioManager.isSpeakerphoneOn();
// Start capturing video
videoCapturer.startCapture(VIDEO_SIZE_WIDTH, VIDEO_SIZE_HEIGHT, VIDEO_FPS);
localVideoTrack.setEnabled(true);
remoteView = findViewById(R.id.remote_view);
remoteView.init(rootEglBase.getEglBaseContext(), null);
dataChannelText = findViewById(R.id.data_channel_text);
sendDataChannelButton = findViewById(R.id.send_data_channel_text);
createNotificationChannel();
}