質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

WebRTC

WebRTC(Web Real-Time Communication)とは、プラグイン無しでウェブブラウザ間の音声通話・ビデオチャットなどリアルタイムコミュニケーションができるオープンフレームワークです。W3CがAPIレベルで、IETFがプロトコルレベルでそれぞれ標準化が進められています。

Q&A

解決済

1回答

200閲覧

WebRTCをGoのpionで作るとローカルでできてもWebデプロイすると失敗する

ponyo877

総合スコア17

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

WebRTC

WebRTC(Web Real-Time Communication)とは、プラグイン無しでウェブブラウザ間の音声通話・ビデオチャットなどリアルタイムコミュニケーションができるオープンフレームワークです。W3CがAPIレベルで、IETFがプロトコルレベルでそれぞれ標準化が進められています。

0グッド

0クリップ

投稿2024/02/02 04:35

編集2024/02/02 05:03

実現したいこと

私はGoのpionというWebRTCパッケージを使って動画音声通信サービスを作りたいと考えています。
https://sub.folks-chat.com

発生している問題・分からないこと

以下のような状況でWebRTC通信が失敗します、改善点を教えてください。
サンプルコードとして上がっていたpion/example-webrtc-applicationsのsfu-wsに対して修正を入れてWebへデプロイしたところどうしてもICE connection state: new => checking => disconnectedとなり、動画通話が実現できません。(ローカル環境では動画通話に成功しました)
修正した箇所は以下です

  • PeerConnectionの作成時の設定にTURNサーバとSTUNサーバを追加
    • TURNサーバ: expressturnで発行したアカウント情報を利用
    • STUNサーバ: stun:stun.l.google.com:19302
    • 上記2つの設定でTrickle ICEのTypeはhost->srflx->Done->relayと遷移する
  • (dockerコンテナ化するためにindex.htmlをembedする)
  • index.html内のwebsocketのプロトコルをwsからwssに変更
  • sfu-wsアプリケーションの前にnginxを配置
  • Lets Encryptで取得した証明書をnginxに設定しhttps通信化
  • Google CloudのVMインスタンスにdockerをインストールしデプロイ

上記の構成はhttps://sub.folks-chat.com/で公開しています(上述の通りWebRTCは実現できていません)。

修正後のコードは以下です。

全てpion/example-webrtc-applicationsをfolkして作っていますので、変更点は以下の2つのコミットを見るとわかりやすいかと思います。

修正点をご教示いただければ幸いです。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

pionのIssueやstackoverflowで既存の問題を調べるとSTUNおよびTURNサーバを設定せよ、等の回答が目立ち、それ通りに実施しても成功しなかった。
pionのslackのルームで広く質問しても解決に至る回答は得られなかった。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

コンテナを利用していたことが原因でした。

コンテナにnetwork_mode: hostを追加することで解決しました。
commit 36a4708

投稿2024/02/02 15:17

ponyo877

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問