{"id":310,"date":"2020-05-12T10:14:11","date_gmt":"2020-05-12T17:14:11","guid":{"rendered":"https:\/\/opensourceit.org\/blog\/?p=310"},"modified":"2020-10-02T11:06:15","modified_gmt":"2020-10-02T18:06:15","slug":"set-up-video-conferencing","status":"publish","type":"post","link":"https:\/\/opensourceit.org\/blog\/2020\/05\/12\/set-up-video-conferencing\/","title":{"rendered":"Set Up Video Conferencing (beta)"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/techcrunch.com\/wp-content\/uploads\/2018\/10\/jitsi-front.png?w=730&amp;crop=1\" alt=\"jitsi-front\"\/><\/figure>\n\n\n\n<p><em>NOTE:  Unfortunately, after recently testing Jitsi with a ~10 screen call, I am unable to recommend the default configuration for larger conferences, due to both <a rel=\"noreferrer noopener\" href=\"https:\/\/community.jitsi.org\/t\/high-cpu-utilization-on-client-end\/25764\/47?u=tony_schmidt\" target=\"_blank\">client<\/a> and <a rel=\"noreferrer noopener\" href=\"https:\/\/community.jitsi.org\/t\/self-hosted-jitsi-takes-50-of-cpu-usage-after-a-while\/23641\" target=\"_blank\">server issues<\/a>.  The only good known alternative that (supposedly) works well with a default configuration is <a rel=\"noreferrer noopener\" href=\"https:\/\/bigbluebutton.org\/\" target=\"_blank\">Big Blue Button<\/a>.  However, BBB&#8217;s minimum server requirements are &#8220;8GB memory with 4CPU cores&#8221; &#8211; <strong>on a non-virtualized host.<\/strong>   While the cost of such a server shouldn&#8217;t be an issue for most businesses in need of video-conferencing, the goal of opensourceit.org is to make sure that open source alternatives are at least on par with the cost of proprietary\/SaaS offerings.  To that end, I will continue to test out Jitsi configurations to try to find a setup that can reliably support at least a ~10 screen conference.  (See &#8220;Set Up Jitsi &gt; Performance Optimizations&#8221;, below.)<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Overview<\/h2>\n\n\n\n<p>Unfortunately, at the current time, both Yunohost and Nextcloud don&#8217;t do video conferencing very well. For reliable video conferencing, we&#8217;re going to have to set up our own <a href=\"https:\/\/jitsi.org\/jitsi-meet\/\">Jitsi Meet<\/a> service. Similar to the Yunohost install, this process also involves several technical steps.  <\/p>\n\n\n\n<p><em>NOTE: If all you want is video conferencing, then you can use the simple &#8220;one-click&#8221; services provided VPS hosts like Digital Ocean or Vultr for installing Jitsi.  But if you want to have fewer servers and save cost, then running Jitsi alongside Yunohost takes a few more steps.<\/em>  <em>This guide assumes you have at least <a href=\"https:\/\/opensourceit.org\/blog\/2020\/04\/19\/the-basic-open-source-it-recipe\/#Get_a_Server_VPS\">set up your own Debian VPS server<\/a>.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Install Docker<\/h2>\n\n\n\n<p>If you&#8217;re using Digital Ocean, you can install Docker according to steps 1-2 in the following guide: <a rel=\"noreferrer noopener\" href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-install-and-use-docker-on-debian-9\" target=\"_blank\">https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-install-and-use-docker-on-debian-9<\/a><\/p>\n\n\n\n<p><em>NOTE: At the time of this writing, the step in the guide <\/em><br><code>sudo add-apt-repository \"deb [arch=amd64] https:\/\/download.docker.com\/linux\/debian $(lsb_release -cs) stable\"<\/code> <\/p>\n\n\n\n<p><em>had an error, and so the Debian release version had to be fetched separately and the line needed to be added manually using a text editor, e.g.<\/em><br><code>lsb_release -cs<\/code><br><code>nano \/etc\/apt\/sources.list<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Install docker-compose<\/h2>\n\n\n\n<p><code>sudo curl -L https:\/\/github.com\/docker\/compose\/releases\/download\/1.22.0\/docker-compose-`uname -s`-`uname -m` -o \/usr\/local\/bin\/docker-compose<\/code><br>and <br><code>sudo chmod +x \/usr\/local\/bin\/docker-compose<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Set Up Jitsi<\/h2>\n\n\n\n<p>Follow the docker-jitsi-meet &#8220;Quick start&#8221;, here: <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/jitsi\/docker-jitsi-meet\" target=\"_blank\">https:\/\/github.com\/jitsi\/docker-jitsi-meet<\/a>. <\/p>\n\n\n\n<p>Uncomment the <code>PUBLIC_URL<\/code> variable (remove the <code>#<\/code> character at the beginning of the line) in the <code>.env<\/code> file and set this to <code>videochat.yourdomain.tld<\/code>, or whatever subdomain where you would prefer to serve your video conferences.<\/p>\n\n\n\n<p>You&#8217;ll want to uncomment the variables for <code>ENABLE_AUTH<\/code>, <code>ENABLE_GUESTS<\/code> and <code>AUTH_TYPE<\/code> in <code>.env<\/code> so you can add users and passwords for your meeting organizers to avoid getting &#8220;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.bbc.com\/news\/technology-52105209\" target=\"_blank\">Zoombombed<\/a>&#8220;.  (If you run <code>docker-compose up -d<\/code> <em>before<\/em> setting these variables, you may need to edit  <code>~\/.jitsi-meet-cfg\/prosody\/conf.d\/jitsi-meet.cfg.lua<\/code> and set <code>authentication = \"internal_hashed\"<\/code>.)<\/p>\n\n\n\n<p><strong>Performance Optimizations<\/strong><\/p>\n\n\n\n<p>The following optimizations are currently being tested.  You are welcome to give them a try as well:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>change the following settings in the <code>~.jitsi-meet-cfg\/web\/interface_config.js<\/code><ul><li><code>SET_FILMSTRIP_ENABLED: false<\/code><\/li><li><code>DISABLE_FOCUS_INDICATOR: true<\/code><\/li><li><code>DISABLE_DOMINANT_SPEAKER_INDICATOR: true<\/code><\/li><li><code>DISABLE_VIDEO_BACKGROUND: true<\/code><\/li><li><code>DISABLE_JOIN_LEAVE_NOTIFICATIONS: false<\/code><\/li><\/ul><\/li><li>in <code>~.jitsi-meet-cfg\/web\/config.js<\/code><ul><li><code>disableAudioLevels: true<\/code><\/li><li><code>resolution: 480<\/code><\/li><li><code>enableLayerSuspension: true<\/code><\/li><li>uncomment the <code>constraints<\/code> section and set to:<pre>constraints: {<br>video: {<br>        height: {<br>            ideal: 480,<br>            max: 480,<br>            min: 240<br>        }<br>    }<br>},<\/pre><\/li><\/ul><\/li><li>Limit number of video feeds forwarded to each client: in <code>\/etc\/jitsi\/meet\/$(hostname -f)-config.js<\/code> <strong>clearly not a preferable option<\/strong><ul><li><code>channelLastN: 4<\/code><\/li><\/ul><\/li><li>have all meeting participants only use Chrome\/Chromium desktop (no mobile or other browsers) <strong>clearly not a preferable option<\/strong><\/li><\/ul>\n\n\n\n<p>Start the video service with:<br><code>docker-compose up -d<\/code><\/p>\n\n\n\n<p>Then add at least one meeting organizer with a username and password who is allowed to start the meeting (all other guests can join without needing an account): <code><br>docker exec -it docker-jitsi-meet_prosody_1 bash<br>prosodyctl --config \/config\/prosody.cfg.lua register <em>username<\/em> meet.jitsi <em>password<\/em><\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configure Yunohost to Serve Jitsi<\/h2>\n\n\n\n<p>In the Yunohost administrator panel, add your video conferencing subdomain and add a Letsencrypt SSL certificate.<\/p>\n\n\n\n<p>Then edit the second <code>server<\/code> section in <code>\/etc\/nginx\/conf.d\/videochat.opensourceit.org.conf<\/code> (using <code>nano<\/code> or other text editor), remove the line <code>access_by_lua_file \/user\/share\/ssowat\/access.lua<\/code> and add the following lines:<br><code>location \/ { <\/code><br>    <code>proxy_pass https:\/\/127.0.0.1:8443; <\/code><br><code>}<\/code> <br>Restart your Yunohost webserver with <code>sudo service nginx restart<\/code>.<\/p>\n\n\n\n<p>Now you can create video conference rooms at <code>videochat.yourdomain.tld<\/code>, add these to meeting invitations, etc.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>NOTE: Unfortunately, after recently testing Jitsi with a ~10 screen call, I am unable to recommend the default configuration for larger conferences, due to both client and server issues. The only good known alternative that (supposedly) works well with a default configuration is Big Blue Button. However, BBB&#8217;s minimum server requirements are &#8220;8GB memory with [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-310","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/opensourceit.org\/blog\/wp-json\/wp\/v2\/posts\/310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opensourceit.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opensourceit.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opensourceit.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/opensourceit.org\/blog\/wp-json\/wp\/v2\/comments?post=310"}],"version-history":[{"count":22,"href":"https:\/\/opensourceit.org\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions"}],"predecessor-version":[{"id":600,"href":"https:\/\/opensourceit.org\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions\/600"}],"wp:attachment":[{"href":"https:\/\/opensourceit.org\/blog\/wp-json\/wp\/v2\/media?parent=310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opensourceit.org\/blog\/wp-json\/wp\/v2\/categories?post=310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensourceit.org\/blog\/wp-json\/wp\/v2\/tags?post=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}