# FAQ

## 一般

### Sora Android SDK のライセンスはなんですか？

[Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.html) です。

### Sora Android SDK は WebRTC SFU Sora 以外の SFU にも利用できますか？

WebRTC SFU Sora のシグナリング方式に対応している SFU であれば利用できます。

### サンプルコードはありますか?

あります。  をご確認ください。

## 設定

### Sora Android SDK が対応している音声コーデックを教えてください

Sora Android SDK は以下の音声コーデックに対応しています。

- Opus

### Sora Android SDK が対応している映像コーデックを教えてください

Sora Android SDK は以下の映像コーデックに対応しています。

- VP8
- VP9
- AV1
- H.264
- H.265

### H.264 と H.265 を利用する条件はありますか？

あります。 H.264 または H.265 を利用するには Android デバイスがハードウェアアクセラレーターを搭載している必要があります。

### ハードウェアアクセラレーターを利用するにはどうすればいいですか？

ハードウェアアクセラレーターを利用する際は以下の条件をすべて満たしている必要があります。

- Android デバイスが利用したいコーデックのハードウェアアクセラレーターを搭載していること
- SDK が利用したいコーデックのハードウェアアクセラレーターに対応していること

### Android デバイスが対応している映像コーデックを確認する方法はありますか?

`HardwareVideoEncoderFactory` または `HardwareVideoDecoderFactory` クラスの `getSupportedCodecs` メソッドを使って確認できます。
前者のクラスはエンコーダー、後者のクラスはデコーダーの対応しているコーデックの一覧を返します。

以下は Sora Android SDK のサンプルで、対応しているコーデックの一覧をログに出力している例です。


```
...
// 利用可能なコーデックの一覧
// デコーダー (受信)
RTCComponentFactory     jp.shiguredo.sora.sample             D  decoderFactory supported codec: VP8 {}
RTCComponentFactory     jp.shiguredo.sora.sample             D  decoderFactory supported codec: VP9 {profile-id=0}
...
// エンコーダー (送信)
RTCComponentFactory     jp.shiguredo.sora.sample             D  encoderFactory supported codec: VP8 {}
RTCComponentFactory     jp.shiguredo.sora.sample             D  encoderFactory supported codec: AV1 {}
RTCComponentFactory     jp.shiguredo.sora.sample             D  encoderFactory supported codec: VP9 {profile-id=0}
RTCComponentFactory     jp.shiguredo.sora.sample             D  encoderFactory supported codec: H264 {level-asymmetry-allowed=1, profile-level-id=42e01f, packetization-mode=1}
RTCComponentFactory     jp.shiguredo.sora.sample             D  encoderFactory supported codec: H265 {}
...
```

`getSupportedCodecs` は Android の MediaCodec API を利用しています。
Google Play ストアでは MediaCodec API を利用してデバイスのコーデックの一覧を表示するアプリケーションが配布されています。
そのようなアプリケーションを利用することで、詳細な情報を確認することができます。

### 特定の解像度が利用できません

Android デバイスのハードウェアアクセラレーターの問題で、指定した解像度を利用できないことがあります。

エンコーダー/デコーダーの初期化時に例外が発生したり、
エンコード/デコード処理が失敗して映像が正常に送受信されないケースがあります。

> **ヒント**
>
> 160x120 など低めの解像度で問題が起きることが多いです。

> **注釈**
>
> 問題が発生した場合は Discord へフィードバックして頂けると助かります。

