FAQ

解像度を変更することはできますか?

できます。

解像度の変更には「送信する映像のサイズ」、「受信するテクスチャのサイズ」、「Unity の表示上のサイズ」の 3 つの設定が必要です。 詳細はこちらの 解像度の変更方法 をご確認ください。

カメラを無効にして音声だけ送信できますか?

できます。

NoVideoDevice = true を指定することで映像デバイスを掴むことなく音声だけを送信することができます。 また、 video = false を指定することで映像デバイスを掴みながら音声だけを送信することもできます。

ただし、Unity Camera を利用している場合は NoVideoDevice = true を指定しても Unity Camera を掴んでしまうため、 ご注意ください。

マイクを無効にして映像だけを送信できますか?

できます。

NoAudioDevice = true を指定することで音声デバイスを掴むことなく映像だけを送信することができます。 NoAudioDevice = true を指定した場合音声の受信も行われなくなります。 また、 audio = false を指定することで音声デバイスを掴みながら映像だけを送信することもできます。

ただし、Unity Audio を利用している場合は NoAudioDevice = true を指定しても Unity Audio を掴んでしまうため、 ご注意ください。

カメラ無しの端末を利用して送受信できますか?

できます。

NoVideoDevice = true を指定することでカメラ無しの端末を利用して送受信をすることができます。

AV1 を設定して送受信できますか?

できます。

AV1 は全てのプラットフォームで利用できます。

HTTP Proxy を利用して接続できますか?

できます。Sora.Config にて HTTP Proxy の設定を行えます。

ProxyUrl:

