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

| |
|-|-|
:discourse2: | Краткое описание | Видеоконференции Jitsi позволяет встраивать видеозвонки 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
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 лайк