(雑ですが備忘録です)
ビルド&実行
以下のGithubに沿ってCognitoの設定を行い、サンプルコードをビルドする。
https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-android
Master起動後に、別のAndroid端末でViewerを起動すると、ビデオ通話ができました。
また、Kinesis Video Streams のSignaling Channelsから、CloudWatchのログ等が確認できました。
コード上のメモ
チャネルARNの取得
mChannelArn = describeSignalingChannelResult.getChannelInfo().getChannelARN();
Channel ARN is arn:aws:kinesisvideo:ap-northeast-1:123456789:channel/demo-channel/1575874258965
ARNの末尾の 1575874258965
はUnix Time Stampぽいです
Endpoint 取得
上記のARNやロール(MasterかViwerか)を設定し、リソースエンドポイントを取得しています。
GetSignalingChannelEndpointResult getSignalingChannelEndpointResult = awsKinesisVideoClient.getSignalingChannelEndpoint(
new GetSignalingChannelEndpointRequest()
.withChannelARN(mChannelArn)
.withSingleMasterChannelEndpointConfiguration(
new SingleMasterChannelEndpointConfiguration()
.withProtocols("WSS", "HTTPS")
.withRole(role)));
{ResourceEndpointList: [{Protocol: WSS,ResourceEndpoint: wss://<id>.kinesisvideo.ap-northeast-1.amazonaws.com}, {Protocol: HTTPS,ResourceEndpoint: https://<id>.kinesisvideo.ap-northeast-1.amazonaws.com}]}
こちらで取得したHTTPSのエンドポイントを使って、AWSKinesisVideoSignalingClient
のインスタンスを作成し、ICEサーバーの情報を取得しています。
ICE Server list
getIceServerConfigResult.getIceServerList()
手元で出力されたログをみたところ、2つのIPをturnを使って取得しているようでした。
{Uris: [turn:12.34.56.78:443],Username: xxx,Password: XXX,Ttl: 300}
{Uris: [turn:23.45.67.89:443],Username: yyy,Password: YYY,Ttl: 300}
WebRtcActivity.java
PeerConnection.IceServer stun = PeerConnection
.IceServer
.builder(String.format("stun:stun.kinesisvideo.%s.amazonaws.com:443", mRegion))
.createIceServer();
peerIceServers.add(stun);
Stun サーバーについてはは、リージョンごとに固定のエンドポイントを指定しています。
上記の情報等を用いて、 PeerConnectionFactory.createPeerConnection()
でピア接続を行います。