From 6804f5283758345b841ba10faf5eaf5cbb783cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian-Samuel=20Geb=C3=BChr?= Date: Thu, 20 May 2021 20:06:19 +0200 Subject: [PATCH] Complete post on owncast --- content/post/owncast.md | 51 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/content/post/owncast.md b/content/post/owncast.md index 0aed94e..8060921 100644 --- a/content/post/owncast.md +++ b/content/post/owncast.md @@ -1,8 +1,8 @@ --- title: "Owncast & Streaming a talk" -date: 2021-05-20T22:08:55+02:00 +date: 2021-05-20T16:08:55+02:00 draft: false -image: "uploads/owncast.png" +image: "uploads/owncast_logo.svg" tags: [FOSS] categories: [Projects, English] --- @@ -37,8 +37,8 @@ $ chown -R www-data:www-data owncast ``` Now create a new NGINX site e.g. `/etc/nginx/sites-enabled/owncast` with the following content -``` +``` map $http_upgrade $connection_upgrade { default upgrade; '' close; @@ -91,6 +91,7 @@ Make sure to adjust the server name and SSL certificats (I will not go into deta # Start server Now start owncast to test + ``` $ cd /var/www/owncast $ ./owncast/owncast @@ -119,7 +120,7 @@ ExecStart=/var/www/owncast/owncast WantedBy=multi-user.target ``` -Update the daemon with `systemctl daemon-reload` enable `systemctl enable owncast``and start with `systemctl start owncast`. Make sure everything is correct with `systemctl status owncast`. +Update the daemon with `systemctl daemon-reload` enable `systemctl enable owncast` and start with `systemctl start owncast`. Make sure everything is correct with `systemctl status owncast`. # Configuration @@ -128,7 +129,7 @@ You can now change back to yourdoiman.org/admin and configure, title, logo and m ## Directory -If you start a stream and have directory enabled, Owncas will publish your activity, e.g. in the owncast RocketChat, on Twitter (by mentioning you if you gave Owncast your Twitter Handle) and in the Fediverse. Turn this of for testing! +If you start a stream and have directory enabled, Owncast will publish your activity, e.g. in the owncast RocketChat, on Twitter (by mentioning you if you gave Owncast your Twitter Handle) and in the Fediverse. Turn this of for testing! # Streaming @@ -136,4 +137,44 @@ You can now use [OBS](https://obsproject.com/) or similar software to start stre ![Configuration in the OBS streaming tab. The service is set to Custom.. and the server to rtmp://stream.hyteck.de/live. The stream key is hidden](/uploads/stream_config.png) +# Concept for talks +To livestream we have a few important things to take care of: + +* The speaker +* The presentation +* The streaming software +* The streaming server +* The chat + +I suggest the following setup. Moderation and Speaker are in a BigBlueButton conference. The meet 15 minutes in advance, enough time to upload a presentation. Also in this room is a user called stream. This user does only listen and has OBS configured to record audio and the (fullscreen) window of the BBB room. + +Before the talk starts, it is a good opportunity to play some videos via the stream, or simply put on a picture, saing the talk will start soon. + +When the speaker an moderation are ready they tell the streamer and the scene is switched to the BBB room. The recording is started (if needed). + +A weakness of the setup is the streaner. If they loose their network connection, the stream stops. + +There is a neat [project for live streaming directly from a BBB room](https://github.com/aau-zid/BigBlueButton-liveStreaming), but it is quite complicated to set up and a crash of the BBB server would make stop the stream. Also the start of the stream is not as beautiful. + +# Performance + +It can be hard to estimate the needed server capacities for a livestream. I want to share my experiences. + +On the following screenshots you see the configuration and the monitoring data of a talk with 40 participants. We pplayed high-quality videos from 17:43 to 18:05. At 18:05 we changed to the presentation. You see the decrease in CPU load, as the compression of the videos was easier with a steady picture. At 19:05 we invited the participents to join us in the BBB room, some left the stream. + +The network load scales linear with the participants that are watching. You can simply calculate the needed downlink capacity with + +``` +Downlink capacity = Num. participants x Outbound Video Stream Rate +``` + +![Chart of the CPU load and the network traffic basic. The CPU load was jumpy around 25% from 17:45 to 18:05, after that it was steady around 17.5%. The Network Traffic went up until 18:10 and stayed at 50 Mbps until 19:00](/uploads/monitoring_vortrag.png "Grafana Screenshot") + +The CPU load is determined by the compression the server has to do. The more different stream formats the server has to put out, the higher the load becomes. On the given Screenshot you see that only one downlink format was advertised, so the inbound stream had to be compresse only once. Matching imbound and outbound stream formats help reducing the server load. + +![A screenshot of the Owncast admin panel. The outbound stream details are: 1200 kbps, 24 fps and the Input is H.264@2500kbps at 30 fps](/uploads/vortrag_eg.png "Screenshot of the owncast admin panel") + +# Final notes + +Owncast is a great project. Be aware that it is still not in version 1.0 so expect some limitations. This is e.g. the unability to block a user from chat. If you have any questions or comments, [let me know](https://hyteck.de/about/)