Jitsi 動画会議

:discourse2: 概要 Jitsi ビデオ会議は、Discourse の投稿に Jitsi ビデオ会議を埋め込むことを可能にします。
:hammer_and_wrench: リポジトリリンク https://github.com/discourse/discourse-jitsi
:open_book: Discourse テーマが初めての方へ Discourse テーマの利用に関する初心者ガイド

このテーマコンポーネントをインストール

機能

  • 管理者は独自の Jitsi サーバーインスタンスを使用可能
  • 作曲者ツールバーにアイコンを追加(コンポーネントの設定でスタッフのみに限定可能)
  • 投稿に設定可能なアイコンとラベル付きのボタンを表示


設定

名前 説明
show in options dropdown 未選択の場合、アイコンは作曲者ツールバーに表示されます。
only available to staff
meet jitsi domain ドメインのみ(プロトコルなし、末尾のスラッシュなし)。
jitsi script src 外部 API JavaScript ファイルの URL。これを変更する場合は、サイトの設定「content security script src」にも URL を追加する必要があります。
button icon Jitsi ボタンに表示する FontAwesome 5 アイコンの名前を入力してください。
chat button Discourse Chat と統合
hide iframe buttons ユーザーから iframe 設定の選択肢を非表示にします。デフォルト設定が使用されます。
default mobile iframe モバイル端末でデフォルトで iframe モードを有効化
default desktop iframe デスクトップでデフォルトで iframe モードを有効化
chat button position チャットウィンドウ内のボタンの位置
svg icons カスタムアイコンを使用する場合、上記の ‘button_icon’ に加えてこのフィールドにも追加してください。
翻訳 デフォルト
composer_title Discourse Jitsi
room_label Jitsi ルーム ID
button_text_label ボタンラベル
launch_jitsi ビデオ会議を開始
modal.room_field_description ルームの ID を入力してください(空欄の場合はランダムに生成された ID が使用されます)。
modal.insert 挿入
modal.cancel キャンセル
modal.title Jitsi 統合の追加
modal.mobile_iframe モバイル端末で iframe 表示
modal.desktop_iframe デスクトップで iframe 表示

:discourse2: 当方でホストされていますか? テーマコンポーネントは、Standard、Business、Enterprise プランで利用可能です。

「いいね!」 43

こんにちは、この投稿とプラグインをありがとうございます。混乱を避けるため、別のスレッドからいくつかの投稿を削除しました。コンポーネントをインストールしてテストしています。

新しい投稿にビデオ会議を作成する際に、Discourse プレビューが表示されません。プレビューは表示されますか?

「いいね!」 2

素晴らしい!@downey さん、あなたの Jitsi サーバーを使って試してみませんか?今は持っていないのですが、セットアップしてみたいと思います。

ちょうど GoToMeeting を使った家族通話で苦労していたところだったので、Discourse のトピックに簡単に埋め込める新しいものを試してみたいです。Jitsi と組み合わさればなお良いでしょう!

「いいね!」 1

無料で提供されている Jitsi のサーバーを使用することに懸念はありますか?

「いいね!」 1

無料で提供されている Jitsi サーバーを使用することへの懸念はありますか?

テストを行っており、約 10 人であれば問題なく動作します。20 人以上になるとパフォーマンスが使い物にならなくなるため、大規模なグループ通話や Slack、Etherpad との統合には、独自のインスタンスを運用することをお勧めします。

「いいね!」 4

そういえば、私たちのJitsiテストが停止した理由は、Jitsiがモバイルユーザー(少なくともiOSでは)にアプリのインストールを促すからです。私たちは再びBigBlueButtonを検討しており、これはモバイルとデスクトップの両方でブラウザ経由で動作します。

@pmusaraj さんが、このコンポーネントで実施された作業のいくらかでも同様のAPIで活用できるか確認する興味があるかどうか気になっています。

「いいね!」 6

