-
Notifications
You must be signed in to change notification settings - Fork 1
WebRTC
TL;DR - Amethyst で WebRTC を使うには Firefox ブラウザービルドを使うなどしてドメイン毎にカメラ利用許可設定を事前に保存したプロファイルを使ってください。
Amethyst では Firefox 通常の UI を搭載しておらず、許可確認ダイアログなどの UI (ロケーションバーの一部として実装されているポップアップ表示のものなど) は使えない。典型的には Geolocation API や WebRTC など利用者の許可を確認して動作する API がそのままでは利用できないが、事前に特定のドメインに対しての許可 permission を設定しておくことでこれらの API も利用可能になる。
サイト毎の設定は API パーミッションや Cookie 設定などすべてプロファイルディレクトリ (/home/root/.mozilla/firefox/xxxxxxxx.default/
や /home/root/.renesas/webviewer/xxxxxxxx.default/
など) 配下の permissions.sqlite
という SQLite3 DB に記録されている。この sqlite の moz_perms
テーブルに許可設定を追記することで、Firefox は WebRTC などをユーザー確認無しで利用可能となる。例えば mozilla.github.io で WebRTC (getUserMedia) のビデオカメラ利用許可を記憶している場合は type
= camera
, permission
= 1, expireTime
= 0 な行が記録されている。
SELECT * FROM moz_perms WHERE type = 'camera'
# id origin type permission expireType expireTime modificationTime
# 1 2145 https://mozilla.github.io camera 1 0 0 1560835066806
SQLite の CLIインターフェース sqlite3(1) を用いて permissions.sqlite
のテーブルにレコードを追加することができます。
type に "camera" を指定して moz_perms テーブルにレコードを追加します。
以下のコマンドは、例として https://mozilla.github.io の使用許可設定を追加しています。
$ sqlite3 {パス名}/permissions.sqlite <<SQL_END
insert into moz_perms (origin, type, permission, expireType, expireTime, modificationTime)
values ("https://mozilla.github.io", "camera", 1, 0, 0, 0);
SQL_END
type に "microphone" を指定して moz_perms テーブルにレコードを追加します。
以下のコマンドは、例として https://mozilla.github.io の使用許可設定を追加しています。
$ sqlite3 {パス名}/permissions.sqlite <<SQL_END
insert into moz_perms (origin, type, permission, expireType, expireTime, modificationTime)
values ("https://mozilla.github.io", "microphone", 1, 0, 0, 0);
SQL_END
Firefox ブラウザービルドで許可したいサイトにアクセスして許可確認ダイアログを出し、そこで設定を保存する形で許可をすると、ユーザープロファイルの permissions.sqlite
にその許可設定が保存されます。Firefox ブラウザービルドを終了後、Firefox のプロファイルディレクトリから permissions.sqlite
を WebViewer のプロファイルディレクトリに上書きコピーしてから起動すれば許可設定がされている状態となり、WebViewer でも同じドメインで利用可能になります。
Firefox ブラウザであれば許可確認ダイアログで次回以降確認しないチェックを入れて許可をすればそのドメインでは次から確認されない。但し、カメラのデバイス ID を指定していないコードの場合、検出されるデバイスリストの最初のものを使おうとしてエラーとなるため、接続するデバイスの ID を constraints で指定して getUserMedia を使うコードを書く必要がある。
- getUserMedia https://developer.mozilla.org/ja/docs/Web/API/MediaDevices/getUserMedia
- カメラ映像の取得。カメラの選択は costraint を引数で指定する
- enumerateDevices https://developer.mozilla.org/ja/docs/Web/API/MediaDevices/enumerateDevices
- 利用可能なデバイスリストの取得