LoginSignup
13
9

More than 5 years have passed since last update.

Python製WebRTC ライブラリ aiortc のデータチャネルを介したファイル転送(P2P直接通信)を行うサンプルプログラムを動かしてみる

Last updated at Posted at 2019-03-16

環境

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
=> 内容は問題なし!

以上!

13
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9