ユーザーが電話で参加できることも役立ちますか?余談ですが、iOS アプリは非常に優れており、完全オープンソースで、使いやすさも抜群です。私の知る限り、このアプリはほぼ Zoom の iOS および Android アプリの複製のようです。私の知人のほとんどが Zoom を使っています。

「いいね!」 2

つまり、ネイティブで動作する会議システムと、アプリのインストールが必要な会議システムを選べるなら、追加のアプリをインストールするのは避けるでしょう。

「いいね!」 3

それは、Discourse をプラットフォームとして任意の会話を行いたい全員に、メタ(meta)を使用するよう求めるようなものです(完全にではありませんが)。:slight_smile:

はい、その通りです。Discourse にモバイルインターフェースを埋め込むことの影響については、まだ十分に検討していません。

BBB についても良い評判を聞いています。特に「ウェビナー形式」のイベントには適しているようです。BBB との統合も素晴らしいですね :slight_smile:

私の知る限り、その逆です。Zoom は長年にわたり、Jitsi やその他のウェブ会議ツールの UI/UX の多くをコピーしました。

「いいね!」 6

参考までに、テーマコンポーネントを自分でインストールした Jitsi インスタンスを使用するように設定するとエラーが発生します。通常のルーム URL 構文は問題なく機能しますが、何らかの理由でボタンを使用しようとすると 404 エラーが表示されます。残念ながら今週はトラブルシューティングの時間が取れそうにありません…

「いいね!」 3

@pmusaraj さん、コンポーネントをありがとうございます!

ルーム作成時にランダムな単語を生成する機能は追加できないでしょうか?あるいはタイムスタンプやエポック時刻を使う方法もありますか?Discourse でルームを作成するたびに、頭が真っ白になってしまいます。:slight_smile:

「いいね!」 3

「優れた芸術家は模倣し、偉大な芸術家は盗む」——一日の始まりにおいて、ユーザーが目にするのは現在の製品であり、その歴史ではありません。

独自のインスタンスを使用すると、Jitsi のパフォーマンスはどの程度向上しますか?一度通話が始まれば、ピアツーピアになると思っていたのですが。

大規模なグループに対応できるソリューションが必要ですが、現状(meet.jit.si を使用している状態)では、1 対 1 の通話であっても頻繁に品質が不十分だと感じています。

Jitsi は 1 対 1 の設定でのみピアツーピア通信を行います。それ以上の人数の場合は、サーバーを経由してルーティングされます。

私たちが実験した専用セルフホストインスタンスでも、比較的早く限界に達してしまいます。

「いいね!」 1

もしかしたら、セルフホスティングオプションに加えて、有料のホスティングオプションを提供するべきかもしれませんね。そうすれば、大規模な環境でのソフトウェアの問題を特定する助けになるかもしれませんね:thinking:

「いいね!」 3

主な問題は、ある程度の規模でのデプロイにおいては、jitsi-videobridge が専用のホストを必要とし、jitsi-meet コンポーネントは別途インストールする必要がある点だと思われます。前者はストリーミングサーバーであり、meet はフロントエンドのみを提供します。

残念ながら、多くの人が選択するインストール方法は、セミオートメーションされたシングルホストデプロイです。彼らのクイックインストールはすべて Docker 内にあり、非常にシンプルです。

コンポーネントを個別にデプロイできる詳細なマニュアルインストールは、初心者にとってすぐにハードルが高く感じてしまうでしょう。

「いいね!」 9

デフォルトの meet.jit.si サーバーを使用しても、これを動作させることができません。会議 ID に何を入力しても、ビデオ会議の代わりに灰色のボックスが表示されるだけです。

「いいね!」 1

コンソールに何か表示されていますか?

こんにちは、トビアスさん。ここでは動作しています(Chrome と Firefox で、バージョン 2.5.0 ベータ 2、プラグインは少数、Jitsi サーバーは約 48 時間前に最新のものからインストール…):face_with_raised_eyebrow:

