Conferencia de Video Jitsi

:discourse2: Resumen Jitsi Video Conference permite incrustar llamadas de videoconferencia de Jitsi en las publicaciones de Discourse.
:hammer_and_wrench: Enlace al repositorio https://github.com/discourse/discourse-jitsi
:open_book: ¿Nuevo en los temas de Discourse? Guía para principiantes sobre el uso de temas de Discourse

Instalar este componente del tema

Funcionalidades

  • Los administradores pueden usar su propia instancia del servidor Jitsi
  • Añade un icono en la barra de herramientas del editor (puede limitarse solo al personal en la configuración del componente)
  • Muestra un botón con un icono y una etiqueta configurables en las publicaciones


Configuración

Nombre Descripción
mostrar en menú desplegable de opciones Si no se marca, el icono se mostrará en la barra de herramientas del editor.
solo disponible para personal
dominio de meet jitsi Solo dominio (sin protocolo, sin barra final).
origen del script jitsi URL del archivo JavaScript de la API externa. Si cambias esto, también deberás agregar la URL a la configuración del sitio ‘origen de script de seguridad de contenido’.
icono del botón Ingresa el nombre del icono de FontAwesome 5 que se mostrará en el botón de Jitsi.
botón de chat Integrar con Discourse Chat
ocultar botones del iframe Ocultar la opción de configuración del iframe a los usuarios; se utilizarán las configuraciones predeterminadas a continuación.
iframe predeterminado para móviles Habilitar el modo iframe por defecto para dispositivos móviles.
iframe predeterminado para escritorio Habilitar el modo iframe por defecto para dispositivos de escritorio.
posición del botón de chat Posición del botón dentro de la ventana de chat.
iconos svg Si usas un icono personalizado, agrégalo también a este campo (además de ‘button_icon’ anterior).
Traducción Predeterminado
composer_title Discourse Jitsi
room_label ID de sala de Jitsi
button_text_label Etiqueta del botón
launch_jitsi Iniciar videoconferencia
modal.room_field_description Ingresa un ID para tu sala (o déjalo vacío para usar un ID generado aleatoriamente).
modal.insert Insertar
modal.cancel Cancelar
modal.title Agregar integración de Jitsi
modal.mobile_iframe Mostrar en un iframe en dispositivos móviles
modal.desktop_iframe Mostrar en un iframe en dispositivos de escritorio

:discourse2: ¿Alojado por nosotros? Los componentes de tema están disponibles para usar en nuestros planes Estándar, Empresarial y Corporativo.

43 Me gusta

Hola, gracias por este post y el plugin. He eliminado algunos de mis mensajes del otro hilo para evitar confusión. He instalado el componente y lo he estado probando.

No veo una Vista previa de Discourse al redactar una videoconferencia en un nuevo mensaje. ¿Tú ves una vista previa?

2 Me gusta

¡Genial! @downey, ¿podríamos probar esto usando tu servidor de Jitsi? Ahora no tengo uno, pero podría interesarme configurarlo.

Acababa de tener problemas con una llamada familiar usando GoToMeeting y me gustaría probar algo nuevo que se incruste simplemente en un tema de Discourse. Sería aún mejor si es con Jitsi.

1 me gusta

¿Hay alguna preocupación por usar el servidor que Jitsi ofrece de forma gratuita?

1 me gusta

¿Existe alguna preocupación por usar el servidor que Jitsi proporciona de forma gratuita?

Lo hemos estado probando y funciona bien para unas 10 personas. El rendimiento se vuelve inusable con más de 20 personas, por lo que querrías ejecutar tu propia instancia para llamadas a grupos más grandes, además de la integración con Slack y Etherpad.

4 Me gusta

Eso me recuerda que la razón por la que hemos detenido nuestras pruebas con Jitsi es porque Jitsi invita a los usuarios móviles a instalar una aplicación, al menos en iOS. Estamos considerando de nuevo BigBlueButton, que funciona a través del navegador en dispositivos móviles y de escritorio.

Me pregunto si @pmusaraj estaría interesado en revisar su API para ver en qué medida, si es que en alguna, el trabajo realizado en este componente podría aplicarse allí también…

6 Me gusta

