Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
20
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@fuziki

WindowsのUnityでWebRTCする

サンプル

iOSとWindowsでUnityでWebRTCを使った映像通信のネイティブプラグインを実装しました。
Windows版のネイティブプラグインとサンプルプログラムを公開しました。

GiHiub

Unityのプロジェクトはこちら
https://github.com/fuziki/unityWebrtcWinTest

上動画とか異なり、Unityのワールド内のサブカメラの映像をWebRTCを使って、遠隔地のオブジェクトのテクスチャに張り付けるサンプルです。
ウェブカメラは使用しません。

使い方

1. MQTT Brokerを立てる

WebRTCは最初にストリームや経路の情報を交換する必要があります。
サンプルではMQTTを使用して交換するため、MQTTのブローカが必要です。
AWS EC2上などに、Mosquittoなどをインストールしてください。
Mosquitto
https://mosquitto.org/

2.MQTTのブローカのアドレスを設定する

MqttController.csの17行目
mqttClient = new MqttClient("192.168.3.4", 1883, false, null);
のアドレス、ポート部分を立てたブローカに適合するように書き直してください。

3.Unityを起動する

Unityのプロジェクトを2台のPCで起動します。
起動時にMQTTがサーバと自動的に接続します。

4.Call Someoneボタンを押す

2台のPCがMQTTに接続されたことを確認し、片方のCall Someoneボタンを押します。
接続が確立されると、映像通信が開始します。

ネイティブプラグインの使い方

WebRtcMsgExchanger

WebRTCのSDPとICEの交換のためにWebRtcMsgExchangerを継承したオブジェクトが必要です。
descriptionとmessageをリモートのPCにそのまま送信してください。
ローカル側PCから送信すべきメッセージが生成された場合はRequiredSendingMessageが呼ばれます。
リモート側からメッセージを受信した場合は、WebRtcCtr_RecievedMessageを使ってWebRTCのコントローラにデータを渡します。

WebRtcMsgExchanger.cs

public class WebRtcMsgExchanger: MonoBehaviour
{
    public WebRtcController WebRtcCtr;
    virtual public void RequiredSendingMessage(string description, string message)
    {
//        Debug.Log("WebRtcMsgExchanger, " + description + ", " + message);
    }
    public void WebRtcCtr_RecievedMessage(string description, string message)
    {
//        Debug.Log("WebRtcMsgExchanger, " + description + ", " + message);
        WebRtcCtr.RecievedMessage(description, message);
    }
}

FrameGate

接続されたpeerにフレームを入力、受け取る場合はFrameGateを使います。

・フレームの入力:
FramgeGate_Input(IntPtr image, int width, int height)
フレームを入力はFramgeGate_Inputを使います。
imageに送信したい画像のARGB32形式の2次元配列、幅、高さをそれぞれ渡します。

・フレームの受け取り:
FramgeGate_onRecieved(IntPtr rgb, int width, int height)
リモートのPCからフレームを入力されると、FramgeGate_onRecievedが呼ばれます。
rgbは受信した画像の2次元配列です。
LoadRawTextureDataを使って、Texture2Dに反映させます。

対応OS

現段階ではwindows10, x64にのみ対応しています。
今後、iOSは対応する予定です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
20
Help us understand the problem. What is going on with this article?