現在 JWT の実装を試していますが、手におえないかもしれません:exploding_head:
また、https://meet.jit.si ではなく settings.meet_jitsi_domain から external_api.js をインポートする方がよいのではないかと考えています。
参考:https://github.com/pmusaraj/discourse-jitsi/blob/master/javascripts/discourse/initializers/insert-jitsi.js.es6

「いいね!」 2

Hmm… lots of errors in the console. This happens on my personal instance and on a new hosted trial site just created. I’m using the default meet.jit.si server, have made no changes to the theme component settings.

I don’t have my own jitsi server (yet) and thought it would work out of the box…

click to see
Logger.js:154 2020-04-11T19:21:21.250Z [modules/util/JitsiLocalStorage.js] <new <anonymous>>:  DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
    at new <anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:29:197547)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:29:197486)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:29:197742)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:54:98101)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:24:101984)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:29:222225)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:24:213733)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:29:196138)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:24:154819)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:63:41390)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:54:53082)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:54:55490)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:54:165081)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:54:166745)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:126:292708)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:126:323867)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Module.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:222:80217)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:908
    at https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:919
o @ Logger.js:154
(anonymous) @ JitsiLocalStorage.js:42
(anonymous) @ JitsiLocalStorage.js:77
(anonymous) @ app.bundle.min.js?v=3962.622:29
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:54
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:29
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:29
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:63
n @ bootstrap:19
(anonymous) @ AuthHandler.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:54
n @ bootstrap:19
(anonymous) @ connection.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:54
n @ bootstrap:19
(anonymous) @ conference.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:126
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:222
n @ bootstrap:19
(anonymous) @ bootstrap:83
(anonymous) @ app.bundle.min.js?v=3962.622:1
Show 2 more frames
Logger.js:154 2020-04-11T19:21:21.252Z [features/local-recording] <Object._loadMetadata>:  Failed to parse localStorage item.
o @ Logger.js:154
_loadMetadata @ SessionManager.js:170
(anonymous) @ SessionManager.js:152
(anonymous) @ SessionManager.js:435
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:29
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:29
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:63
n @ bootstrap:19
(anonymous) @ AuthHandler.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:54
n @ bootstrap:19
(anonymous) @ connection.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:54
n @ bootstrap:19
(anonymous) @ conference.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:126
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:222
n @ bootstrap:19
(anonymous) @ bootstrap:83
(anonymous) @ app.bundle.min.js?v=3962.622:1
Logger.js:154 2020-04-11T19:21:21.309Z [index.web] <HTMLDocument.<anonymous>>:  (TIME) document ready:	 432.6749999891035
react-dom.production.min.js:187 DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
    at Oe._initStorage (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:16:45149)
    at Oe.componentDidMount (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:16:44779)
    at Oe.componentDidMount (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:24:223947)
    at Gs (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:94889)
    at t.unstable_runWithPriority (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:192:3884)
    at fi (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:41540)
    at Ws (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:90890)
    at Ps (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:78509)
    at fc (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:105337)
    at hc (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:105412)
    at https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:106607
    at Bs (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:80044)
    at _c (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:106592)
    at Object.render (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:109864)
    at HTMLDocument.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:222:80940)
