経緯
- 巷では「びでおちゃっと」というものが流行ってるらしい…
- ウチはクローズドな環境だから、「ずーむ」とか「みーつ」、「ちーむ」とかは使えない…
- オンプレでそれらしいことができるもの、ないの?
という無茶振りを受けて調べたところ
「hidden.in」というアプリを発見したので検証した。
hidden.inって何?
WebRTCを使ったカメラやマイクの映像・音声ストリームを媒介するサーバアプリケーション。
Node.jsで構築されている。
2017年で更新が止まっているが、検証したところ少し手直しするだけで動作した。
前提条件
- ローカル環境(インストール時にインターネット接続が必要)
- Fedora Server 33 x64にて動作確認
はじめに
hidden.in 専用ユーザを作成し、ホームディレクトリに構築することとする。
サーバの初期設定
諸々最新化したり、hidden.in専用ユーザを作成したりしておく
$ sudo dnf update
$ sudo useradd hidden.in
$ sudo reboot
ファイアウォールの開放
TCP/3000を開放する。
以下は firewalld
がインストールされている環境での手順
ゾーン名等は適宜読み替えてください
現在のファイアウォールの状態を表示
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: ssh mdns dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
上記例では、public
ゾーンがアクティブになっており、ssh mdns dhcpv6-client
が許可されている。
TCP/3000を開放する。
$ sudo firewall-cmd --add-port=3000/tcp --zone=public --permanent
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp4s0
sources:
services: cockpit dhcpv6-client ssh
ports: 3000/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public
ゾーンにて、3000/tcp
が追加で許可された。
依存性パッケージのインストール
Git, node.js, npm が必要
各種パッケージのインストール
$ sudo yum install -y nodejs npm git
hidden.in本体のインストール、サービス化
インストール
コードをclone、npmパッケージの導入
$ git clone https://github.com/ukiuni/hidden.in
$ cd hidden.in
$ npm install
非推奨となったコードを書き換え
そのままでは function not found となり画像と音声が流れないと思われる
$ vim ~/hidden.in/static/js/index.js
// 173行目付近
//remoteVideo.src = URL.createObjectURL(event.stream);
// ↓
remoteVideo.srcObject = event.stream;
// 195行目付近
//localVideo.src = URL.createObjectURL(stream);
// ↓
localVideo.srcObject = stream;
(参考) https://one-it-thing.com/6066/
サービス化
$ sudo vim /etc/systemd/system/hidden.in.service
[Unit]
Description=hidden.in
After=network.target
[Service]
Type=simple
User=hidden.in
WorkingDirectory=/home/hidden.in/hidden.in/
Environment="HTTP=false"
ExecStart=npm start
ExecReload=/bin/kill -SIGUSR1 $MAINPID
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl start hidden.in.service
$ sudo systemctl status hidden.in.service
● hidden.in.service - hidden.in
Loaded: loaded (/etc/systemd/system/hidden.in.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2021-02-03 09:12:58 JST; 2h 14min ago
Main PID: 40291 (node)
Tasks: 22 (limit: 2206)
Memory: 55.3M
CPU: 6.537s
CGroup: /system.slice/hidden.in.service
├─40291 npm
└─40302 node index.js
Runnning
動作確認
- Webカメラとマイクが付いた端末から、ブラウザ(できればChromeの最新版)で
https://(hidden.inサーバIP):3000
へアクセスする。 - ルーム名を聞かれるので、適当に入れる。
- Webカメラの映像がブラウザ上に表示されればOK。
- そのほかの端末から、同じようにアクセスし、同じルーム名を入れて参加する。
- 双方の端末に、それぞれの映像が映ればOK。
Todo
- Nginx等でリバースプロキシをかけていい感じにSurveしたい
あとがき
- 自分用にメモした手順です。必要に応じて読み替えてください。
- こうしたほうがいいよ的なアドバイスを頂けると大変助かります
以上