Motorsport desktop client

Syncing streams

A little background on what syncing means and how it works

When we talk about "syncing", we mean that when you have multiple players open, that they are all playing back at the same moment in time. It doesn't matter how long that moment was, as long as no player is "ahead" or "behind" the others.

The way this works in MultiViewer, is by setting "target latencies". This means we tell the player to try and play back what happend X seconds ago. Live streams work in a way that they send small fragments (called segments, around 4-5 seconds) in a single file, and in the background it keeps fetching these and stores them (this is called a buffer). A buffer is needed, because due to a number of reasons, fetching a segment may take more time than usual (for instance, if your internet isn't stable, or when there's a slight hickup during encoding at the broadcast site).

Default latencies and the need for fine tuning

By default, target latencies are set to values that worked for people at the time the current version was released. Usually, this is a pretty good starting point. In any case, the driver on-board cameras are usually "ahead", meaning if all latencies are equal, an incident will show up on the OBCs before it happens anywhere else. While this default gets you relative close to a "good sync", you may have to fine tune individual streams, and in the next section we will go over how this is done. For instance, it may happen that for whatever reason, one driver is ahead or behind of the international stream, but the other OBCs are running in sync.

How it works

During the live stream, MultiViewer will monitor your actual latency against the configured target latency. If your player has had to buffer, or for some reason went out of sync, it will speed up or slow down the footage by 20% to get back to the configured target latency. This process is usually not noticable, although you may hear voices speed up slightly.

A word on buffer, buffering and low-latency streaming

By default, MultiViewer prefers to be behind the live edge by around 30-40s. This is similar to F1TV, maybe ever so slightly more. Being more behind has some benefits, mostly allowing to buffer more ahead of time, which increases the playback resiliency. If your internet cuts out for 5 seconds, the player can just play from the buffer and catch up when your internet connection resumes.

You can however, tweak the live latency however you want, at the risk of stalling the playback. Most people prefer a problem-free playback over low-latency streaming, but the app allows for either. If you prefer lower latency, just use the Arrow down key to lower the target latency.

Controlling target latency to sync streams

Before explaining how to sync streams, a few tips to keep your sanity:

  1. Choose a single stream that is the leader

    By picking a leader stream that you won't touch, you ensure that when you don't have to keep tweaking your sync when you sync the next stream. Usually it's best to keep the International stream as leading, since most other streams are ahead of it, so you just apply delays to the other streams until they match.

  2. Use a stopwatch

    Sometimes you can use a stopwatch to get a measure of the delay between two streams. Watch for something to happen on the driver on-board, start your stopwatch, and when the same event happens on the international stream, stop it. You now have the delay between the two streams, and can adjust the target latency of the on-board stream as needed.

  3. Ensure your stream is at the latency target before adjusting further

    When you adjust the target latency, the player will not 'skip' to that point. Instead, it speeds up or slows down playback by 20% until it is at the position it needs to be. You can press D while in a player window to see the playbackRate. If this isn't at 1.0, it means the player isn't done matching the target latency. You can also watch the difference between targetLatency and liveLatency, which should be less than 0.075.

  4. A perfect sync doesn't exist

    Even the international broadcast has around 200-500ms of delay between the trackside and on-board cameras. You don't notice this until you sync up your on-board cameras with the international broadcast and then you see that when the camera cuts, hitting the apex on the OBC and on the international stream doesn't happen at the same time anymore. Accepting your sync will be within a second or 2, is usually good for your mental health.

Syncing and fine-tuning

To start, open the streams you want to be viewing. MultiViewer will try to apply the default target latencies which should get you close to an acceptable sync, but not perfect. Next, we're going to try and see if we can sync a single driver on-board to the international stream (our lead stream).

Sync onboard cameras

It's easiest to sync driver OBCs when they are shown on the international broadcast. Look for landmarks (bridges, markings, corners, buildings etc.) that you recognize and time the difference using a stopwatch or count them in your head. If you know how much it is ahead or behind, you can open the debug overlay by pressing D, and then you can adjust the targetLatency by the amount you counted/measured. You need to wait for the stream to catch up, once the liveLatency more or less matches the targetLatency, you can evaluate. Sometimes you can see patterns in the bumps or movements of the driver (like the steering wheel), and use Arrow up/down together with Shift to change the targetLatency with smaller steps (0.1s instead of 1s).

Most of the time, all OBCs are more or less in sync with eachother, so applying the same targetLatency to all OBCs makes sense. Other stream types like F1 Live or the Tracker/Data streams require different approaches.

Syncing F1 Live

F1 Live is the easiest to sync with the international stream, since they usually show the same stream on the screen (although sometimes as a picture-in-picture on F1 Live). This means you have a reference picture at all times. You can fine tune this all you want.

Syncing data and driver tracker channels

These are very different to the ones synced above. Frustratingly, the audio commentary could be used to sync, but if you do this, the data isn't synced! Instead, it makes sense to sync OBCs first, then pick a driver and see where they are on track roughly. Then, see how much time is between them approaching the apex of a tight corner on the map compared to the onboard, and use this delay to sync the driver tracker. For the data channel, when mini sectors are shown, you could use the final mini sector to sync the start-finish line on the on-boards, or you can use the clock to sync to the international stream. During the race, you can use the delay between updating the lap counter as well, using a stopwatch here is advised.

Syncing live telemetry

The best way to sync live telemetry for now is by using either the lap counter or the last mini sector.

Some links on this website are affiliate links. This means that if you click on the link and purchase the item, it supports the development of MultiViewer. This is at no additional cost to you. MultiViewer is an unofficial app and is not associated in any way with the Formula 1 companies. F1, FORMULA ONE, FORMULA 1, FIA FORMULA ONE WORLD CHAMPIONSHIP, GRAND PRIX and related marks are trade marks of Formula One Licensing BV. MultiViewer for F1 requires a paid F1TV subscription and doesn't help circumvent any content protection or limitations by F1TV. MultiViewer is a non-commercial, fan-made application. Data is used for non-commercial, fair use. All product, teams and company names are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them. Any product names, logos, brands, and other trademarks or images featured or referred to within the app are the property of their respective trademark holders. These trademark holders are not affiliated with MultiViewer or its contributors. They do not sponsor or endorse MultiViewer or any of our products.