#環境
2者とも同一マシンで、シェルのセッションが別なだけ。カレントディレクトリは同じ。
OSはMacOS Mojave。Pythonのバージョンは3.5。
#WebRTC関係の情報
- TURNサーバを使わないので、UDPホールパンチングが通る2者間でないと転送は失敗すると思います(今回は同一マシンですが・・・)
- aiortcのコードを確認しましたが、UDPホールパンチングのための情報を教えてくれるSTUNサーバは、明に指定しない場合、googleが提供?しているテスト用公開サーバ ( stun:stun.l.google.com:19302 ) を利用するようです。
- 以下でやっているSDP情報の2者間での交換は、通常?のWebRTCを利用したシステムではシグナリングサーバなどが仲介して行うわけですが、今回はそれを手動でやっています。
#手順
$ git clone https://github.com/aiortc/aiortc.git
$ cd aiortc/examples_mod/datachannel-filexfer
$ brew install ffmpeg opus libvpx pkg-config
python3系列でないとaiortcのインストールがこけるようなので注意
必要ならpyenv-virtualenv等で専用の環境を作った方がいいかも。
$ pip install aiortc uvloop
- 送信側
$ python filexfer.py send ../apprtc/README.rst
-- Please send this message to the remote party --
{"sdp": <JSONでずらずらと情報が並んでいます>, "type": "offer"}
-- Please enter a message from remote party --
- 受信側
カレントディレクトリのものは消しておく
$ rm README.rst
$ python filexfer.py receive README.rst
-- Please enter a message from remote party --
起動時はここまでの出力。
そこで、最初に送信側で標準出力に出たSDP情報をコピペしてリターン。
すると、送信側にに渡すSDPが出力された。
{"sdp": <JSONでずらずらと情報が並んでいます>, "type": "offer"}
-- Please send this message to the remote party --
{"sdp": <JSONでずらずらと情報が並んでいます>, "type": "answer"}
-- Please enter a message from remote party --
送信側に渡す用のSDP情報をコピペして、送信側のターミナルでコピペしてリターン。
したら受信側に以下の出力が出た。
received 972 bytes in 0.0 s (0.730 Mbps)
-- Please send this message to the remote party --
{"type": "bye"}
最後に、これを送信側にコピペしてリターンしたら送信側はプログラムが終了。
受信側はそのまま。
とりあえず、Ctrl-Cで終了させた。
ファイルを受信できたか受信側で確認(元々カレントディレクトリにREADME.rstは存在しなかった)。
$ less README.rst
=> 内容は問題なし!
以上!