Skip to main content
Version: 11.13.0

THEOlive support

High-quality synchronized video streaming at scale for providers of large sports broadcasting, sports betting, and interactive entertainment

Platform support​

THEOlive playback is supported on Android, iOS and Web as part of the THEOplayer Flutter SDK.

THEOlive playback​

THEOlive playback is part of THEOplayer's playback engine instead of being available as a separate SDK.

Setting a THEOlive source​

player.source = SourceDescription(sources: [
TheoLiveSource(src: "2vqqekesftg9zuvxu9tdme6kl"),
]);

Instead of using a remote HTTPS url, you can just specify your channelID from the THEOlive Console and you can start the playback.

Overriding the target latency​

A source-level latency target overrides the target configured in the THEOlive Console:

player.source = SourceDescription(sources: [
TheoLiveSource(
src: "2vqqekesftg9zuvxu9tdme6kl",
latencyConfiguration: SourceLatencyConfiguration(targetOffset: 2.0),
),
]);

Android and Web also support the optional minimum and maximum offsets, force-seek offset and playback-rate bounds. iOS applies only targetOffset.

NOTE: your THEOplayer license has to contain the HESP feature to make it work. (HESP is the underlying technology of THEOlive).

Once the playback starts, you can listen to playback-specify events on THEOplayer.

Additional configuration options on THEOPlayerConfig​

By setting a THEOliveConfiguration object on THEOplayerConfig you are able to specify extra configuration for THEOlive (e.g. a custom sessionId to follow the requests on the backend)

player = THEOplayer(
theoPlayerConfig: THEOplayerConfig(
license: PLAYER_LICENSE,
theolive: TheoLiveConfiguration(externalSessionId: "mySessionID"),
),
onCreate: () {
print("player is created, ready to use");

});

Listening for THEOlive-specific events​

player.theoLive?.addEventListener(THEOliveApiEventTypes.DISTRIBUTIONLOADSTART, (e) {
print("DISTRIBUTIONLOADSTART");
});
player.theoLive?.addEventListener(THEOliveApiEventTypes.DISTRIBUTIONOFFLINE, (e) {
print("DISTRIBUTIONOFFLINE");
});
player.theoLive?.addEventListener(THEOliveApiEventTypes.ENDPOINTLOADED, (e) {
print("ENDPOINTLOADED");
});
player.theoLive?.addEventListener(THEOliveApiEventTypes.INTENTTOFALLBACK, (e) {
print("INTENTTOFALLBACK");
});
player.theoLive?.addEventListener(THEOliveApiEventTypes.ENTERBADNETWORKMODE, (e) {
print("ENTERBADNETWORKMODE");
});
player.theoLive?.addEventListener(THEOliveApiEventTypes.EXITBADNETWORKMODE, (e) {
print("EXITBADNETWORKMODE");
});

Migration from THEOlive Flutter SDK to THEOplayer Flutter SDK​

setStateListener​

From

theoLive.setStateListener(...)

to

player.theoLive.setStateListener(...)

loadChannel​

From

theoLive.loadChannel("2vqqekesftg9zuvxu9tdme6kl")

to

player.source = SourceDescription(sources: [
TheoLiveSource(src: "2vqqekesftg9zuvxu9tdme6kl"),
]);

addEventListener​

From

theoLive.addEventListener(this)

to THEOlive-related events

player.theoLive?.addEventListener(THEOliveApiEventTypes.DISTRIBUTIONLOADSTART, (e) {
print("DISTRIBUTIONLOADSTART event");
});
player.theoLive?.addEventListener(THEOliveApiEventTypes.DISTRIBUTIONOFFLINE, (e) {
print("DISTRIBUTIONOFFLINE event");
});
player.theoLive?.addEventListener(THEOliveApiEventTypes.ENDPOINTLOADED, (e) {
print("ENDPOINTLOADED event");
});
player.theoLive?.addEventListener(THEOliveApiEventTypes.INTENTTOFALLBACK, (e) {
print("INTENTTOFALLBACK event");
});
player.theoLive?.addEventListener(THEOliveApiEventTypes.ENTERBADNETWORKMODE, (e) {
print("ENTERBADNETWORKMODE event");
});
player.theoLive?.addEventListener(THEOliveApiEventTypes.EXITBADNETWORKMODE, (e) {
print("EXITBADNETWORKMODE event");
});

and to playback-related events

player.addEventListener(PlayerEventTypes.PLAY, (e) {
print("PLAY event");
});
player.addEventListener(PlayerEventTypes.PLAYING, (e) {
print("PLAYING event");
});
player.addEventListener(PlayerEventTypes.PAUSE, (e) {
print("PAUSE event");
}););

From

theoLive.play()

to

player.play()

Channel events​

The channel related events:

ChannelLoadStart,
ChannelLoaded,
ChannelOffline

are renamed to Publication events

PublicationLoadStart,
PublicationLoaded,
PublicationOffline

Anything missing?​

Please reach out to us!