La @ react-dom.production.min.js:187
Ga.n.callback @ react-dom.production.min.js:200
Hi @ react-dom.production.min.js:125
Bi @ react-dom.production.min.js:125
Gs @ react-dom.production.min.js:239
t.unstable_runWithPriority @ scheduler.production.min.js:20
fi @ react-dom.production.min.js:113
Ws @ react-dom.production.min.js:230
Ls @ react-dom.production.min.js:206
(anonymous) @ react-dom.production.min.js:114
t.unstable_runWithPriority @ scheduler.production.min.js:20
fi @ react-dom.production.min.js:113
gi @ react-dom.production.min.js:114
mi @ react-dom.production.min.js:113
Bs @ react-dom.production.min.js:208
_c @ react-dom.production.min.js:272
render @ react-dom.production.min.js:273
(anonymous) @ index.web.js:25
react-dom.production.min.js:114 Uncaught DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
    at Oe._initStorage (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:16:45149)
    at Oe.componentDidMount (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:16:44779)
    at Oe.componentDidMount (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:24:223947)
    at Gs (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:94889)
    at t.unstable_runWithPriority (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:192:3884)
    at fi (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:41540)
    at Ws (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:90890)
    at Ps (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:78509)
    at fc (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:105337)
    at hc (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:105412)
    at https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:106607
    at Bs (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:80044)
    at _c (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:106592)
    at Object.render (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:109864)
    at HTMLDocument.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:222:80940)
gi @ react-dom.production.min.js:114
mi @ react-dom.production.min.js:113
Bs @ react-dom.production.min.js:208
_c @ react-dom.production.min.js:272
render @ react-dom.production.min.js:273
(anonymous) @ index.web.js:25
react-dom.production.min.js:187 TypeError: Cannot read property 'dispatch' of undefined
    at Oe.componentWillUnmount (BaseApp.js:100)
    at react-dom.production.min.js:187
    at Ra (react-dom.production.min.js:189)
    at Ua (react-dom.production.min.js:195)
    at Gs (react-dom.production.min.js:235)
    at t.unstable_runWithPriority (scheduler.production.min.js:20)
    at fi (react-dom.production.min.js:113)
    at Ws (react-dom.production.min.js:230)
    at Ls (react-dom.production.min.js:206)
    at react-dom.production.min.js:114
    at t.unstable_runWithPriority (scheduler.production.min.js:20)
    at fi (react-dom.production.min.js:113)
    at gi (react-dom.production.min.js:114)
    at mi (react-dom.production.min.js:113)
    at Bs (react-dom.production.min.js:208)
    at _c (react-dom.production.min.js:272)
    at Object.render (react-dom.production.min.js:273)
    at HTMLDocument.<anonymous> (index.web.js:25)
La @ react-dom.production.min.js:187
Ga.n.callback @ react-dom.production.min.js:200
Hi @ react-dom.production.min.js:125
Bi @ react-dom.production.min.js:125
Gs @ react-dom.production.min.js:239
t.unstable_runWithPriority @ scheduler.production.min.js:20
fi @ react-dom.production.min.js:113
Ws @ react-dom.production.min.js:230
Ls @ react-dom.production.min.js:206
(anonymous) @ react-dom.production.min.js:114
t.unstable_runWithPriority @ scheduler.production.min.js:20
fi @ react-dom.production.min.js:113
gi @ react-dom.production.min.js:114
mi @ react-dom.production.min.js:113
I @ scheduler.production.min.js:16
H @ scheduler.production.min.js:18
C @ scheduler.production.min.js:13
BaseApp.js:100 Uncaught TypeError: Cannot read property 'dispatch' of undefined
    at Oe.componentWillUnmount (BaseApp.js:100)
    at react-dom.production.min.js:187
    at Ra (react-dom.production.min.js:189)
    at Ua (react-dom.production.min.js:195)
    at Gs (react-dom.production.min.js:235)
    at t.unstable_runWithPriority (scheduler.production.min.js:20)
    at fi (react-dom.production.min.js:113)
    at Ws (react-dom.production.min.js:230)
    at Ls (react-dom.production.min.js:206)
    at react-dom.production.min.js:114
    at t.unstable_runWithPriority (scheduler.production.min.js:20)
    at fi (react-dom.production.min.js:113)
    at gi (react-dom.production.min.js:114)
    at mi (react-dom.production.min.js:113)
    at Bs (react-dom.production.min.js:208)
    at _c (react-dom.production.min.js:272)
    at Object.render (react-dom.production.min.js:273)
    at HTMLDocument.<anonymous> (index.web.js:25)
「いいね!」 1