サンプル
iOSとWindowsでUnityでWebRTCを使った映像通信のネイティブプラグインを実装しました。
Windows版のネイティブプラグインとサンプルプログラムを公開しました。
WindowsのUnityから任意のサブカメラの映像をWebRTCに流せるようになった
— ふじき (@zikifu333) 2018年8月5日
凄く分かりにくいと思うけど⁽⁽◝( •௰• )◜⁾⁾≡₍₍◞( •௰• )◟₎₎ pic.twitter.com/eBPGC1u2iH
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のコントローラにデータを渡します。
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は対応する予定です。