5分でWebRTCビデオチャットを構築する

5分でWebRTCビデオチャットを構築する

前回の記事では、Ubuntu 上の webrtc ベースの多人数ビデオチャット サービスの詳細なコードを紹介しました。興味のある方は参考にしてください。今日は、5 分で WebRTC ビデオチャットを構築する方法に関する記事を紹介します。

Baidu で WebRTC を検索すると、たくさんあると思います。この友人の SkyRTC デモ (WebRtc 環境の構築) を使えば簡単にチャットできると思ったのですが、長い間苦労した結果、ビデオはおろか、テキスト メッセージも送信できませんでした。それで自分でやりました。

パブリックインターネット上でビデオ通信を実現するには、次の 3 つのコア要素が必要です。

  • 1つは、イントラネット侵入を実現するNAT侵入サーバー(ICEサーバー)です。具体的な機能については、Baiduで検索してください。
  • ポイントツーポイント チャネルを確立するために使用される WebSocket ベースのシグナリング サーバー。 Web クライアント。
  • カメラは、ユーザーとの対話のために H5 の WebRTC 機能を通じて呼び出されます。

3 つの部分は次のように構成されています。

青い部分は実際には 3 台のサーバーに展開できますが、ここでのデモ環境は 1 台のサーバー上にあります。開く必要のあるポートは 3478、8888、8080 です。もちろん、自分で設定することもできます。詳細な組み合わせ手順は次のとおりです。

準備

サーバー動作環境: Centos 7.3

インストールツール: nodejs、git、Baiduでインストールしてください

クライアント環境: FireFox (または FireFox のモバイル版)。 Chrome では https サポートが必要なため、サーバーは証明書を展開する必要があります。そのため、デモプログラムは Firefox のみをサポートしています。必要に応じて、別の記事を投稿して紹介します。

NAT トラバーサル サーバー (ICE サーバー) のインストール

イントラネット侵入を実現するには、主に stun と turn の 2 つの方法があります。通常、stun と turn のアドレスが設定されます。stun が接続できない場合は、自動的に turn サーバーに切り替わります。詳細な紹介については、以下を参照してください: STUN、TURN、ICE の紹介 インターネット上にはオープンソースのスタンサーバーが多数ありますが、私はどれも成功したことがありません。 ご興味があれば、以下をお試しください: https://www.jb51.net/article/181287.htm 私は coturn を直接使用してターンサーバーを構築します。 インストールコマンドは次のとおりです:

git クローン https://github.com/coturn/coturn
CDコターン
./configure
作る
インストールする

P.S. ./configure が失敗する場合は、openssl と Libevent2 が必要になる可能性があります。

yum インストール -y openssl openssl-devel

yum -y libevent-devel をインストールします

インストールが完了したら、example/etc にある turnserver.conf を bin フォルダにコピーします。

cp examples/etc/turnserver.conf bin/turnserver.conf

構成 turnserver.conf を次のように変更します。

#リスニングポート listening-port=3478

#Alibaba クラウド イントラネット IP
リスニングIP=10.214.31.57

#Alibaba Cloud 外部ネットワーク IP アドレス external-ip=118.24.78.34
#アクセスユーザーとパスワード user=yubao:000000

サービスを開始します:

CD ビン
ターンサーバー -v -r 118.24.78.34:3478 -a -o

設定後、次のように https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ で成功するかどうかをテストできます。

私の場合のように、実行中のログはいつでも /var/log フォルダで表示できます。

末尾 -f /var/log/turn_12447_2018-04-20.log

シグナリングサーバー

シグナリング サーバーは、Websocket に基づく signalmaster を使用します。これを選択した理由は、ターンサーバーに直接統合できるからです。

git クローン https://github.com/andyet/signalmaster.git
CD シグナルマスター
npm インストールエクスプレス
npm インストール yetify
npm インストール getconfig
npm インストール ノード UUID
npm で socket.io をインストールします

Signalmaster は turnserver に接続できますが、ユーザー名/パスワード モードをサポートしていません。ソース コード sockets.js の 110 行目を調整する必要があります。調整されたコードは次のとおりです。

if (!config.turnorigins || config.turnorigins.indexOf(origin) !== -1) {
  config.turnservers.forEach(関数 (サーバー) {
  資格情報.push({
   ユーザー名: server.username,
   資格情報: server.credential、
   URL: server.urls || server.url
  });
  });
 }

完了したら、config/production.json を変更し、turnserver のユーザーとパスワードを次のように設定します。

{
 "isDev": 真、
 「サーバー」: {
 「ポート」: 8888,
 "/* 安全 */": "/* https 経由で接続するかどうか */",
 「安全」: false、
 「キー」: null、
 "証明書": null、
 「パスワード」: null
 },
 「部屋」: {
 "/* maxClients */": "/* 部屋あたりのクライアントの最大数。0 = 制限なし */",
 "最大クライアント数": 0
 },
 「スタンサーバー」: [
 {
 「URL」: 「stun:stun.ekiga.net:3478」
 }
 ]、
 「ターンサーバー」: [
 {
 "urls": ["turn:qq.openauth.me:3478"],
 "ユーザー名": "yubao",
 "資格情報":"000000", 
 「有効期限」: 86400
 }
 ]
}

