Видеоконференция Jitsi

||||
-|-|
:discourse2: | Summary | Jitsi Video Conference позволяет встраивать видеоконференции Jitsi в сообщения Discourse.
: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 | URL внешнего JavaScript-файла API. Если вы измените это, вам также нужно будет добавить URL в настройку сайта ‘content security script src’.
| button icon | Введите имя значка FontAwesome 5, который будет отображаться на кнопке Jitsi.
| 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 | ID комнаты Jitsi
| 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 Preview при создании черновика видеоконференции в новом сообщении.
Вы видите превью?

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, которым пользуются почти все мои знакомые.

2 лайка

Я имею в виду, что если у меня есть выбор между видеоконференцией, которая работает нативно, и той, для которой требуется приложение, я, скорее всего, откажусь от установки дополнительного приложения.

3 лайка

Это отчасти (но не полностью) похоже на то, как если бы всех, кто хочет вести любую беседу, заставляли использовать платформу Discourse на meta. :slight_smile:

Да, это правда, и я ещё не продумал последствия использования мобильного интерфейса, встроенного в Discourse таким образом.

Я тоже слышал много хорошего о BBB, особенно для мероприятий в формате «вебинаров». Было бы здорово, если бы была и интеграция с ним :slight_smile:

Насколько мне известно, всё наоборот: Zoom за последние годы скопировал много элементов интерфейса и пользовательского опыта у Jitsi и других инструментов для веб-конференций.

6 лайков

Кстати, при настройке компонента темы для использования моей собственной установленной версии Jitsi возникает ошибка. Обычный синтаксис URL-адреса комнаты работает нормально, но по какой-то причине при попытке использовать кнопку появляется ошибка 404. К сожалению, на этой неделе у меня не будет времени на устранение неполадок…

3 лайка

@pmusaraj, спасибо за компонент!

Есть ли возможность добавить генератор случайных слов для создания комнат? Или, может быть, использовать временную метку/эпоху? Каждый раз, когда я создаю комнату в Discourse, у меня возникает тупик. :slight_smile:

3 лайка

«Хорошие художники копируют, великие — крадут» — в начале дня для пользователя важен текущий продукт, который он видит, а не его история.

Насколько улучшается производительность Jitsi при использовании собственного экземпляра? Мне казалось, что после установления соединения связь осуществляется напрямую между участниками (peer-to-peer).

Нам нужно решение, способное справляться с большими группами, и в текущем виде (используя meet.jit.si) качество часто оказывается недостаточным даже для звонков один на один.

Jitsi работает в режиме peer-to-peer только в сессиях один на один. В группах большего размера трафик маршрутизируется через сервер.

Даже выделенные самохостинговые экземпляры, которые мы тестировали, довольно быстро достигают предела своих возможностей.

1 лайк

Возможно, им стоит предложить платную опцию хостинга в дополнение к варианту с самостоятельным размещением… это могло бы помочь выявить проблемы в программном обеспечении в масштабе :thinking:

3 лайка

Я считаю, что основная проблема заключается в том, что для развёртываний любого масштаба jitsi-videobridge действительно требует выделенного хоста, при этом компонент jitsi-meet должен устанавливаться отдельно. Первый является сервером потоковой передачи, тогда как Meet предоставляет только фронтенд.

К сожалению, наиболее распространённый путь установки — это полуавтоматическое развёртывание на одном хосте. Их быстрая установка полностью работает в Docker и очень проста.

Подробная ручная установка, которая позволяет развёртывать компоненты отдельно, может быстро отпугнуть новичков.

9 лайков

Мне не удаётся заставить это работать, даже с сервером по умолчанию meet.jit.si. Что бы я ни ввёл в качестве идентификатора встречи, вместо видеовстречи появляется серое окно.

1 лайк

Есть что-то в консоли?

Привет, Тобиас, у меня всё работает (в Chrome и Firefox), версия 2.5.0 beta2, несколько плагинов, свежий сервер Jitsi, установленный примерно 48 часов назад… :face_with_raised_eyebrow:

Сейчас я пытаюсь внедрить JWT, но, возможно, это выше моих сил :exploding_head:, и я также задавался вопросом, не будет ли лучше импортировать external_api.js из settings.meet_jitsi_domain, а не с https://meet.jit.si?
вот здесь: https://github.com/pmusaraj/discourse-jitsi/blob/master/javascripts/discourse/initializers/insert-jitsi.js.es6

2 лайка

Хм… в консоли много ошибок. Это происходит и на моём личном экземпляре, и на новом созданном тестовом сайте. Я использую сервер по умолчанию meet.jit.si, никаких изменений в настройках компонентов темы не вносил.

У меня пока нет собственного сервера Jitsi, и я думал, что всё заработает из коробки…

нажмите, чтобы увидеть
Logger.js:154 2020-04-11T19:21:21.250Z [modules/util/JitsiLocalStorage.js] <new <anonymous>>:  DOMException: Не удалось прочитать свойство 'localStorage' из 'Window': Доступ к этому документу запрещён.
    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
Показать ещё 2 фрейма
Logger.js:154 2020-04-11T19:21:21.252Z [features/local-recording] <Object._loadMetadata>:  Не удалось разобрать элемент localStorage.
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) документ готов:	 432.6749999891035
react-dom.production.min.js:187 DOMException: Не удалось прочитать свойство 'localStorage' из 'Window': Доступ к этому документу запрещён.
    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: Не удалось прочитать свойство 'localStorage' из 'Window': Доступ к этому документу запрещён.
    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 лайк