正常に動作しない端末一覧は [正常に動作しない場合がある端末](known_issues.html#06d05e) をご確認ください。

### 受信したストリームと Sora のコネクション ID を紐づける方法はありますか？

受信したストリームから Sora のコネクション ID を取得できます。

SoraMediaChannel のコールバックイベントである [onAddRemoteStream()](https://shiguredo.github.io/sora-android-sdk/sora-android-sdk/jp.shiguredo.sora.sdk.channel/-sora-media-channel/-listener/on-add-remote-stream.html) から受信したストリーム( [org.webrtc.MediaStream](https://webrtc.googlesource.com/src/+/refs/heads/main/sdk/android/api/org/webrtc/MediaStream.java) ) が連携されます。
Sora の仕様では [org.webrtc.MediaStream](https://webrtc.googlesource.com/src/+/refs/heads/main/sdk/android/api/org/webrtc/MediaStream.java) の id にはそのストリームを配信しているクライアントのコネクション ID が設定されています。


### 自分の接続のコネクション ID を取得することはできますか？

SoraMediaChannel のコールバックイベントである [onOfferMessage()](https://shiguredo.github.io/sora-android-sdk/sora-android-sdk/jp.shiguredo.sora.sdk.channel/-sora-media-channel/-listener/on-offer-message.html) から自分の接続のコネクション ID を取得できます。

```kotlin
private val channelListener = object : SoraMediaChannel.Listener {

   override fun onOfferMessage(mediaChannel: SoraMediaChannel, offer: OfferMessage) {
      // Sora が生成したコネクション ID を取得する
      connectionId = offer.connectionId
   }
}
```

### 受信したストリーム毎に音量を変更する方法はありますか？

> **警告**
>
> libwebrtc ライブラリの仕様について言及がありますが正確性は保証されません。

SoraMediaChannel のコールバックイベントである [onAddRemoteStream()](https://shiguredo.github.io/sora-android-sdk/sora-android-sdk/jp.shiguredo.sora.sdk.channel/-sora-media-channel/-listener/on-add-remote-stream.html) から受信したストリーム( [org.webrtc.MediaStream](https://webrtc.googlesource.com/src/+/refs/heads/main/sdk/android/api/org/webrtc/MediaStream.java) ) が連携されます。
Sora は、1 つの [org.webrtc.MediaStream](https://webrtc.googlesource.com/src/+/refs/heads/main/sdk/android/api/org/webrtc/MediaStream.java) について 1 つの音声トラック( [org.webrtc.AudioTrack](https://webrtc.googlesource.com/src/+/refs/heads/main/sdk/android/api/org/webrtc/AudioTrack.java) ) を設定します。
この音声トラックには音量を変更するための API が用意されており、この API を利用することで音量を変更することができます。

```kotlin
// SoraMediaChannel からのコールバックイベントを受け取るリスナー
private val channelListener = object : SoraMediaChannel.Listener {

  // 受信したストリームが追加されたときに呼び出されるコールバック
  override fun onAddRemoteStream(mediaChannel: SoraMediaChannel, ms: MediaStream) {
      // Sora は MediaStream に 1 つの AudioTrack を設定するので 1 つ目の AudioTrack に対して音量を設定する
      // AudioTrack.setVolume() の音量の範囲は double 型で 0.0 から 10.0 までの値が設定できる
      // https://webrtc.googlesource.com/src/+/refs/heads/main/sdk/android/api/org/webrtc/AudioTrack.java
      ms.audioTracks[0].setVolume(3.0)
  }
  // その他のリスナーインタフェースの実装
  ...
}
```

### ステレオ音声の入出力に対応していますか？

Sora Android SDK ではステレオ音声の入出力に対応しています。

利用方法については [ステレオ音声を入出力する](audio_stereo.html) をご確認ください。

### Sora の TURN 機能を無効にして利用できますか？

できません。

Sora Android SDK は Sora を `turn = false` に設定して利用することはできません。

### 画面回転すると Sora から切断されます

Sora Android SDK が画面回転を検知して自動で切断しているわけではありません。
Android は画面回転時に Activity を再生成します。この際、アプリケーション側で `onDestroy()` などから `disconnect()` を呼ぶ実装になっている場合、切断が発生します。

回避方法の一つは、接続中の Activity の `AndroidManifest.xml` に `configChanges` を設定し、画面回転時の再生成を抑止することです。
[クイックスタート](quickstart.html) における sora-android-sdk-quickstart ではこの設定を利用しています。

```xml
<activity
    android:name=".YourActivity"
    android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout" />
```

この設定を行うと Activity は再生成されなくなりますが、その代わり回転後のレイアウト更新や UI の再配置はアプリケーション側で扱う必要があります。

また、 `configChanges` の設定を利用する以外にも、アプリケーションの実装によっては、接続オブジェクトのライフサイクル管理を Activity から分離し、
Activity 再生成時にも `disconnect()` しない構成とすることも考えられます。

### ミュート時に Android 端末のマイク・カメラのプライバシーインジケーター(ランプ)を消灯させることはできますか？

Sora Android SDK はミュート時に Android 端末のマイク・カメラ使用時に表示されるプライバシーインジケーター(ランプ)を消灯させることができます。
音声・映像のハードミュート機能を利用することで Android 端末のマイクおよびカメラのプライバシーインジケーターを非表示(消灯)にすることできます。

利用方法は [ミュート機能](mute.html) をご確認ください。

## サポート

### Sora Android SDK のサポートは提供していますか？

サポートは提供しておりません。


### 質問やバグ報告はどこで行えますか？

Sora Android SDK についての質問やバグ報告は Discord の `#sora-sdk-faq` チャンネルにお願いします。



ただし、 Sora のライセンス契約の有無に関わらず、応答時間と問題の解決を保証しませんのでご了承ください。

質問やバグ報告にあたり、開発環境のバージョンを「メジャーバージョン、マイナーバージョン、メンテナンスバージョン」まで含めて書いてください。

- 利用している Sora のバージョン
- 利用している Sora Android SDK のバージョン
- Android Studio を動作させている OS とそのバージョン
- Android Studio のバージョン
- Android デバイスのモデル名と Android OS のバージョン

## リリース

### リリースサイクルを教えてください

Sora のメジャーバージョンアップ後に、
Sora へ追従を目的としたバージョンアップを行います。

ただし、具体的なリリースサイクルはありません。





