3

私は数週間以来、https://github.com/njovy/AppRTCDemoapprtc. ルームサーバーの URL として appr.tc を使用すると、アプリは完全に機能しました。私はすでに Ubuntu で apprtc プロジェクトをセットアップしており、Ubuntu マシンのブラウザーとモバイル デバイスのブラウザーなどとの間で会議を作成できます。しかし、ubuntu のブラウザーとアプリの間の接続を確立しようとすると、常に次のエラーが表示されます。

Room IO error: java.io.IOException:
Non-200 response when requesting 
TURN server from https://
networktraversal.googleapis.com/
v1alpha/iceconfig?key=none : HTTP/
1.1 400 Bad Request

エラー - スクリーンショット

エラー メッセージに記載されている URL は、src/app_engine/constants.py ( https://github.com/webrtc/apprtc/blob/master/src/app_engine/constants.py) で定義されています。しかし、私はそれをどうするか見当がつかない

# TODO(jansson): Remove once AppRTCDemo on iOS supports ICE_SERVER.
TURN_BASE_URL = 'https://computeengineondemand.appspot.com'
TURN_URL_TEMPLATE = '%s/turn?username=%s&key=%s'
CEOD_KEY = '4080218913'

ICE_SERVER_BASE_URL = 'https://networktraversal.googleapis.com'
ICE_SERVER_URL_TEMPLATE = '%s/v1alpha/iceconfig?key=%s'
ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')

CALLSTATS_PARAMS = {
  'appId': os.environ.get('CALLSTATS_APP_ID'),
  'appSecret': os.environ.get('CALLSTATS_APP_SECRET')
}

それで、私はこれまで何をしましたか?(ほぼ apprtc のデプロイ過程ですhttps://github.com/webrtc/apprtc#deployment)

  1. git から apprtc の最新バージョンをダウンロードしました
  2. npm、nodejs、grunt をインストール
  3. grunt build を使用してソースをビルドする
  4. ダウンロード、インストール、構成されたコライダー (コライダーは rtc:8089 で実行されます)
    • 4.1 Workspace/src/collidermain の main.go を次のように変更する必要がありました
      : var roomSrv = flag.String("room-server", "hxxps://appr.tc", "The origin of the room server")
      から: var roomSrv = flag.String("room-server", "hxxp://rtc", "ルームサーバーの由来")
    • 4.2 また、src/app_engine/constants.py で WS_INSTANCE_HOST_KEY を colliders アドレス rtc:8089 に変更しました
  5. CoTurn をインストールし、次のような turnserver.conf を追加しました
    listen-port=3478
    listen-ip=192.168.178.20
    user=rtc:webrtc
    cert=/home/rtc/work/src/collider/cert/cert.pem
    pkey=/ホーム/rtc/work/src/collider/cert/key.pem

Collider は 192.168.178.20:8089 (または rtc:8089) で実行され、turnserver は 192.168.178.20:3478 で実行されます。turnserver.conf で定義されている認証情報: ユーザー名 = rtc、パスワード = webrtc

セットアップ後、requestIceServers-Method を src/web_app/js/util.js に追加しました ( https://github.com/webrtc/apprtc/blob/master/src/web_app/js/util.js)

function requestIceServers(iceServerRequestUrl, iceTransports) {
  return new Promise(function(resolve, reject) {
    var servers = [{
        credential: "webrtc",
        username: "rtc",
        urls: [
          "turn:192.168.178.20:3478?transport=udp",
          "turn:192.168.178.20:3478?transport=tcp"
        ]
    }];
    resolve(servers);
  });
}

標準的な方法をコメントアウトしました:

//function requestIceServers(iceServerRequestUrl, iceTransports) {
  //return new Promise(function(resolve, reject) {
    //sendAsyncUrlRequest('POST', iceServerRequestUrl).then(function(response) {
      //var iceServerRequestResponse = parseJSON(response);
      //if (!iceServerRequestResponse) {
        //reject(Error('Error parsing response JSON: ' + response));
        //return;
      //}
      //if (iceTransports !== '') {
        //filterIceServersUrls(iceServerRequestResponse, iceTransports);
      //}
      //trace('Retrieved ICE server information.');
      //resolve(iceServerRequestResponse.iceServers);
    //}).catch(function(error) {
      //reject(Error('ICE server request error: ' + error.message));
      //return;
    //});
  //});
//}

GAE を開始すると、ターンサーバーとコライダーが

python ~/google_appengine/dev_appserver.py ~/google_projects/apprtc-master/out/app_engine --host=0.0.0.0
sudo turnserver -a -r 192.168.178.20
$GOPATH/bin/collidermain -port=8089 -tls=false

2 つのブラウザー クライアント間の接続を確立できます (コライダー ターミナルからのログ)

rtc@rtc:~$ $GOPATH/bin/collidermain -port=8089 -tls=false
2016/11/05 00:07:32 Starting collider: tls = false, port = 8089, room-server=http://rtc
2016/11/05 00:10:24 Created room stackoverflow
2016/11/05 00:10:24 Added client 97869213 to room stackoverflow
2016/11/05 00:10:24 Client 97869213 registered in room stackoverflow
2016/11/05 00:10:57 Added client 96368166 to room stackoverflow
2016/11/05 00:10:57 Client 96368166 registered in room stackoverflow
2016/11/05 00:10:57 Sent queued messages from 97869213 to 96368166
2016/11/05 00:11:09 Deregistered client 96368166 from room stackoverflow
2016/11/05 00:11:09 Removed client 96368166 from room stackoverflow
2016/11/05 00:11:19 Removing client 96368166 from room stackoverflow due to timeout

ネイティブ アプリ経由で接続しようとすると、常に上記のエラーが表示されます。

調査の結果、git で次のリンクを見つけましたが、あまり役に立ちませんでした。https://github.com/webrtc/apprtc/issues/366

そこで、constants.py ( https://github.com/webrtc/apprtc/blob/master/src/app_engine/constants.py) をいじってみることにし、Turn/Stun サーバーをオーバーライドする場所を見つけました。

# Turn/Stun server override. This allows AppRTC to connect to turn servers
# directly rather than retrieving them from an ICE server provider.
TURN_SERVER_OVERRIDE = []
# Enable by uncomment below and comment out above, then specify turn and stun
# servers below.
#TURN_SERVER_OVERRIDE = [
#  {
#    "urls": [
#      "turn:192.168.178.20:3478?transport=udp",
#      "turn:192.168.178.20:3478?transport=tcp"
#    ],
#    "username": "rtc",
#    "credential": "webrtc"
#  },
#  {
#    "urls": [
#      "stun:stun.l.google.com:19305"
#    ]
#  }
#]

そのため、TURN_SERVER_OVERRIDE = [] をコメントアウトし、他の行をコメントアウトして、turnserver.conf で構成されたターンサーバーの IP と資格情報を入力しました。

GAE は、アプリからの新しい要求があることを認識しています。記録する

INFO     2016-11-05 00:06:31,649 apprtc.py:408] Added client 50600142 in room stackoverflow, retries = 0
INFO     2016-11-05 00:06:31,650 apprtc.py:92] Applying media constraints: {'video': True, 'audio': True}
WARNING  2016-11-05 00:06:31,653 apprtc.py:136] Invalid or no value returned from memcache, using fallback: null
INFO     2016-11-05 00:06:31,653 apprtc.py:551] User 50600142 joined room stackoverflow
INFO     2016-11-05 00:06:31,653 apprtc.py:552] Room stackoverflow has state ['50600142']
INFO     2016-11-05 00:06:31,658 module.py:788] default: "POST /join/stackoverflow?wstls=false HTTP/1.1" 200 1175

それでも同じエラーがスローされます。

これでもうまくいかないので、ターンサーバーアドレスをICE_SERVER_BASE_URLに挿入しようとしました(まだconstants.pyにあります)

ICE_SERVER_BASE_URL = 'https://networktraversal.googleapis.com'
ICE_SERVER_URL_TEMPLATE = '%s/v1alpha/iceconfig?key=%s'
ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')

に変更

ICE_SERVER_BASE_URL = '192.168.178.20:3478'
ICE_SERVER_URL_TEMPLATE = ''
ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')

これにより、エラーが次のように変更されました。

Connection error
Non-200 response to POST to URL:
http://rtc:8080/join/stackoverflow=wstls=false : HTTP/1.1 500 Internal 
Server Error

エラーのスクリーンショット 2

しかし、今ではブラウザーからホストを開くことができなくなりました。したがって、それは完全に間違っている可能性があると思います。

  • ネイティブ アプリを使用して会議を確立する方法がわかりましたか?
  • エラーの原因となる可能性のある networktraversal.googleapis.com URL をバイパスするにはどうすればよいですか?
  • バイパスする必要がありますか?

前もって感謝します!

4

1 に答える 1