Key concepts

Starting and ending a Virtual Channel

When creating your Virtual Channel service in, you are being asked to pick a Live source as original content. It is recommended to use a live stream with a black slate, or personalized logo, as an original content, it will be used as base stream from your Virtual Channel. At the end of the process of the Service creation, you receive a URL. This URL immediately delivers a Live manifest referencing the original source you would have defined when creating the Service.

A Virtual Channel has no hard start or hard stop apart from, respectively, the Virtual Channel Service creation and deletion. A service is always on, even when programs are not scheduled. In this case, the base stream selected when creating the Service as original Source is referenced in the manifest.
Therefore, the beginning of the Virtual Channel is a virtual starting point, which is represented by the actual start-time (UTC) of the first (in time) scheduled Mediapoint, or slot - aka the first VOD or event scheduled. When working with multiple variants, each variant can have its own starting point.

Along the same line, the end of the Virtual Channel is a virtual ending point, which is represented by the actual end-time (UTC), of the last (in time) scheduled Mediapoint, or Slot - aka the last VOD or event scheduled. When working with multiple variants, each variant can have its own ending point.
After the last scheduled VOD or event, the manifest delivered will be referencing the original source that you defined when creating the Service.


Example of a Virtual Timeline and personalized manifest delivered


A few key takeaways:

  • A Virtual Channel starts as soon as the Service is created, with manifests referencing the original Source content defined when creating the Service.
  • Not scheduling a program during a certain period on your Virtual Channel, does not significate the end of the Virtual Channel.
  • If no program is scheduled on the Virtual Channel for a given period of time, the manifest will continue to be delivered, referencing the original Source content.
  • A Virtual Channel stops delivering the manifest when the Service is deleted.

Scheduling logic

Building a Virtual Channel schedule in means creating consecutive replacement slots over a certain period or time on a Virtual Channel service. When scheduling a first asset, whether it is a VOD or a Live event, a start-time, a duration, and a replacement source must be provided. Each asset scheduled means that a content-replacement slot needs to be created on using the API.


Example of a Virtual Timeline with associated slots/MediaPoints

In the example above, T0 is the start-time of the first program scheduled. Using the ENSI API, or REST API, VOD 1 is scheduled for a period of time of 600s (10min), which is the duration of VOD 1 in seconds. The second program is consecutively scheduled right after VOD1, so its start-time is the equivalent of VOD1's end-time. VOD2 is scheduled at T1 = T0 + 600s, for a duration of 420s, which is the duration of VOD2.

The same pattern can be applied to all the following consecutive events, where each slot's start-time is the end-time of the previous slot. Therefore in our example, the third program is scheduled at T2 = T1 + 420s , over a period which matches the duration of the event in seconds.

1. Slot 1 / MediaPoint 1

  • start time: 2022-12-20T16:20:00.000Z
  • duration: 600 seconds
  • replacement source: VOD1

1. Slot 2 / MediaPoint 2

  • start time: 2022-12-20T16:30:00.000Z
  • duration: 420 seconds
  • replacement source: VOD2

1. Slot 3 / MediaPoint 3

  • start time: 2022-12-20T16:37:00.000Z
  • duration: 630 seconds
  • replacement source: LIVE 1

No event scheduled in the timeline

In the event where somewhere in the Virtual Timeline of any of the variants, there is no event scheduled, the manifest will reference the original content that has been defined when creating the Service.


Example of a Virtual Timeline with missing events, and personalized manifest delivered

Using Live events in Virtual Channels

As soon as one needs to schedule Live event(s) in the Virtual Channel, scheduling can become a bit more complex to manage. Indeed, Live events start at a specific time, and finish at a another specific time. Sometimes, some events such as sport events need to be extended (soccer), or shortened (Tennis) in almost real time. Planning a Virtual Channel around Live events is not easy, and it can get really complex to build a Virtual Timeline where the combination of VODs perfectly matches the start of a Live event.

In that case, we recommend using promos and slates, which can come fill the gap between programs for a couple of seconds without deteriorating the user experience.

Audiences Management

All slots used to schedule programs (assets or events) are either unconditional or audience-based. A third scenario is possible, where a slot would only address the subscribers which do not belong to a certain Audience, but this is actually treated the same way as an Audience-based slot.
Under the unconditional slot approach, no matter the Audience he/she belongs, the subscriber is concerned by the slot. Under the audience-based approach, the subscriber is concerned by the slot if she/he belongs to the Audience for which the slot has been specified.

When working with Audience and channel personalization, some programs need to be scheduled for a certain base of subscribers, and other programs for another subscriber base. Sometimes, subscribers from different bases also have a common base of programs that they watch at the same time. In, it is possible to create different slots on the same Virtual Channel, over the same period of time, for different Audiences. You can find more information about defining Audiences in the Handling Content Replacement slots section.

We will assume here, for the sake of explanation, that we have a subscriber base that is segmented in four Audiences. We intend to have some common programming for all four Audiences, as well as dedicated programs for each. We would then generate four variants, one per Audience, and therefore four Virtual Timelines as below:


Virtual Timeline representing a Virtual Channel with four variants

In the Virtual Timeline above, the four variants have their own schedule. They share a single event over the period, which is Live event 1. In this case:

  • four content replacement slots would be created for Variant 1, to schedule VOD1, VOD2, VOD 3 and VOD 4.
  • four content replacement slots would be created for Variant 2, to schedule VOD10, VOD11, VOD 12 and VOD 13.
  • three content replacement slots would be created for Variant 21, to schedule VOD21 and VOD22.
  • five content replacement slots would be created for Variant 30, to schedule VOD31, VOD32, VOD33, and VOD34
  • one content replacement slot would be created to schedule Live Event 1 on the four Variants.

Scheduling Ad breaks


Within the Virtual Channel concept, which allows you to schedule Live and Asset programs, you can also leverage the Server-Side Ad Insertion mechanism of to schedule Ad breaks. To enable this functionality, you need to activate Ad Break insertion on the Virtual Channel Service and attach an Ad server configuration to it.

How it works

Once AdBreak insertion is activated on the Virtual Channel Service, you can schedule Ad breaks using either the REST API or the scheduler on the web app. You can specify the type of content as "Ad Break" and provide a duration for the break.

When a player requests a manifest during a scheduled Ad break, communicates with the selected Ad server to retrieve the list of Ads to be inserted within the break using VAST. then inserts the Ad(s) into the break by referencing the Ads media segment within the manifest.

Sending the Ad Break Duration

In most cases, it is important to send the duration of the break to the Ad server. This configuration should be set up on the Ad server configuration. For more information, please refer to the working with macros section.

Incompatible Ads Returned by the Ad Server

If the Ads returned by the Ad Server are not compatible or if content conformity has not been achieved, will not insert the Ads into the manifest.

With the Usage of a Slate (gap-filler)

If you have provided a gap-filler when defining your Virtual Channel, it will be inserted instead of the Ads. Note that if you are not using a transcoding profile for your ads, transcoding will still be necessary for gap-filler.

Without the Usage of a Slate

If you haven't provided a gap-filler in the Service definition or if content conformity has not been achieved, will not perform any insertion. The original base live stream will be referenced.

Impression Tracking

Similar to other SSAI workflows, you can trigger Impression tracking beacons either Server-side or Client-side.

Server-side Ad Tracking

Refer to the relevant section to understand how SSAT works.

Client-side Ad Tracking

Refer to the relevant section to understand how CSAT works.