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");
}););
Playback-related actions
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!