# Jitsi Video Conference

**URL:** https://meta.discourse.org/t/jitsi-video-conference/146046
**Category:** Theme component
**Tags:** official, jitsi-video
**Created:** [29 maart 2020 om 20:20 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046 "2020-03-29T20:20:06Z")
**Posts on this page:** 20
**Page:** 2

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [11 april 2020 om 19:56 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/21 "2020-04-11T19:56:11Z")

</div>

> [@tobiaseigen](#):
>
> DOMException: Failed to read the ‘localStorage’ property from ‘Window’: Access is denied for this document

That error seems to indicate that Jitsi in your browser does not have access to local storage. Are you using a browser with restrictive security settings that could block iframes from using local storage?

---

<div class="post-metadata">

### Author: ![Benjamin\_D](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/benjamin_d/32/277831_2.png) [@Benjamin\_D](https://meta.discourse.org/u/Benjamin_D)
#### Post date: [11 april 2020 om 19:56 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/22 "2020-04-11T19:56:26Z")

</div>

something “funny” in my console, a few errors too, such as :

> Content Security Policy: The page’s settings blocked the loading of a resource at eval (“script-src”). Source: (function injected(eventName, injectedIntoContentWindow)  
> {  
> …

although it works 🤔

you may try any of these instances :  
[https://framatalk.org/accueil/fr/info/](https://framatalk.org/accueil/fr/info/)

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [11 april 2020 om 20:33 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/23 "2020-04-11T20:33:35Z")

</div>

> [@pmusaraj](#):
>
> That error seems to indicate that Jitsi in your browser does not have access to local storage. Are you using a browser with restrictive security settings that could block iframes from using local storage?

Yes - I have chrome set up to not allow third party cookies. Disabling that setting fixes this problem. Would be nice to have some way to be alerted to that cause, but I guess this is a rare enough issue.

Is there a way in jitsi to open a video call in a new tab or separate popup? I wonder if people will click away during the call to keep browsing in the forum while talking or to add a reply to the topic.

---

<div class="post-metadata">

### Author: ![Benjamin\_D](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/benjamin_d/32/277831_2.png) [@Benjamin\_D](https://meta.discourse.org/u/Benjamin_D)
#### Post date: [11 april 2020 om 21:53 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/24 "2020-04-11T21:53:42Z")

</div>

> [@Benjamin\_D](#):
>
> I was also wondering if it wouldn’t be better to import external\_api.js from settings.meet\_jitsi\_domain rather than [https://meet.jit.si](https://meet.jit.si) ?

perhaps not, as it would complicate the csp\_extensions in about.json

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [11 april 2020 om 22:13 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/26 "2020-04-11T22:13:10Z")

</div>

No, the current version of the theme component already adds the Jitsi API path to the CSP sources. It’s done by this line of about.json as @Benjamin_D noted:

> <https://github.com/discourse/discourse-jitsi/blob/main/about.json#L9>

---

<div class="post-metadata">

### Author: ![sunjam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sunjam/32/175682_2.png) [@sunjam](https://meta.discourse.org/u/sunjam)
#### Post date: [11 april 2020 om 22:15 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/27 "2020-04-11T22:15:15Z")

</div>

@pmusaraj Is that newer step possible to set within Discourse itself?

---

<div class="post-metadata">

### Author: ![Benjamin\_D](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/benjamin_d/32/277831_2.png) [@Benjamin\_D](https://meta.discourse.org/u/Benjamin_D)
#### Post date: [11 april 2020 om 22:16 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/28 "2020-04-11T22:16:50Z")

</div>

😃 yes i’m figuring it out as I go…  
I’m still wondering why this function: injected(eventName, injectedIntoContentWindow) etc… doesn’t pass the csp

> **console**
>
> Content Security Policy: The page’s settings blocked the loading of a resource at eval (“script-src”). Source: (function injected(eventName, injectedIntoContentWindow)  
> {  
> let checkRequest;
> 
> /\*
> 
> - Frame context wrapper
> - 
> - For some edge-cases Chrome will not run content scripts inside of frames.
> - Website have started to abuse this fact to access unwrapped APIs via a
> - frame’s contentWindow (#4586, 5207). Therefore until Chrome runs content
> - scripts consistently for all frames we must take care to (re)inject our
> - wrappers when the contentWindow is accessed.  
> \*/  
> let injectedToString = Function.prototype.toString.bind(injected);  
> let injectedFrames = new WeakSet();  
> let injectedFramesAdd = WeakSet.prototype.add.bind(injectedFrames);  
> let injectedFramesHas = WeakSet.prototype.has.bind(injectedFrames);
> 
> function injectIntoContentWindow(contentWindow)  
> {  
> if (contentWindow && !injectedFramesHas(contentWindow))  
> {  
> injectedFramesAdd(contentWindow);  
> try  
> {  
> contentWindow[eventName] = checkRequest;  
> contentWindow.eval(  
> “(” + injectedToString() + “)('” + eventName + “', true);”  
> );  
> delete contentWindow[eventName];  
> }  
> catch (e) {}  
> }  
> }
> 
> for (let element of [HTMLFrameElement, HTMLIFrameElement, HTMLObjectElement])  
> {  
> let contentDocumentDesc = Object.getOwnPropertyDescriptor(  
> element.prototype, “contentDocument”  
> );  
> let contentWindowDesc = Object.getOwnPropertyDescriptor(  
> element.prototype, “contentWindow”  
> );
> 
> ```
> // Apparently in HTMLObjectElement.prototype.contentWindow does not exist
> // in older versions of Chrome such as 51.
> if (!contentWindowDesc)
> continue;
> 
> let getContentDocument = Function.prototype.call.bind(
> contentDocumentDesc.get
> );
> let getContentWindow = Function.prototype.call.bind(
> contentWindowDesc.get
> );
> 
> contentWindowDesc.get = function()
> {
> let contentWindow = getContentWindow(this);
> injectIntoContentWindow(contentWindow);
> return contentWindow;
> };
> contentDocumentDesc.get = function()
> {
> injectIntoContentWindow(getContentWindow(this));
> return getContentDocument(this);
> };
> Object.defineProperty(element.prototype, "contentWindow",
> contentWindowDesc);
> Object.defineProperty(element.prototype, "contentDocument",
> contentDocumentDesc);
> 
> ```
> 
> }
> 
> /\*
> 
> - RTCPeerConnection wrapper
> - 
> - The webRequest API in Chrome does not yet allow the blocking of
> - WebRTC connections.
> - See [https://bugs.chromium.org/p/chromium/issues/detail?id=707683](https://bugs.chromium.org/p/chromium/issues/detail?id=707683)  
> \*/  
> let RealCustomEvent = window.CustomEvent;
> 
> // If we’ve been injected into a frame via contentWindow then we can simply  
> // grab the copy of checkRequest left for us by the parent document. Otherwise  
> // we need to set it up now, along with the event handling functions.  
> if (injectedIntoContentWindow)  
> checkRequest = window[eventName];  
> else  
> {  
> let addEventListener = document.addEventListener.bind(document);  
> let dispatchEvent = document.dispatchEvent.bind(document);  
> let removeEventListener = document.removeEventListener.bind(document);  
> checkRequest = (url, callback) =\>  
> {  
> let incomingEventName = eventName + “-” + url;
> 
> ```
> function listener(event)
> {
> callback(event.detail);
> removeEventListener(incomingEventName, listener);
> }
> addEventListener(incomingEventName, listener);
> 
> dispatchEvent(new RealCustomEvent(eventName, {detail: {url}}));
> };
> 
> ```
> 
> }
> 
> // Only to be called before the page’s code, not hardened.  
> function copyProperties(src, dest, properties)  
> {  
> for (let name of properties)  
> {  
> if (Object.prototype.hasOwnProperty.call(src, name))  
> {  
> Object.defineProperty(dest, name,  
> Object.getOwnPropertyDescriptor(src, name));  
> }  
> }  
> }
> 
> let RealRTCPeerConnection = window.RTCPeerConnection ||  
> window.webkitRTCPeerConnection;
> 
> // Firefox has the option (media.peerconnection.enabled) to disable WebRTC  
> // in which case RealRTCPeerConnection is undefined.  
> if (typeof RealRTCPeerConnection != “undefined”)  
> {  
> let closeRTCPeerConnection = Function.prototype.call.bind(  
> RealRTCPeerConnection.prototype.close  
> );  
> let RealArray = Array;  
> let RealString = String;  
> let {create: createObject, defineProperty} = Object;
> 
> ```
> let normalizeUrl = url =>
> {
> if (typeof url != "undefined")
> return RealString(url);
> };
> 
> let safeCopyArray = (originalArray, transform) =>
> {
> if (originalArray == null || typeof originalArray != "object")
> return originalArray;
> 
> let safeArray = RealArray(originalArray.length);
> for (let i = 0; i < safeArray.length; i++)
> {
> defineProperty(safeArray, i, {
> configurable: false, enumerable: false, writable: false,
> value: transform(originalArray[i])
> });
> }
> defineProperty(safeArray, "length", {
> configurable: false, enumerable: false, writable: false,
> value: safeArray.length
> });
> return safeArray;
> };
> 
> // It would be much easier to use the .getConfiguration method to obtain
> // the normalized and safe configuration from the RTCPeerConnection
> // instance. Unfortunately its not implemented as of Chrome unstable 59.
> // See https://www.chromestatus.com/feature/5271355306016768
> let protectConfiguration = configuration =>
> {
> if (configuration == null || typeof configuration != "object")
> return configuration;
> 
> let iceServers = safeCopyArray(
> configuration.iceServers,
> iceServer =>
> {
> let {url, urls} = iceServer;
> 
> // RTCPeerConnection doesn't iterate through pseudo Arrays of urls.
> if (typeof urls != "undefined" && !(urls instanceof RealArray))
> urls = [urls];
> 
> return createObject(iceServer, {
> url: {
> configurable: false, enumerable: false, writable: false,
> value: normalizeUrl(url)
> },
> urls: {
> configurable: false, enumerable: false, writable: false,
> value: safeCopyArray(urls, normalizeUrl)
> }
> });
> }
> );
> 
> return createObject(configuration, {
> iceServers: {
> configurable: false, enumerable: false, writable: false,
> value: iceServers
> }
> });
> };
> 
> let checkUrl = (peerconnection, url) =>
> {
> checkRequest(url, blocked =>
> {
> if (blocked)
> {
> // Calling .close() throws if already closed.
> try
> {
> closeRTCPeerConnection(peerconnection);
> }
> catch (e) {}
> }
> });
> };
> 
> let checkConfiguration = (peerconnection, configuration) =>
> {
> if (configuration && configuration.iceServers)
> {
> for (let i = 0; i < configuration.iceServers.length; i++)
> {
> let iceServer = configuration.iceServers[i];
> if (iceServer)
> {
> if (iceServer.url)
> checkUrl(peerconnection, iceServer.url);
> 
> if (iceServer.urls)
> {
> for (let j = 0; j < iceServer.urls.length; j++)
> checkUrl(peerconnection, iceServer.urls[j]);
> }
> }
> }
> }
> };
> 
> // Chrome unstable (tested with 59) has already implemented
> // setConfiguration, so we need to wrap that if it exists too.
> // https://www.chromestatus.com/feature/5596193748942848
> if (RealRTCPeerConnection.prototype.setConfiguration)
> {
> let realSetConfiguration = Function.prototype.call.bind(
> RealRTCPeerConnection.prototype.setConfiguration
> );
> 
> RealRTCPeerConnection.prototype.setConfiguration = function(configuration)
> {
> configuration = protectConfiguration(configuration);
> 
> // Call the real method first, so that validates the configuration for
> // us. Also we might as well since checkRequest is asynchronous anyway.
> realSetConfiguration(this, configuration);
> checkConfiguration(this, configuration);
> };
> }
> 
> let WrappedRTCPeerConnection = function(...args)
> {
> if (!(this instanceof WrappedRTCPeerConnection))
> return RealRTCPeerConnection();
> 
> let configuration = protectConfiguration(args[0]);
> 
> // Since the old webkitRTCPeerConnection constructor takes an optional
> // second argument we need to take care to pass that through. Necessary
> // for older versions of Chrome such as 51.
> let constraints = undefined;
> if (args.length > 1)
> constraints = args[1];
> 
> let peerconnection = new RealRTCPeerConnection(configuration,
> constraints);
> checkConfiguration(peerconnection, configuration);
> return peerconnection;
> };
> 
> WrappedRTCPeerConnection.prototype = RealRTCPeerConnection.prototype;
> 
> let boundWrappedRTCPeerConnection = WrappedRTCPeerConnection.bind();
> copyProperties(RealRTCPeerConnection, boundWrappedRTCPeerConnection,
> ["generateCertificate", "name", "prototype"]);
> RealRTCPeerConnection.prototype.constructor = boundWrappedRTCPeerConnection;
> 
> if ("RTCPeerConnection" in window)
> window.RTCPeerConnection = boundWrappedRTCPeerConnection;
> if ("webkitRTCPeerConnection" in window)
> window.webkitRTCPeerConnection = boundWrappedRTCPeerConnection;
> 
> ```
> 
> }  
> })(‘abp-request-o6i81ij12x’, true);. bd833f87-4c58-41b0-a0cd-15b978834599:27:22

---

<div class="post-metadata">

### Author: ![sunjam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sunjam/32/175682_2.png) [@sunjam](https://meta.discourse.org/u/sunjam)
#### Post date: [11 april 2020 om 22:18 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/29 "2020-04-11T22:18:55Z")

</div>

Did you enable your content security policy?  
Also, please dm me how you added that slick `console` drop down. Gracias.

---

<div class="post-metadata">

### Author: ![Benjamin\_D](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/benjamin_d/32/277831_2.png) [@Benjamin\_D](https://meta.discourse.org/u/Benjamin_D)
#### Post date: [11 april 2020 om 22:20 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/30 "2020-04-11T22:20:03Z")

</div>

> [@Benjamin\_D](#):
>
> I’m still wondering why this function: injected(eventName, injectedIntoContentWindow) etc… doesn’t pass the csp

Got it !  
that’s adblock, nothing to do with jitsi… 😅

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [11 april 2020 om 22:21 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/31 "2020-04-11T22:21:38Z")

</div>

@sunjam there is no new step, the component automatically whitelists the script it needs to whitelist.

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [12 april 2020 om 18:43 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/32 "2020-04-12T18:43:01Z")

</div>

> [@tobiaseigen](#):
>
> Is there a way in jitsi to open a video call in a new tab or separate popup?

Currently no, but this would be a good improvement, I’ll work on it when I get a chance.

---

<div class="post-metadata">

### Author: ![bts](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/bts/32/184556_2.png) [@bts](https://meta.discourse.org/u/bts)
#### Post date: [29 mei 2020 om 23:05 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/33 "2020-05-29T23:05:41Z")

</div>

Very cool! Couple quick comments—

For mobile, after clicking the button to start the event, the “Continue to the app” link is sometimes non-clickable! It works when viewing directly in Safari, but _not_ in Chrome, and _not_ in the Discourse Hub iOS app…

> [@maiki](#):
>
> Anyway to add a randomized word generator for room creation?

Seconding this as well, a quick way to auto-generate a room ID could be quite useful. I think particularly for anyone not already super familiar with Jitsi, it’s not totally clear if you need to enter an existing room in that field, or if you’re generating one on the fly just by using any arbitrary random string.

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [9 juni 2020 om 15:07 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/34 "2020-06-09T15:07:45Z")

</div>

> [@bts](#):
>
> For mobile, after clicking the button to start the event, the “Continue to the app” link is sometimes non-clickable! It works when viewing directly in Safari, but _not_ in Chrome, and _not_ in the Discourse Hub iOS app…

Nice catch! This is because the “Continue to the app” link makes a custom URL request that starts with `org.jitsi.meet://`. I have whitelisted that custom query scheme in DiscourseHub, which should fix the issue there on the next app release. (I don’t think there is a fix for this in Chrome, alas.)

> [@bts](#):
>
> Seconding this as well, a quick way to auto-generate a room ID could be quite useful.

I have added a randomly-generated option, users just need to leave the ID field empty, and an ID will be generated. I also added some copy to explain this:

 ![image](https://global.discourse-cdn.com/meta/original/3X/2/4/24fcdc1ae553370e77d188bd83f0833c6c179940.png)

Note that the ID won’t have words, it will be a random mix of letters and numbers.

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [9 juni 2020 om 23:32 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/35 "2020-06-09T23:32:56Z")

</div>

> [@pmusaraj](#):
>
> Currently no, but this would be a good improvement, I’ll work on it when I get a chance.

Any chance you could prioritise this? We’ve been playing with using Jitsi for our internal chats.

The problem is this:

1. we start a thread as an Event using the Calendar plugin, and include a Jitsi call to go at that time. Sometimes do this after [a Doodle-esque poll](https://meta.discourse.org/t/feature-request-poll-with-ability-for-user-to-add-their-own-options/87630/8) in the same thread. The Jitsi link goes in the OP.
2. The call launches, all good.
3. Someone uses that same tab to search for something, or reply in the thread (for example to write minutes on the fly) - and they crash out of the call.

It shouldn’t be too hard to make the link go to Blank rather than being in an iframe, eh? Not that I have the skills!

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [10 juni 2020 om 20:55 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/36 "2020-06-10T20:55:25Z")

</div>

Well, @nathank this component is a bit of overkill if you want just a link to a jitsi room. You can add `https://meet.jit.si/ROOMID` to a link, and that should do the job without a fancy-shmancy theme component.

However, I did add this option to the component, you can now choose whether you want the iframed for mobile or desktop or both:

 ![image](https://global.discourse-cdn.com/meta/original/3X/9/5/95563747d3418ce548c83c4c357ac1dff22080c4.png)

By default, the video conference is loaded in an iframe. When unchecked, it will go to the video call in the full window. With the [BigBlueButton video conference](https://meta.discourse.org/t/bigbluebutton-video-conference/148050) this was desirable especially on mobile, so I’ve done the same here.

Note also that the link to the full window Jitsi room does _not_ open in a new tab. If you want that, use an anchor with `target="_blank"`.

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [18 augustus 2020 om 00:39 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/37 "2020-08-18T00:39:36Z")

</div>

> [@pmusaraj](#):
>
> You can add `https://meet.jit.si/ROOMID` to a link, and that should do the job without a fancy-shmancy theme component.

Fine for me, less fine for my less techy users! Thanks for the iframe enhancement, super helpful. I’m not sure it makes sense for iframe to be the default for mobile; would you consider changing that?

I have discovered [elsewhere](https://community.jitsi.org/t/solved-how-to-enable-mobile-browser-in-jitsi-meet/29076/30) that you can bypass the ‘download the Jitsi app’ page which appears on mobile by adding #config.disableDeepLinking=true to the room ID:  
`https://meet.jit.si/YourMeetingNameHere#config.disableDeepLinking=true`

---

<div class="post-metadata">

### Author: ![Thomas\_Rother](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thomas_rother/32/423597_2.png) [@Thomas\_Rother](https://meta.discourse.org/u/Thomas_Rother)
#### Post date: [7 februari 2021 om 12:04 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/38 "2021-02-07T12:04:58Z")

</div>

Just tried to add this theme component to our discourse 2.7.0.beta3 instance, but whatever I do, I do not see an additional icon in the composer bar to link to the conference ID.

 ![grafik](https://global.discourse-cdn.com/meta/original/3X/c/f/cf60ae107d2c47086b256b7c27eb31d2c71aeb51.png)

“show in options dropdown” in the theme comp config is checked, therefore it should be visible. Any idea where I can look for the error?

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [8 februari 2021 om 14:23 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/39 "2021-02-08T14:23:01Z")

</div>

> [@Thomas\_Rother](#):
>
> “show in options dropdown” in the theme comp config is checked

Here is what I see on a fresh Discourse site with that option checked:

 ![image](https://global.discourse-cdn.com/meta/original/3X/c/8/c8bf20c74785564ad93683512b29a5ba9c0f95b2.png)

---

<div class="post-metadata">

### Author: ![Thomas\_Rother](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thomas_rother/32/423597_2.png) [@Thomas\_Rother](https://meta.discourse.org/u/Thomas_Rother)
#### Post date: [8 februari 2021 om 15:39 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/40 "2021-02-08T15:39:59Z")

</div>

yep, issue is solved now, maybe was some caching issue.  
Nevertheless thanks for your reply.

---

<div class="post-metadata">

### Author: ![audiotech](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/audiotech/32/196848_2.png) [@audiotech](https://meta.discourse.org/u/audiotech)
#### Post date: [9 december 2021 om 14:33 UTC](https://meta.discourse.org/t/jitsi-video-conference/146046/41 "2021-12-09T14:33:45Z")

</div>

I really love how this theme-componet works. I am still battling with jitsi audio issues otherwise everything would have work smoothly. I was wondering if anyone is currently using Jitsi in their forum and have no complains about it. My audio issues are perhaps due to WebRTC ---- anyone also have similar experience?

[Previous page](https://meta.discourse.org/t/jitsi-video-conference/146046.md?page=1)

[Next page](https://meta.discourse.org/t/jitsi-video-conference/146046.md?page=3)
