2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ローカルビデオチャット hidden.in 構築メモ

Last updated at Posted at 2021-02-03

経緯

  • 巷では「びでおちゃっと」というものが流行ってるらしい…
  • ウチはクローズドな環境だから、「ずーむ」とか「みーつ」、「ちーむ」とかは使えない…
  • オンプレでそれらしいことができるもの、ないの?

という無茶振りを受けて調べたところ
hidden.in」というアプリを発見したので検証した。

hidden.inって何?

WebRTCを使ったカメラやマイクの映像・音声ストリームを媒介するサーバアプリケーション。
Node.jsで構築されている。

GitHub hidden.in リポジトリ

2017年で更新が止まっているが、検証したところ少し手直しするだけで動作した。

前提条件

  • ローカル環境(インストール時にインターネット接続が必要)
  • Fedora Server 33 x64にて動作確認

はじめに

hidden.in 専用ユーザを作成し、ホームディレクトリに構築することとする。

サーバの初期設定

諸々最新化したり、hidden.in専用ユーザを作成したりしておく

一般ユーザ作業
$ sudo dnf update
$ sudo useradd hidden.in
$ sudo reboot

ファイアウォールの開放

TCP/3000を開放する。
以下は firewalld がインストールされている環境での手順
ゾーン名等は適宜読み替えてください

現在のファイアウォールの状態を表示

sudoer作業
$ 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を開放する。

sudoer作業
$ 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 が必要

各種パッケージのインストール

sudoer作業
$ sudo yum install -y nodejs npm git 

hidden.in本体のインストール、サービス化

インストール

コードをclone、npmパッケージの導入

hidden.inユーザ作業
$ git clone https://github.com/ukiuni/hidden.in
$ cd hidden.in
$ npm install

非推奨となったコードを書き換え
そのままでは function not found となり画像と音声が流れないと思われる

hidden.inユーザ作業
$ vim ~/hidden.in/static/js/index.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/

サービス化

sudoer作業
$ sudo vim /etc/systemd/system/hidden.in.service
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
sudoer作業
$ 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 :tada:

動作確認

  1. Webカメラとマイクが付いた端末から、ブラウザ(できればChromeの最新版)で https://(hidden.inサーバIP):3000 へアクセスする。
  2. ルーム名を聞かれるので、適当に入れる。
  3. Webカメラの映像がブラウザ上に表示されればOK。
  4. そのほかの端末から、同じようにアクセスし、同じルーム名を入れて参加する。
  5. 双方の端末に、それぞれの映像が映ればOK。

Todo

  • Nginx等でリバースプロキシをかけていい感じにSurveしたい

あとがき

  • 自分用にメモした手順です。必要に応じて読み替えてください。
  • こうしたほうがいいよ的なアドバイスを頂けると大変助かります

以上

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?