You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 15 Next »
Every API maps one on one to a public method on the PlayerInstanceAAMP class declared in main_aamp.h in Aamp source code.
JSON-RPC method | Aamp Player Instance Method | Parameter | Result | Summary | Jsonrpc example |
|---|---|---|---|---|---|
org.rdk.player.openSession | sessionId: stringappName : stringtraceUUID : string | sessionId : stringsuccess : boolean | Open a new player session | { | |
org.rdk.player.configureSession | sessionId : stringconfig : object | sessionId : stringsuccess : boolean | Apply configuration to an open session | { | |
org.dk.player.closeSession | sessionId : stringsuccess : boolean | sessionId: Stringsuccess : boolean | Close and release a player session | { | |
org.rdk.player.tune | Tune | url : StringautoPlay : booleancontentType : StringtraceUUID : String | success : boolean | Instructs the AAMP to tune to the given URL. | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.tune","params":{"url":"https://dash.akamaized.net/akamai/bbb_30fps/bbb_30fps.mpd","autoPlay":true,"contentType":"VOD"}} |
org.rdk.player.stop | Stop | None | success :boolean | Stops the current playback and releases decoder resources. The player returns to the idle state. | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.stop"} |
org.rdk.player.seek | Seek | position : numberkeepPaused : boolean | success : boolean | Seeks to an absolute position in the stream | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.seek","params":{"position":120.0,"keepPaused":false}} |
org.rdk.player.seekToLive | SeekToLive | keepPaused : boolean | success : boolean | Seek to the live edge | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.seekToLive","params":{"keepPaused":false}} |
org.rdk.player.setRate | SetRate | rate : numberovershootCorrection : integer | success: boolean | Set playback rate / trick-play speed | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setRate","params":{"rate":2,"overshootCorrection":0}} |
org.rdk.player.setPlaybackSpeed | SetPlaybackSpeed | speed : number | success: boolean | Sets the playback speed directly | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setPlaybackSpeed","params":{"speed":0.5}} |
org.rdk.player.pauseAt | PauseAt | position : number | success : boolean | Schedule a pause at a future position | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.pauseAt","params":{"position":300.0}} |
org.rdk.player.setRateAndSeek | SetRateAndSeek | rate : integerposition : number | success:boolean | Atomically set rate and seek | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setRateAndSeek","params":{"rate":1,"position":60.0}} |
org.rdk.player.getState | GetState | None | state : PlayerState | Get current player state | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getState"} |
org.rdk.player.getPlaybackPosition | GetPlaybackPosition | None | position : Number | Get current playback position | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPlaybackPosition"} |
org.rdk.player.getPlaybackDuration | GetPlaybackDuration | None | duration : Number | Get total stream duration | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPlaybackDuration"} |
org.rdk.player.getPlaybackRate | GetPlaybackRate | None | rate : Number | Get current playback rate | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPlaybackRate"} |
org.rdk.player.isLive | IsLive | None | isLive :Boolean | Check if stream is live | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.isLive"} |
org.rdk.player.setVideoMute | SetVideoMute | muted : boolean | success : | Mute or unmute the video plane | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setVideoMute","params":{"muted":true}} |
org.rdk.player.getVideoMute | GetVideoMute | None | muted : | Get video mute state | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getVideoMute"} |
org.rdk.player.setAudioVolume | SetAudioVolume | volume : integer | success : | Set audio volume | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setAudioVolume","params":{"volume":80}} |
org.rdk.player.getAudioVolume | GetAudioVolume | None | volume : | Get audio volume | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAudioVolume"} |
org.rdk.player.getAudioLanguage | GetAudioLanguage | ||||
org.rdk.player.getAvailableAudioTracks | GetAvailableAudioTracks | allTracks boolean | tracks :AudioTrack[] | List available audio tracks | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAvailableAudioTracks","params":{"allTracks":false}} |
org.rdk.player.setAudioTrack | SetAudioTrack | trackId : integer | success : | Select an audio track by index | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setAudioTrack","params":{"trackId":1}} |
org.rdk.player.getAudioTrack | GetAudioTrack | None | trackId:integer | Get index of active audio track | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAudioTrack"} |
org.rdk.player.getAudioTrackInfo | GetAudioTrackInfo | None | trackInfo:AudioTrack | Get details of active audio track | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAudioTrackInfo"} |
org.rdk.player.setSubtitleMute | SetSubtitleMute | muted: boolean | success: boolean | Mute or unmute subtitles | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setSubtitleMute","params":{"muted":true}} |
org.rdk.player.getAvailableTextTracks | GetAvailableTextTracks | allTracks : boolean | tracks : | List available text/subtitle tracks | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAvailableTextTracks","params":{"allTracks":false}} |
org.rdk.player.setTextTrack | SetTextTrack | trackId : integer | success : boolean | Select a text track by index | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setTextTrack","params":{"trackId":0}} |
org.rdk.player.getTextTrack | GetTextTrack | None | trackId : integer | Get index of active text track | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getTextTrack"} |
org.rdk.player.getVideoBitrate | GetVideoBitrate | None | bitrate : integer | Get current video bitrate | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getVideoBitrate"} |
org.rdk.player.setVideoBitrate | SetVideoBitrate | bitrate : integer | success : boolean | Lock the video bitrate | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setVideoBitrate","params":{"bitrate":2000000}} |
org.rdk.player.getVideoBitrates | GetVideoBitrates | None | bitrates : | List all available video bitrates | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getVideoBitrates"} |
org.rdk.player.setInitialBitrate | SetInitialBitrate | bitrate : integer | success : boolean | Set the startup bitrate hint | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setInitialBitrate","params":{"bitrate":2000000}} |
org.rdk.player.getInitialBitrate | getInitialBitrat |
| bitrate : integer | Set the startup bitrate hint | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getInitialBitrate"} |
org.rdk.player.setMinimumBitrate | SetMinimumBitrate | bitrate : integer | success : boolean | Set the ABR minimum bitrate floor | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setMinimumBitrate","params":{"bitrate":800000}} |
org.rdk.player.getMinimumBitrate | GetMinimumBitrate | None | bitrate : integer | Get the ABR minimum bitrate floor | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getMinimumBitrate"} |
org.rdk.player.setMaximumBitrate | SetMaximumBitrate | bitrate : integer | success : boolean | Set the ABR maximum bitrate ceiling | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setMaximumBitrate","params":{"bitrate":8000000}} |
org.rdk.player.getMaximumBitrate | getMaximumBitrate | None | bitrate : integer | Get the ABR maximum bitrate ceiling | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getMaximumBitrate"} |
rg.rdk.player.setLicenseServerURL | SetLicenseServerURL | url : | success : boolean | Set the DRM license server URL | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setLicenseServerURL","params":{"url":"https://license.example.com/widevine"}} |
org.rdk.player.getDRM | GetDRM | None | drm : string | Get active DRM system | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getDRM"} |
org.rdk.player.setPreferredDRM | SetPreferredDRM | drmType : string | success : boolean | Set the preferred DRM system | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setPreferredDRM","params":{"drmType":"widevine"}} |
org.rdk.player.initAAMPConfig | InitAAMPConfig | config : object | success : boolean | Apply AAMP configuration | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.initAAMPConfig","params":{"config":{"networkTimeout":10,"downloadBuffer":30}}} |
rg.rdk.player.getAAMPConfig | GetAAMPConfig | None | config : object | Get current AAMP configuration | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAAMPConfig"} |
org.rdk.player.setAppName | SetAppName | name : string | success : boolean | Set the application name | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setAppName","params":{"name":"MyStreamingApp"}} |
org.rdk.player.setPreferredLanguages | SetPreferredLanguages | languageList : string | success : boolean | Set preferred audio/text language preferences | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setPreferredLanguages","params":{"languageList":"en,fra,spa","rendition":"main","type":"AUDIO_STEREO","codecList":"mp4a.40.2"}} |
org.rdk.player.getPreferredLanguages | GetPreferredLanguages | None | languageList : sting | Get the preferred language list | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPreferredLanguages"} |
JSON-RPC method | Aamp Player Instance Method | Parameter | Result | Summary | Jsonrpc example |
|---|---|---|---|---|---|
org.rdk.player.openSession | sessionId: stringappName : stringtraceUUID : string | sessionId : stringsuccess : boolean | Open a new player session | { | |
org.rdk.player.configureSession | sessionId : stringconfig : object | sessionId : stringsuccess : boolean | Apply configuration to an open session | { | |
org.dk.player.closeSession | sessionId : stringsuccess : boolean | sessionId: Stringsuccess : boolean | Close and release a player session | { | |
org.rdk.player.tune | Tune | url : StringautoPlay : booleancontentType : StringtraceUUID : String | success : boolean | Instructs the AAMP to tune to the given URL. | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.tune","params":{"url":"https://dash.akamaized.net/akamai/bbb_30fps/bbb_30fps.mpd","autoPlay":true,"contentType":"VOD"}} |
org.rdk.player.stop | Stop | None | success :boolean | Stops the current playback and releases decoder resources. The player returns to the idle state. | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.stop"} |
org.rdk.player.seek | Seek | position : numberkeepPaused : boolean | success : boolean | Seeks to an absolute position in the stream | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.seek","params":{"position":120.0,"keepPaused":false}} |
org.rdk.player.seekToLive | SeekToLive | keepPaused : boolean | success : boolean | Seek to the live edge | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.seekToLive","params":{"keepPaused":false}} |
org.rdk.player.setRate | SetRate | rate : numberovershootCorrection : integer | success: boolean | Set playback rate / trick-play speed | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setRate","params":{"rate":2,"overshootCorrection":0}} |
org.rdk.player.setPlaybackSpeed | SetPlaybackSpeed | speed : number | success: boolean | Sets the playback speed directly | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setPlaybackSpeed","params":{"speed":0.5}} |
org.rdk.player.pauseAt | PauseAt | position : number | success : boolean | Schedule a pause at a future position | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.pauseAt","params":{"position":300.0}} |
org.rdk.player.setRateAndSeek | SetRateAndSeek | rate : integerposition : number | success:boolean | Atomically set rate and seek | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setRateAndSeek","params":{"rate":1,"position":60.0}} |
org.rdk.player.getState | GetState | None | state : PlayerState | Get current player state | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getState"} |
org.rdk.player.getPlaybackPosition | GetPlaybackPosition | None | position : Number | Get current playback position | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPlaybackPosition"} |
org.rdk.player.getPlaybackDuration | GetPlaybackDuration | None | duration : Number | Get total stream duration | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPlaybackDuration"} |
org.rdk.player.getPlaybackRate | GetPlaybackRate | None | rate : Number | Get current playback rate | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPlaybackRate"} |
org.rdk.player.isLive | IsLive | None | isLive :Boolean | Check if stream is live | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.isLive"} |
org.rdk.player.setVideoMute | SetVideoMute | muted : boolean | success : | Mute or unmute the video plane | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setVideoMute","params":{"muted":true}} |
org.rdk.player.getVideoMute | GetVideoMute | None | muted : | Get video mute state | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getVideoMute"} |
org.rdk.player.setAudioVolume | SetAudioVolume | volume : integer | success : | Set audio volume | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setAudioVolume","params":{"volume":80}} |
org.rdk.player.getAudioVolume | GetAudioVolume | None | volume : | Get audio volume | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAudioVolume"} |
org.rdk.player.getAudioLanguage | GetAudioLanguage | ||||
org.rdk.player.getAvailableAudioTracks | GetAvailableAudioTracks | allTracks boolean | tracks :AudioTrack[] | List available audio tracks | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAvailableAudioTracks","params":{"allTracks":false}} |
org.rdk.player.setAudioTrack | SetAudioTrack | trackId : integer | success : | Select an audio track by index | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setAudioTrack","params":{"trackId":1}} |
org.rdk.player.getAudioTrack | GetAudioTrack | None | trackId:integer | Get index of active audio track | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAudioTrack"} |
org.rdk.player.getAudioTrackInfo | GetAudioTrackInfo | None | trackInfo:AudioTrack | Get details of active audio track | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAudioTrackInfo"} |
org.rdk.player.setSubtitleMute | SetSubtitleMute | muted: boolean | success: boolean | Mute or unmute subtitles | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setSubtitleMute","params":{"muted":true}} |
org.rdk.player.getAvailableTextTracks | GetAvailableTextTracks | allTracks : boolean | tracks : | List available text/subtitle tracks | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAvailableTextTracks","params":{"allTracks":false}} |
org.rdk.player.setTextTrack | SetTextTrack | trackId : integer | success : boolean | Select a text track by index | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setTextTrack","params":{"trackId":0}} |
org.rdk.player.getTextTrack | GetTextTrack | None | trackId : integer | Get index of active text track | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getTextTrack"} |
org.rdk.player.getVideoBitrate | GetVideoBitrate | None | bitrate : integer | Get current video bitrate | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getVideoBitrate"} |
org.rdk.player.setVideoBitrate | SetVideoBitrate | bitrate : integer | success : boolean | Lock the video bitrate | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setVideoBitrate","params":{"bitrate":2000000}} |
org.rdk.player.getVideoBitrates | GetVideoBitrates | None | bitrates : | List all available video bitrates | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getVideoBitrates"} |
org.rdk.player.setInitialBitrate | SetInitialBitrate | bitrate : integer | success : boolean | Set the startup bitrate hint | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setInitialBitrate","params":{"bitrate":2000000}} |
org.rdk.player.getInitialBitrate | getInitialBitrat |
| bitrate : integer | Set the startup bitrate hint | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getInitialBitrate"} |
org.rdk.player.setMinimumBitrate | SetMinimumBitrate | bitrate : integer | success : boolean | Set the ABR minimum bitrate floor | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setMinimumBitrate","params":{"bitrate":800000}} |
org.rdk.player.getMinimumBitrate | GetMinimumBitrate | None | bitrate : integer | Get the ABR minimum bitrate floor | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getMinimumBitrate"} |
org.rdk.player.setMaximumBitrate | SetMaximumBitrate | bitrate : integer | success : boolean | Set the ABR maximum bitrate ceiling | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setMaximumBitrate","params":{"bitrate":8000000}} |
org.rdk.player.getMaximumBitrate | getMaximumBitrate | None | bitrate : integer | Get the ABR maximum bitrate ceiling | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getMaximumBitrate"} |
rg.rdk.player.setLicenseServerURL | SetLicenseServerURL | url : | success : boolean | Set the DRM license server URL | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setLicenseServerURL","params":{"url":"https://license.example.com/widevine"}} |
org.rdk.player.getDRM | GetDRM | None | drm : string | Get active DRM system | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getDRM"} |
org.rdk.player.setPreferredDRM | SetPreferredDRM | drmType : string | success : boolean | Set the preferred DRM system | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setPreferredDRM","params":{"drmType":"widevine"}} |
org.rdk.player.initAAMPConfig | InitAAMPConfig | config : object | success : boolean | Apply AAMP configuration | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.initAAMPConfig","params":{"config":{"networkTimeout":10,"downloadBuffer":30}}} |
rg.rdk.player.getAAMPConfig | GetAAMPConfig | None | config : object | Get current AAMP configuration | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAAMPConfig"} |
org.rdk.player.setAppName | SetAppName | name : string | success : boolean | Set the application name | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setAppName","params":{"name":"MyStreamingApp"}} |
org.rdk.player.setPreferredLanguages | SetPreferredLanguages | languageList : string | success : boolean | Set preferred audio/text language preferences | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setPreferredLanguages","params":{"languageList":"en,fra,spa","rendition":"main","type":"AUDIO_STEREO","codecList":"mp4a.40.2"}} |
org.rdk.player.getPreferredLanguages | GetPreferredLanguages | None | languageList : sting | Get the preferred language list | {"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPreferredLanguages"} |
Subscription
All `org.rdk.player.on*` notifications are opt-in. Subscribe per client; each connection has its own independent subscription set.
After subscribing, the server pushes matching events as JSON-RPC notifications.
eg:
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.subscribe","params":{"event":"org.rdk.player.onProgress"}}
Unsubscribe
eg:
Request
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.unsubscribe","params":{"event":"org.rdk.player.onProgress"}}
Response
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
| Event | Description | Response |
|---|---|---|
org.rdk.player.onTuned | Tune succeeded and playback is ready | {"jsonrpc":"2.0","method":"org.rdk.player.onTuned","params":{}} |
org.rdk.player.onTuneFailed | Tune failed and playback is not ready | {"jsonrpc":"2.0","method":"org.rdk.player.onTuneFailed","params":{"description":"Manifest download failed","code":10,"shouldRetry":true}} |
org.rdk.player.onStateChanged | New player lifecycle state | {"jsonrpc":"2.0","method":"org.rdk.player.onStateChanged","params":{"state":"playing"}} |
org.rdk.player.onProgress | {"jsonrpc":"2.0","method":"org.rdk.player.onProgress","params":{"positionMs":12500,"durationMs":3600000,"speed":1,"startMs":0,"endMs":3600000,"videoBufferedMs":8000,"audioBufferedMs":8000,"liveLatencyMs":0,"profileBitrate":4000000,"networkBitrate":6000000}} | |
rg.rdk.player.onBitrateChanged | {"jsonrpc":"2.0","method":"org.rdk.player.onBitrateChanged","params":{"bitrate":2000000,"width":1280,"height":720,"description":"NetworkCongestion"}} | |
org.rdk.player.onMediaMetadata | {"jsonrpc":"2.0","method":"org.rdk.player.onMediaMetadata","params":{"durationMs":3600000,"width":1920,"height":1080,"hasDrm":true,"isLive":false,"drmType":"widevine","languages":["en","fra"],"bitrates":[800000,2000000,4000000,8000000],"speeds":[-64,-32,-16,-8,-4,-2,1,2,4,8,16,32,64]}} | |
org.rdk.player.onSpeedChanged | {"jsonrpc":"2.0","method":"org.rdk.player.onSpeedChanged","params":{"speed":2}} | |
org.rdk.player.onBufferingChanged | {"jsonrpc":"2.0","method":"org.rdk.player.onBufferingChanged","params":{"buffering":true}} | |
org.rdk.player.onSeeked | {"jsonrpc":"2.0","method":"org.rdk.player.onSeeked","params":{"positionMs":120000}} | |
org.rdk.player.onDrmMetadata | {"jsonrpc":"2.0","method":"org.rdk.player.onDrmMetadata","params":{"accessStatus":"Authorized"}} | |
org.rdk.player.onAnomaly | {"jsonrpc":"2.0","method":"org.rdk.player.onAnomaly","params":{"severity":1,"message":"Segment download stalled; retrying"}} |
DISCLAIMER: Please note that the use of the RDK Wiki is subject to its Privacy Policy & Terms of Use. In addition, this Wiki may be accessed by all RDK licensees and their contractors.
Powered by a free Atlassian Confluence Open Source Project License granted to RDKCentral. Evaluate Confluence today.