Skip to content
fr

IPTV architect — MyTF1 across all platforms · 2021–2024

e-TF1

Alban Pasquelin was IPTV architect at e-TF1 from January 2021 to January 2024, rebuilding MyTF1 across every French operator set-top box from a single codebase — Android TV, WebOS and WPE — with SCTE-35 dynamic ad insertion integrated into the Freewheel stack.

import { ReactNative, ReactNativeWeb, AndroidTV, WebOS } from '@/stack'
export function (fleet: OperatorSetTopBox[]): SingleCodebase {

The TF1 app has to run on the set-top boxes of every French operator. Each box has its own system, its own remote and its own horsepower — some are ten years old. The usual answer is one app per system, then maintaining them separately.

const fleet = frenchOperators.flatMap((operator) => operator.setTopBoxes)

I rebuilt all of it into a single codebase deployed on Android TV, WebOS and WPE. A fix is written once and lands everywhere. A feature ships on the same day across the whole fleet.

const myTF1 = reactNativeWeb.buildOnce().deployTo(androidTV, webOS, wpe)

White-label sites for the group's thematic channels are generated automatically from that same codebase: a new channel no longer means a new project.

thematicChannels.forEach((channel) => generateWhiteLabelSite(channel))

Advertising is inserted into the live stream using SCTE-35, integrated with the Freewheel stack: the feed carries markers saying where a spot belongs, and each viewer receives their own without the picture ever stuttering.

liveStream.on('scte35', (cue) => freewheel.insertAd(cue, viewer))
return {
codebase: 1, /** codebase **/
setTopBox: 3, /** set-top box systems **/
dynamicAdInsertion: 'SCTE-35', /** dynamic ad insertion **/
}
}
Three systems, one codebaseThree separate code streams — Android TV, WebOS, WPE — merge into a single stream feeding all three boxes. The amber marker is an SCTE-35 ad insertion swapped mid-broadcast.

Experience