Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| software:relive [2017/08/29 11:52] – [Setting up Relive in the VOC setup] florolf | software:relive [2026/07/26 22:17] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | = HLS Relive | + | # HLS Relive |
| Documentation for the relive system is contained within its git repo '' | Documentation for the relive system is contained within its git repo '' | ||
| - | It's currently deployed at live.ber:/ | + | It's currently deployed at live.alb:/ |
| - | == Setting up Relive in the VOC setup | ||
| - | - On live.ber, | + | ## Setting up Relive |
| - | - After a minute, a cronjob will run and download the schedule, etc. (If you are impatient, you can run ''/ | + | |
| - | - Start the scheduler (run as user relive): '' | + | |
| - | - In the streaming-website configuration, | + | |
| - | == README | + | Login to server |
| + | ssh relive@relive.c3voc.de | ||
| + | cd git | ||
| + | screen -dR | ||
| - | (this might be out of date, check the README | + | - Create an appropriate config for your event in `live.alb:/ |
| + | - either by using `./ | ||
| + | - manually **(deprecated, do not use if you not really know what you are doing)**: copy `cfg.example`, | ||
| + | - After a minute, a cronjob will run and download the schedule, etc. (If you are impatient, you can run `/ | ||
| + | - Start the scheduler (run as user relive, inside of a screen/tmux session): `./ | ||
| + | - In the streaming-website configuration, | ||
| - | < | + | Note that the '' |
| - | HLS ReLive | + | |
| - | ========== | + | |
| - | This set of tools records portions of an HLS stream into separate | ||
| - | playlists for timeshifting and to bridge the time until the actual | ||
| - | recordings are available. | ||
| - | Components | + | ## Relive integration in media.ccc.de (voctoweb) |
| - | ---------- | + | |
| - | The ReLive system consists of several tools and cron jobs, some of which | + | When an event in voctoweb has no recordings, voctoweb will try to find the corresponding relive recording. This only works if the conference acronym matches the acronym |
| - | can be used independently from the rest. | + | |
| - | ### record.pl | + | To use this feature, first create the conference in voctoweb and in c3tracker. In theory there are multiple variants, but this one is the one we currently use: |
| - | `record.pl` records HLS streams that are being generated locally by | + | * To enable this workflow for you conference, enable the " |
| - | watching | + | * [[https:// |
| - | streams via HTTP, nor will it perform | + | * This script can be called during |
| - | out at what position in the source m3u8 it stopped | + | * TODO: When we use this step, we should rename or migrate |
| - | restarted: It will simply add a discontinuity header to the output m3u8 | + | |
| - | and resume adding segments. It turns out that this makes things much | + | |
| - | simpler and is enough for our use case. | + | |
| - | Usage: `record.pl in-directory in-m3u8 out-directory` | + | If you need re-create the session, run following commands: |
| - | The m3u8 in the output directory will be named `index.m3u8`. | ||
| - | ### scheduler.pl | + | ``` |
| + | ssh voc@releasing.c3voc.de | ||
| + | screen -x | ||
| + | cd / | ||
| + | source tracker-profile-relive.sh | ||
| + | export LOCALFILE=tracker-profile-relive.sh | ||
| + | ./ | ||
| + | ``` | ||
| - | `scheduler.pl` is responsible for starting and stopping recording | + | ## README |
| - | processes as dictated by the conference schedule. See below for | + | |
| - | configuration details. | + | |
| - | When sent a `SIGHUP`, it will reload its schedule, spawning or killing | + | Please read the [[https:// |
| - | recording subprocesses as necessary. Running recording subprocesses | + | |
| - | which are still valid w.r.t. the new schedule remain untouched. | + | |
| - | When sent a `SIGINT` or `SIGTERM` it shuts down all recording | + | ## FAQ |
| - | subprocesses and then terminates itself. | + | |
| - | Recording subprocesses are started via `wrapper.sh` which takes care of | + | The `/ |
| - | setting up their environment (creating one directory per schedule event | + | * simply rename or remove |
| - | to store the recording, amongst other things) and starting them. | + | |
| - | ### genpage.pl | + | ## Depublish |
| - | `genpage.pl` looks through | + | To de-publish a video, remove |
| - | cross-referencing them with the schedule and media.ccc.de, to find out | + | Just renaming makes the video not playable, but the folder |
| - | whether a proper release has happened yet. All this data is collected | + | |
| - | and written into a file called `index.json` in the top-level recording | + | |
| - | directory, which can then be used by the streaming frontend. | + | |
| - | A recording can be in one of four states: | + | The page at `https://streaming.media.ccc.de/< |
| - | - not_running: | + | |
| - | | + | |
| - | - live: There is data present, but the playlist is not finished yet. | + | |
| - | - recorded: There is data present and the playlist is finished. | + | |
| - | - released: A recording of this talk has been found on media.ccc.de | + | |
| - | A recording can move from the *recorded* state back to *live* if the | ||
| - | recording is restarted for some reason. Other than that, recordings | ||
| - | progress monotonically from *not_running* to *released*. | ||
| - | |||
| - | Starting from the *live* state, a thumbnail is generated. Once a | ||
| - | recording is *recorded*, the HLS files get remuxed into a faststarted | ||
| - | mp4 for easy download. | ||
| - | |||
| - | The `index.json` file contains an array of objects. A fully populated | ||
| - | object looks like this: | ||
| - | |||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | |||
| - | ### check_released.pl | ||
| - | |||
| - | `check_released.pl` is a helper used by the `get-releases.sh` script. It | ||
| - | ensures that only events which have at least one recording on media.ccc.de are | ||
| - | marked as *released*. | ||
| - | |||
| - | ### Cron jobs | ||
| - | |||
| - | There are three cron jobs: | ||
| - | |||
| - | - calling get-releases.sh to download and cache the list of recordings | ||
| - | already released on media.ccc.de | ||
| - | - calling get-fahrplan.sh to download the schedule | ||
| - | - calling genpage.pl to update `index.json` etc. | ||
| - | |||
| - | Configuration | ||
| - | ------------- | ||
| - | |||
| - | All scripts take the union of `global_config` in the root of the git | ||
| - | repository as their configuration. This configuration is extended by a | ||
| - | project-specific configuration in the `configs` subdirectory. See the | ||
| - | `.example` files in the respective directories. These files also contain | ||
| - | comments explaining the various options. | ||
| - | |||
| - | Setting up for a new conference | ||
| - | ------------------------------- | ||
| - | |||
| - | The following steps are necessary to set up ReLive for a new conference: | ||
| - | |||
| - | - update the configuration file appropriately | ||
| - | - launch the recording scheduler: `./ | ||
| - | You'll probably want to do that in a screen session. | ||
| - | | ||
| - | </ | ||