getIceServers method

Future<void> getIceServers()

Implementation

Future<void> getIceServers() async {
  AwsClientCredentials awsCredentials = AwsClientCredentials(
    accessKey: _config.credentials!.accessKeyId,
    secretKey: _config.credentials!.secretAccessKey,
    sessionToken: _config.credentials!.sessionToken,
  );

  KinesisVideo kinesisVideoClient = KinesisVideo(region: _config.region, credentials: awsCredentials);

  GetSignalingChannelEndpointOutput getSignalingChannelEndpointOutput = await kinesisVideoClient.getSignalingChannelEndpoint(
    channelARN: _config.channelARN,
    singleMasterChannelEndpointConfiguration: SingleMasterChannelEndpointConfiguration(
      role: ChannelRole.viewer,
      protocols: [ChannelProtocol.https, ChannelProtocol.wss],
    ),
  );

  KVSChannels.KinesisVideoSignalingChannels service = KVSChannels.KinesisVideoSignalingChannels(
    region: _config.region,
    credentials: KVSChannels.AwsClientCredentials(
      accessKey: _config.credentials!.accessKeyId,
      secretKey: _config.credentials!.secretAccessKey,
      sessionToken: _config.credentials!.sessionToken,
    ),
    endpointUrl: getSignalingChannelEndpointOutput.resourceEndpointList?.firstWhere((element) => element.protocol == ChannelProtocol.https).resourceEndpoint,
  );

  KVSChannels.GetIceServerConfigResponse iceOutput = await service.getIceServerConfig(channelARN: _config.channelARN, clientId: getRandomClientId());

  iceServers = [
    {"urls": "stun:stun.kinesisvideo.${_config.region}.amazonaws.com:443"},
  ];

  iceOutput.iceServerList?.forEach((element) {
    iceServers!.add({"urls": element.uris, "username": element.username, "credential": element.password});
  });
}