# 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 の TURN 機能を無効にして利用できますか？

できません。

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

## ミュート時に 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 へ追従を目的としたバージョンアップを行います。

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





