agora.io WebSDK2.5.1の新機能

#概要
2019/2/19にagora.io WebSDK2.5.1がリリースされました。
多くの機能追加がありましたのでピックアップして紹介します。
[公式リリースノート(英文)](https://docs.agora.io/en/Video/release_web_video?platform=Web)


##統計情報取得関連
1.ビデオ通話の統計情報取得
以下のコードで通話時間、参加人数、送受信データ量が取得できます。
(Chromeのみサポートしています)

```javascript
function getSessionStats(){
  client.getSessionStats((stats) => {
    console.log(`Current Session Duration: ${stats.Duration}`); 
    console.log(`Current Session UserCount: ${stats.UserCount}`);
    console.log(`Current Session SendBytes: ${stats.SendBytes}`);
    console.log(`Current Session RecvBytes: ${stats.RecvBytes}`);
    console.log(`Current Session SendBitrate: ${stats.SendBitrate}`);
    console.log(`Current Session RecvBitrate: ${stats.RecvBitrate}`);
  });
}
```


2.ネットワーク品質の情報取得
以下のコードでUp/Downのネットワーク品質が6段階で取得できます。

```javascript
client.on('network-quality', function(stats) {
  console.log('downlinkNetworkQuality', stats.downlinkNetworkQuality);
  console.log('uplinkNetworkQuality', stats.uplinkNetworkQuality);
});
```


3.リモート拠点のオーディオ情報取得
リモート拠点のオーディオコーデック、パケットロス、帯域等が取得できます。

```javascript
client.getRemoteAudioStats((remoteAudioStatsMap) => {
  for(var uid in remoteAudioStatsMap){
    console.log(`Audio CodecType from ${uid}: ${remoteAudioStatsMap[uid].CodecType}`);
    console.log(`Audio End2EndDelay from ${uid}: ${remoteAudioStatsMap[uid].End2EndDelay}`);
    console.log(`Audio MuteState from ${uid}: ${remoteAudioStatsMap[uid].MuteState}`);
    console.log(`Audio PacketLossRate from ${uid}: ${remoteAudioStatsMap[uid].PacketLossRate}`);
    console.log(`Audio RecvBitrate from ${uid}: ${remoteAudioStatsMap[uid].RecvBitrate}`);
    console.log(`Audio RecvLevel from ${uid}: ${remoteAudioStatsMap[uid].RecvLevel}`);
    console.log(`Audio TotalFreezeTime from ${uid}: ${remoteAudioStatsMap[uid].TotalFreezeTime}`);
    console.log(`Audio TotalPlayDuration from ${uid}: ${remoteAudioStatsMap[uid].TotalPlayDuration}`);
    console.log(`Audio TransportDelay from ${uid}: ${remoteAudioStatsMap[uid].TransportDelay}`);
  }
});
```

同様にClient.getRemoteVideoStatsでリモートのビデオ情報、Client.getLocalVideoStatsでローカルのビデオ情報、Client.getTransportStatsでネットワークの種別情報等が取得できます。

##映像/音声の受信処理
今までは映像と音声の取得についてはまとめられていましたが、Client.subscribeにoptionが追加され、映像のみ取得、音声のみ取得という処理が可能になりました。

```javascript
//映像のみ取得
client.subscribe(stream, {video: true, audio: false});

//音声のみ取得
client.subscribe(stream, {video: false, audio: true});
```

##CDN等からの外部映像取得
RTMPやHLS等、CDNから配信されている映像ストリームを再生できます。
(Nativeに既に実装済みの機能となります）

```javascript
var InjectStreamConfig = {
  width: 0,
  height: 0,
  videoGop: 30,
  videoFramerate: 15,
  videoBitrate: 400,
  audioSampleRate: 44100,
  audioChannels: 1,
};
client.addInjectStreamUrl("rtmp://SERVER/APP/STREAM", InjectStreamConfig);
```

##ユーザー権限
配信者か視聴者の権限付与ができます。視聴者は映像配信はできず、受信のみ可能になります。

```javascript
client.setClientRole('host', function() {
  console.log("setHost success");
}, function(e) {
  console.log("setHost failed", e);
});
```

##Agoraサーバーとの接続状況確認
Agoraサーバーとの接続状況が確認できます。

```javascript
client.getConnectionState()
```

##Chrome70以上とSafariの自動再生ポリシー対策
Chrome 70+およびSafariでは、音声付きの映像ストリームは、ユーザーの操作によってトリガーされるまで再生されません。ユーザーの操作なしで映像を再生したい場合は、ミュートフラグをtrueに設定すると、映像は自動的に無音で再生されます。

```javascript
  client.on('stream-subscribed', function (evt) {
    var stream = evt.stream;
    console.log("Subscribe remote stream successfully: " + stream.getId());
    if ($('div#video #agora_remote'+stream.getId()).length === 0) {
      $('div#video').append('<div id="agora_remote'+stream.getId()+'" style="float:left; width:810px;height:607px;display:inline-block;"></div>');
    }
    stream.play('agora_remote' + stream.getId(),{muted:true});
  });
```



#最後に
[**agora.ioに関するお問い合わせはこちらから**](https://jp.vcube.com/lp/agora?utm_campaign=Agora&utm_source=Qiita&arc_id=1374079a0c52ff667102)
[<img width="912" alt="スクリーンショット 0001-08-15 13.41.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300377/5d815376-9b89-08fa-9434-6fa7e8e67bcf.png">](https://jp.vcube.com/lp/agora?utm_campaign=Agora&utm_source=Qiita&arc_id=1374079a0c52ff667102)