¿Ayuda que tus usuarios también puedan llamar por teléfono? Por cierto, la aplicación de iOS es excelente, además es de código abierto y, según tengo entendido, muy fácil de usar. He notado que la aplicación es básicamente una réplica de la aplicación de Zoom para iOS y Android, que casi todo el mundo que conozco utiliza.

2 Me gusta

Digo, si tengo la opción de una solución de videoconferencia que funcione de forma nativa frente a una que requiera una aplicación, probablemente optaré por no instalar la aplicación adicional.

3 Me gusta

Es algo así (aunque no del todo) como pedirle a todo el que quiera tener cualquier conversación usando Discourse como plataforma que use meta. :slight_smile:

Sí, eso es cierto, y no he pensado en las consecuencias de usar una interfaz móvil incrustada en Discourse de esta manera.

También he escuchado cosas buenas sobre BBB, especialmente para eventos de estilo más “webinar”. Una integración para ello también sería buena :slight_smile:

Por lo que sé, es al revés: Zoom ha copiado mucha de la interfaz de usuario/experiencia de usuario (UI/UX) de Jitsi y otras herramientas de videoconferencia a lo largo de los años.

6 Me gusta

Por si acaso, estoy recibiendo un error al configurar el componente del tema para usar mi propia instancia de Jitsi instalada. La sintaxis normal de la URL de la sala funciona bien, pero por alguna razón obtengo un error 404 al intentar usar el botón. Lamentablemente, no tendré tiempo esta semana para solucionar el problema…

3 Me gusta

@pmusaraj, ¡gracias por el componente!

¿Hay alguna forma de agregar un generador de palabras aleatorias para la creación de salas? ¿O quizás un timestamp/epoch? Cada vez que creo una sala en Discourse, me quedo bloqueado mentalmente. :slight_smile:

3 Me gusta

“Los buenos artistas copian, los grandes artistas roban” – al comenzar el día, lo que el usuario ve es el producto actual, no su historia.

¿Cuánto mejora el rendimiento de Jitsi con tu propia instancia? Pensaba que era de par a par una vez realizada la llamada.

Necesitamos una solución que pueda manejar grupos grandes, y tal como está (usando meet.jit.si) encuentro que a menudo es demasiado deficiente para llamadas uno a uno.

Jitsi solo es punto a punto en configuraciones de 1:1. Cualquier grupo más grande se enruta a través del servidor.

Incluso las instancias dedicadas autoalojadas con las que hemos experimentado se agotan bastante rápido.

1 me gusta

Tal vez deberían ofrecer una opción de hosting gestionado de pago además de la opción de autoalojamiento… podría ayudarles a identificar problemas en el software a gran escala :thinking:

3 Me gusta

Creo que el principal problema es que, para despliegues de cualquier escala, jitsi-videobridge realmente necesita un host dedicado, con el componente jitsi-meet instalado por separado. El primero es el servidor de streaming, mientras que meet solo proporciona la interfaz de usuario.

Desafortunadamente, la ruta de instalación que la mayoría de la gente elige es el despliegue semiautomático en un solo host. Su instalación rápida se realiza completamente dentro de Docker y es muy sencilla.

La instalación manual detallada, que permite desplegar los componentes por separado, probablemente disuadirá a cualquier nuevo usuario con bastante rapidez.

9 Me gusta

No logro que esto funcione, incluso con el servidor predeterminado de meet.jit.si. Independientemente de lo que ponga como ID de reunión, solo obtengo un cuadro gris en lugar de la reunión de video.

1 me gusta

¿Algo en la consola?

Hola Tobias, aquí funciona (con Chrome y Firefox), 2.5.0 beta2, pocos plugins, un servidor Jitsi fresco de hace +/- 48 horas… :face_with_raised_eyebrow:

Actualmente estoy intentando implementar JWT, pero puede que esté fuera de mi alcance :exploding_head:, y también me preguntaba si no sería mejor importar external_api.js desde settings.meet_jitsi_domain en lugar de https://meet.jit.si.

Aquí: https://github.com/pmusaraj/discourse-jitsi/blob/master/javascripts/discourse/initializers/insert-jitsi.js.es6

2 Me gusta

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 me gusta