Proxy の URL とポート番号を指定します (例 : http://proxy.example.com:8080)

ProxyUsername:

Proxy の認証に利用するユーザーを指定します

ProxyPassword:

Proxy の認証に利用するパスワードを指定します

iOS または macOS から H.264 の FHD で配信するにはどうすればいいですか?

iOS または macOS から FHD で配信したい場合は Sora の H.264 のプロファイルレベル ID を 5.2 以上に設定してください。 設定方法は Sora のドキュメント をご確認ください。 プロファイルレベル ID を変更しない場合は H.264 の HD 以下で配信するか、 他のコーデックを使用して FHD 配信をしてください。

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

できません。

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

Windows で 受信した VP9 の映像が表示できない

NVIDIA ビデオカード搭載の Windows で 128x128 未満の VP9 の映像を受信することはできません。 詳細は Sora C++ SDK の FAQ をご確認ください。

メッセージング機能を利用するにはどうすればよいですか?

メッセージング機能を利用するには最低限以下の設定が必要です。

  • dataChannelSignaling を有効にする必要があります

  • DataChannels で label を設定する必要があります

    • ラベルは # から始める必要があります

    • これは送受信するお互いが同一のラベルである必要があります

  • DataChannels の Direction で Sendrecv / Sendonly / Recvonly のいずれかを設定する必要があります

詳細は Sora のドキュメントの メッセージング機能 をご確認ください。

以下にサンプル集を使った設定方法の例を示します。

サンプル集では必要な値は全て Unity Editor の inspector の以下の項目から行えるようになっています。

  • DataChannel シグナリングの設定

  • DataChannel メッセージングの設定

メッセージは「送信」ボタンを押すことで送信し、メッセージ内容は固定で全てのラベルに aaa を送信するようになっています。 ラベルごとに指定したい場合や異なるメッセージを送信したい場合はご自身で修正していただく必要があります。

ハンズフリーで利用できますか?

iOS デバイスでのみ AudioOutputHelper を利用することでハンズフリーができます。

ヘッドセットの接続有無によって以下のように挙動が変わります。

  • ヘッドセットが接続されていない場合は通話用スピーカーと通常のスピーカーが切り替わります

  • ヘッドセットが接続されている場合は、ヘッドセットのスピーカーとマイクから端末のスピーカーとマイクへ切り替わります

  • マイクなしイヤホンを接続した場合は、イヤホンのスピーカーから端末のスピーカーへ切り替わります(マイクは常に端末のマイクを利用します)

以下に Sora Unity SDK のサンプル集の SoraSample.cs で利用する場合の例を示します。

// AudioOutputHelper のインスタンスを取得する
Sora.AudioOutputHelper audioOutputHelper;

void Start()
{
    // アプリケーションの初期処理で AudioOutputHelper のインスタンスを作成する
    audioOutputHelper = new Sora.AudioOutputHelper(() => { Debug.Log("OnChangeRoute"); });
}

void OnApplicationQuit()
{
    DisposeSora();
    // アプリケーション終了時に AudioOutputHelper のインスタンスを破棄する
    audioOutputHelper.Dispose();
}

/*
ハンズフリーの ON/OFF を切り替える方法は色々ありますが、
一例としてここでは UI ボタンで利用しやすいように OnClickSetHandsfree() を作成しています。
*/
public void OnClickSetHandsfree()
{
    // Sora がいない場合は何もしない
    if (sora == null)
    {
        return;
    }
    // 現在のハンズフリーの状態を取得する
    bool isHandsfree = audioOutputHelper.IsHandsfree();
    // ハンズフリーの状態を反転させる
    audioOutputHelper.SetHandsfree(!isHandsfree);
}

ハンズフリー利用時の注意点

ハンズフリーは音声デバイスの利用を前提としています。

そのため、Recvonly や NoAudioDevice といった音声デバイスを利用しない設定ではハンズフリーは利用できません。

Sora Unity SDK では音声デバイスを利用しない場合、 AVAudioSession の カテゴリを PlayAndRecord にせず、デフォルトのまま利用します。

Sora Unity SDK のハンズフリーは Sora C++ SDK で実装されています。

その中でハンズフリーは overrideOutputAudioPort(_:) を使用して実現しており、このメソッドは PlayAndRecord 以外のカテゴリでは利用できません。

参考:overrideOutputAudioPort(_:)

Android の音声デバイスを変更できますか?

libwebrtc の仕様のため、Sora Unity SDK をそのまま利用して Android の音声デバイスを変更することはできません。 変更したい場合はご自身でデバイスの変更処理を作成する必要があります。

Unity SDK では libwebrtc の webrtc::AudioDeviceModule::Create を使用して音声デバイスを取得しています。 Android 以外では音声デバイスを取得したときにデバイス名も取得しており、デバイス名を変更することで音声デバイスを変更することができます。

しかし、 Android ではデバイスは常に一つであり、デバイス名を取得しようとしてもエラーが発生するため、ダミーの値を入れるようにしています。 該当のコードは Unity SDK が利用している Sora C++ SDK の device_list.cpp になります。 コードのリンクはこちらです

モノラルの音声を送信することはできますか?

できません。

Sora Unity SDK ではステレオ音声のみ取り扱うようになっているため、モノラルの音声を送信することはできません。 もしモノラルの音声を利用したい場合はモノラルの音声をステレオに変換するなどの処理をご自身で対応していただく必要があります。

カメラデバイスを変更することはできますか?

できます。

カメラデバイスを変更するにはまずカメラデバイスの一覧を取得する必要があります。 カメラデバイスの一覧は SoraUnitySdk.GetVideoDevices() で取得できます。 カメラデバイスの一覧を取得したら、その中から利用したいカメラデバイスの DeviceName か UniqueName を videoCapturerDevice に設定してください。

以下に Sora Unity SDK のサンプル集の SoraSample.cs で利用する場合の例を示します。

// 指定したいカメラデバイスの DeviceName か UniqueName を Inspector から設定する
public string videoCapturerDevice = "";

// カメラ・オーディオデバイスの一覧を取得する
void DumpDeviceInfo(string name, Sora.DeviceInfo[] infos)
{
    Debug.LogFormat("------------ {0} --------------", name);
    foreach (var info in infos)
    {
        Debug.LogFormat("DeviceName={0} UniqueName={1}", info.DeviceName, info.UniqueName);
    }
}

void Start()
{
    // アプリ起動時にカメラデバイスの一覧を取得する
    DumpDeviceInfo("video capturer devices", Sora.GetVideoCapturerDevices());
}

public void OnClickStart()
{
    // Sora と接続時に config を設定する
    var config = new Sora.Config()
    {
        // CameraConfig に videoCapturerDevice を設定する
        CameraConfig = new Sora.CameraConfig()
        {
            VideoCapturerDevice = videoCapturerDevice,
        },
     }
}

接続している URL を取得することはできますか?

できます。

SelectedSignalingURLConnectedSignalingURL を使用することで取得ができます。

SelectedSignalingURL は複数の候補の中から利用を決定した URL です。 ConnectedSignalingURL は実際に接続した URL です。

iOS の AVAudioSession.Category は何を設定していますか?

Sora Unity SDK では Sora 接続時、マイクを初期化する際に AVAudioSession.Category を PlayAndRecord に設定しています。(マイクを利用しない場合は設定を行いません)

もし、AVAudioSession.Category を変更したい場合はご自身で Native コードを作成し、 AVAudioSession.Category を期待する値に変更する必要があります。 Sora Unity SDK で AVAudioSession.Category を設定している コードのリンクはこちらです。

iOS で送受信を行ったとき、音声が小さくなる

Sora Unity SDK では AVAudioSession.Category を PlayAndRecord に設定しています。

iOS の仕様上 AVAudioSession.Category を PlayAndRecord に設定すると、スピーカー音声が小さくなるようになっています。

マナーモードの時、受信だけをした場合に音声が聞こえない

iOS の仕様上、デフォルトの音声カテゴリではマナーモードの時に音声を再生することはできません。

もしマナーモードでも音声を出したい場合は、AVAudioSession.Category を変更する必要があります。 その場合はご自身で Native コードを作成し、 AVAudioSession.Category を Playback に変更する必要があります。

接続中にカメラを切り替えたい

Sora Unity SDK では、Sora.SwitchCamera() メソッドを使用して、実行時にアクティブなカメラを動的に切り替えることができます。

SwitchCamera() の詳細は Sora Unity SDK の Sora.cs 内の SwitchCamera() の定義を参照してください。 コードのリンクはこちらです

切り替え可能なカメラのタイプは2つあります。

  • デバイスカメラ: 実行している端末に組み込まれた物理的なカメラデバイスです。これは、スマートフォンやタブレットの背面カメラやフロントカメラなどが含まれます。

  • Unity カメラ: Unity のシーン内に設定されたカメラです。これは、Unity の Camera コンポーネントを使用して作成されたカメラです。

これらのカメラを切り替えるには、適切なカメラ設定を SwitchCamera() メソッドに渡す必要があります。これは、以下のメソッドを使用して行います。

  • デバイスカメラを使用する場合 : CameraConfig.FromDeviceCamera() メソッドを使用して、特定のデバイスカメラ用のカメラ設定を生成します。

  • Unityカメラを使用する場合 : CameraConfig.FromUnityCamera() メソッドを使用して、特定の Unity カメラ用のカメラ設定を生成します。

以下に Sora Unity SDK のサンプル集の SoraSample.cs で利用する場合の例を示します。

// ここでは例としてユーザーがカメラ切り替えボタンをクリックしたときの処理を示します。
public void OnClickSwitchCamera()
{
    // Sora と接続していない場合は何もしない
    if (sora == null)
    {
        return;
    }

    int videoWidth;
    int videoHeight;

    // 映像サイズの取得
    GetVideoSize(videoSize, out videoWidth, out videoHeight);

    // captureUnityCamera の状態に基づいて、デバイスカメラと Unity カメラを切り替えます。
    if (captureUnityCamera)
    {
        // デバイスカメラに切り替えるために、Sora の SwitchCamera() メソッドを使用します。
        // FromDeviceCamera() メソッドを使って、特定のデバイスカメラ用の新しい CameraConfig を生成します。
        //  - videoCapturerDevice : 使用するデバイスカメラを指定します。
        //  - videoWidth : 切り替え後のビデオの幅を設定します。
        //  - videoHeight : 切り替え後のビデオの高さを設定します。
        //  - videoFps : 切り替え後のビデオのフレームレートを設定します。
        // CameraConfig は、CapturerType を DeviceCamera に設定し、適切なビデオキャプチャデバイスと解像度、フレームレートを指定して、ビデオストリームの設定を行います。
        sora.SwitchCamera(Sora.CameraConfig.FromDeviceCamera(videoCapturerDevice, videoWidth, videoHeight, videoFps));
        captureUnityCamera = false;
    }
    else
    {
        // Unity カメラに切り替えるために、Sora の SwitchCamera() メソッドを使用します。
        // FromUnityCamera() メソッドを使って、特定の Unity カメラ用の新しい CameraConfig を生成します。
        //  - capturedCamera : 使用する Unity カメラを指定します。
        //  - unityCameraRenderTargetDepthBuffer : Unity カメラのレンダーターゲットの深度バッファのサイズを指定します(ここでは16)。
        //  - videoWidth : 切り替え後のビデオの幅を設定します。
        //  - videoHeight : 切り替え後のビデオの高さを設定します。
        //  - videoFps : 切り替え後のビデオのフレームレートを設定します。
        // CameraConfig は、CapturerType を UnityCamera に設定し、適切な Unity カメラと解像度、フレームレートを指定して、ビデオストリームの設定を行います。
        sora.SwitchCamera(Sora.CameraConfig.FromUnityCamera(capturedCamera, 16, videoWidth, videoHeight, videoFps));
        captureUnityCamera = true;
    }
}

ハードウェアエンコーダの利用を制御することはできますか?

できます。Sora Unity SDK では、Sora.ConfigUseHardwareEncoder パラメータを使用することでハードウェアエンコーダの利用を制御できます。

  • UseHardwareEncodertrue を設定するとハードウェアエンコーダを利用します。

  • UseHardwareEncoderfalse を設定するとハードウェアエンコーダを利用しません。

Unity SDK のサンプル集にはどのようなシーンが用意されていますか?

Sora Unity SDK のサンプル集には以下のシーンが用意されています。 マルチストリームを推奨としているため、片方向のみのシーンは用意されていません。

  • Multi_Sendonly

  • Multi_Recvonly

  • Multi_Sendrecv

NVIDIA 搭載の Windows で、 width、 height のいずれかが 128 未満のサイズの VP9 の映像は受信できますか?

できません。NVIDIA VIDEO CODEC SDK のハードウェアデコーダでは width、 height のいずれかが 128 未満である場合 VP9 の映像をデコードできません。

width、 height のいずれかが 128 未満のサイズの映像を受信したい場合は VP9 以外のコーデックを利用するか、use_hardware_encoder を無効にして利用してください。

iOS で画面の向きのロックを設定中に端末の向きを変更しても映像サイズ(縦長・横長)が変わらない

Sora Unity SDK では端末の向きによって送信する映像のサイズが縦長か横長に変わりますが、 iOS と SDK で利用している libwebrtc の仕様で、画面の向きのロック中に端末の向きを変更しても、映像のサイズは変わりません。

映像のサイズを変更して送信したい場合は、iOS の画面の向きのロック設定を解除してください。

Android で物理の音量調整ボタンを押したときに、調節できる音量の種別を選択できますか?

Android の物理の音量調整ボタンで、どの種別の音声(メディア・通話など)が調節されるかは端末ごとに異なります。

物理の音量調整ボタンで好きな音量調整の種別を設定したい場合は、ご自身で Native コードを作成する必要があります。

Native コードを作成するには様々な方法がありますが、例えば Unity の AndroidJavaClass を使用して、作成することができます。

Android ベースのヘッドマウントディスプレイで利用できますか?

できます。Sora Unity SDK は Android に対応していますので、Meta Quest のような Android ベースのヘッドマウントディスプレイで利用できます。

Sora から切断後、再接続を行うとクラッシュしてしまう

Sora に再接続する時には必ず以下の手順でオブジェクトを破棄した後に、再作成をするようにしてください。

  • Disconnect を呼び出す

  • OnDisconnect を待つ

  • Dispose を呼び出す

これらのプロセスの詳細はサンプル集の SoraSample.cs にも記載されていますのでそちらも参考にしてください。 コードのリンクはこちらです。

H.265 を利用できますか?

できます。ただし H.265 は macOS と iOS、Android でのみ利用できます。

© Copyright 2023, Shiguredo Inc. Created using Sphinx 7.2.6