起動する:

nohup ノード server.js &

ウェブクライアント

クライアントは HTML ページをすばやく作成できます。次のものを参照してください: 顧客サービス システムを段階的に構築する (1) 3 分で複数人のテキストおよびビデオ チャット ルームの Web バージョンを実装する (完全なソース コードを含む) もちろん、面倒な場合は、クリックしてダウンロードするだけです。静的 Web サーバーを見つけてデプロイすることができます。 2 番目の部分のシグナル サーバーのアドレスを変更することに注意してください。

var webrtc = 新しい SimpleWebRTC({

 localVideoEl: 'localVideo',
 
 remoteVideosEl: 'remoteVideos',

 自動リクエストメディア: true、

 url:'http://qq.openauth.me:8888', //独自のシグナルサーバーとして設定します nick: 'yubaolee' //テキストチャット中のユーザーのニックネーム});

私が展開したアドレスは http://qq.openauth.me:8080/baortc/index.html です (気軽にアクセスしないでください。突然会ったら恥ずかしいです 🙂 (✿◡‿◡))、コンピューターは Firefox (Chrome はセキュリティ要件が高く、https を使用する必要があります。テストのために一時的に Firefox を使用します)、アクセス効果:

別のコンピューターまたは携帯電話を使用して Firefox でページにアクセスすると、すでに 2 つのビデオ ウィンドウが存在していることがわかります (コンピューターで開いたページにも自動的に 2 つのビデオ ウィンドウが表示されます)。テキストとビデオで通信できます。

それ以来、WebRTC プログラムが構築されてきました。

要約する

5分でWebRTCビデオチャットを構築する方法についての記事はこれで終わりです。WebRTCビデオチャットに関するその他の関連コンテンツについては、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Ubuntu 上で WebRTC ベースの複数人ビデオチャット サービスを構築するための詳細なコード

<<:  MySQLにおけるテーブルインデックスの定義方法と導入

>>:  シンプルなウェブ計算機を実装するJavaScript

推薦する

Docker実践: Pythonアプリケーションのコンテナ化

1. はじめにコンテナはサンドボックス メカニズムを使用して相互に分離します。コンテナ内にデプロイさ...

MySQL 8.0.23のルートパスワードをリセットするための最適なソリューション

この方法は2021年2月7日に編集されました。私が使用しているバージョンは8.0.23です。事件の原...

Vue の詳細な入門ノート

目次1. はじめに2. 初期ビュー(I) Vueの概念を理解する(II) MVVMアーキテクチャ(I...

MySQL テーブルを作成するためによく使用される SQL ステートメントの概要

最近、私はプロジェクトに取り組んでおり、背景を記述するために SQL ステートメントを使用する必要が...

JavaScript 履歴オブジェクトの説明

目次1. ルートナビゲーション2. 履歴状態管理API (1)ハッシュチェンジイベント(2)ポップス...

MySQL テーブルとデータベースでデータを分割する方法

目次1. 縦方向のスライス1.1 垂直データベース1.2 垂直テーブル分割2. 水平(横断)セグメン...

Linux でディスク IO を表示し、読み取りと書き込みで高い IO を占有するプロセスを見つけます。

背景 - オンラインアラートオンライン サーバーがアラームを発し、ディスク使用率 disk.util...

WeChatアプレットは左にスワイプしてリスト項目を削除する効果を実現

この記事では、WeChatミニプログラムの具体的なコードを共有し、左にスワイプしてリスト項目を削除す...

docker で mysql に接続できない場合の解決策

シナリオ: 仮想マシンの Docker コンテナに最新バージョンの MySQL をインストールした後...

HTTP サーバーとクライアントのやり取りをシミュレートする Node.js+postman

目次1. NodeがHTTPサーバーを構築する2. HTTPサーバーがリクエストを取得する1. Po...

パフォーマンスの最適化を教える 52 個の SQL 文

1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...

Vue3とVue2の利点のまとめ

目次1. なぜ vue3 が必要なのでしょうか? 2. vue3の利点3. 応答原則の違い4. ライ...

Vue プロジェクトをパッケージ化して Apache サーバーにデプロイする手順

開発環境では、vue プロジェクトは、ローカルで Express サーバーを構築することをベースにし...

CSS中級者向けアダプティブレイアウトの5つのソリューションの詳細な説明

序文ページを作っていく上で、ページレイアウトに関する内容に遭遇することが多く、面接でも聞かれることも...

Vue3 コンポジション API の紹介

目次概要例なぜそれが必要なのでしょうか?設定参照、反応的計算して見るライフサイクルVue3.0 は ...