You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 28 Current »


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 methodAamp Player Instance MethodParameterResultSummaryJsonrpc Request exampleJsonrpc response example
org.rdk.player.openSession
instanceId : string ,

displayId : string
sessionId : stringsuccess : booleanOpen a new player session"jsonrpc":"2.0", "id":"123454","method":"org.rdk.player.openSession", "params":{"instanceId":"123-1232-321312-3123","displayId":"wst-mywindow"}}{"id":"123454","jsonrpc":"2.0","result":{"sessionId":"session_1783267426","status":true}}

org.rdk.player.configureSession
sessionId : string config : objectsessionId : stringsuccess : booleanApply configuration to an open session{

  "jsonrpc": "2.0",

  "id": 2,

  "method": "org.rdk.player.configureSession",

  "params": {

    "sessionId": "sess-abc-001",

    "config": {

      "networkTimeout": 10,

      "downloadBuffer": 30,

      "preferredDRM": "widevine",

      "initialBitrate": 2000000

    }

  }

}
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "sessionId": "sess-abc-001",
    "success": true
  }
}
org.dk.player.closeSession
sessionId : string success : booleanClose and release a player session{"jsonrpc":"2.0", "id":"123454","method":"org.rdk.player.closeSession", "params":{"sessionId":"session_1783267426"}}{"id":"123454","jsonrpc":"2.0","result":{"message":"Session closed successfully.","status":true}}
org.rdk.player.playTuneurl : String autoPlay : boolean , sessionId : stringsuccess : booleanInstructs the AAMP  to tune to the given URL.{"jsonrpc":"2.0", "id":"123454","method":"org.rdk.player.play", "params":{"url":"http://dash.akamaized.net/dash264/TestCases/1a/qualcomm/1/MultiRate.mpd","sessionId":"session_1783267426"}}{"id":"123454","jsonrpc":"2.0","result":{"message":"Content playback started.","status":true}}
org.rdk.player.stopStopsessionId : stringsuccess :booleanStops the current playback and releases decoder resources. The player returns to the idle state.{"jsonrpc":"2.0", "id":"123454","method":"org.rdk.player.stop", "params":{"sessionId":"session_1783267426"}}

{"jsonrpc":"2.0","id":5,"result":{"success":true}}

org.rdk.player.seekSeekposition : numberkeepPaused : boolean , sessionId : stringsuccess : booleanSeeks to an absolute position in the stream{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.seek","params":{"sessionId":"sess-abc-001","position":120.0,"keepPaused":false}}

{"jsonrpc":"2.0","id":5,"result":{"success":true}}

org.rdk.player.seekToLiveSeekToLivekeepPaused : boolean , sessionId : stringsuccess : booleanSeek to the live edge{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.seekToLive","params":{"keepPaused":false,"sessionId":"session_1783267426"}}{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.setRateSetRaterate : number overshootCorrection : integer , sessionId : stringsuccess: booleanSet playback rate / trick-play speed{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setRate","params":{"rate":2,"overshootCorrection":0,"sessionId":"session_1783267426"}}{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.setPlaybackSpeedSetPlaybackSpeedspeed : number , sessionId : stringsuccess: booleanSets the playback speed directly{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setPlaybackSpeed","params":{"speed":0.5,"sessionId":"session_1783267426"}}{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.pauseAtPauseAtposition : number , sessionId : stringsuccess : booleanSchedule a pause at a future position{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.pauseAt","params":{"position":300.0,"sessionId":"session_1783267426"}}{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.setRateAndSeekSetRateAndSeekrate : integer position : number , sessionId : stringsuccess:booleanAtomically set rate and seek{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setRateAndSeek","params":{"rate":1,"position":60.0,"sessionId":"session_1783267426"}}{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getStateGetStatesessionId : stringstate : PlayerStateGet current player state

{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getState","params":{"sessionId":"sess-abc-001"}}

{"jsonrpc":"2.0","id":1,"result":{"state":"playing"}}
org.rdk.player.getPlaybackPositionGetPlaybackPositionsessionId : stringposition : NumberGet current playback position

{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPlaybackPosition","params":{"sessionId":"sess-abc-001"}}

{"jsonrpc":"2.0","id":1,"result":{"position":120.5}}
org.rdk.player.getPlaybackDurationGetPlaybackDurationsessionId : stringduration : NumberGet total stream duration

{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPlaybackDuration","params":{"sessionId":"sess-abc-001"}}

{"jsonrpc":"2.0","id":1,"result":{"duration":3600.0}}
org.rdk.player.getPlaybackRateGetPlaybackRatesessionId : stringrate  : NumberGet current playback rate

{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPlaybackRate","params":{"sessionId":"sess-abc-001"}}

{"jsonrpc":"2.0","id":1,"result":{"rate":1.0}}
org.rdk.player.isLiveIsLivesessionId : stringisLive :BooleanCheck if stream is live

{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.isLive","params":{"sessionId":"sess-abc-001"}}

{"jsonrpc":"2.0","id":1,"result":{"isLive":false}}
org.rdk.player.setVideoMuteSetVideoMutemuted : boolean , sessionId : stringsuccess : 

Boolean
Mute or unmute the video plane

{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setVideoMute","params":{"sessionId":"sess-abc-001","muted":true}}

{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getVideoMuteGetVideoMutesessionId : stringmuted : 

Boolean
Get video mute state

{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getVideoMute","params":{"sessionId":"sess-abc-001"}}

{"jsonrpc":"2.0","id":1,"result":{"muted":false}}
org.rdk.player.setAudioVolumeSetAudioVolumevolume : integer , sessionId : stringsuccess : 

Boolean
Set audio volume

{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setAudioVolume","params":{"sessionId":"sess-abc-001","volume":80}}

{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getAudioVolumeGetAudioVolumesessionId : stringvolume : 

Integer
Get audio volume

{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAudioVolume","params":{"sessionId":"sess-abc-001"}}

{"jsonrpc":"2.0","id":1,"result":{"volume":80}}
org.rdk.player.getAudioLanguageGetAudioLanguagesessionId : stringlanguage : string
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAudioLanguage","params":{"sessionId":"sess-abc-001"}}
 
 
{"jsonrpc":"2.0","id":1,"result":{"language":"en"}}
org.rdk.player.getAvailableAudioTracks
GetAvailableAudioTracks
allTracks : boolean , sessionId : string
tracks :AudioTrack[]
List available audio tracks
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAvailableAudioTracks","params":{"sessionId":"sess-abc-001","allTracks":false}}
 
{"jsonrpc":"2.0","id":1,"result":{"tracks":[{"index":0,"language":"en","rendition":"main","label":"English","codec":"mp4a.40.2","type":"AUDIO_STEREO","channels":2,"bitrate":128000},{"index":1,"language":"fra","rendition":"main","label":"French","codec":"mp4a.40.2","type":"AUDIO_STEREO","channels":2,"bitrate":128000}]}}
org.rdk.player.setAudioTrack
SetAudioTrack
trackId : integer , sessionId : string
success : 

Boolean
Select an audio track by index
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setAudioTrack","params":{"sessionId":"sess-abc-001","trackId":1}}
 
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getAudioTrack
GetAudioTrack
sessionId : string
trackId:integer
Get index of active audio track
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAudioTrack","params":{"sessionId":"sess-abc-001"}}
 
{"jsonrpc":"2.0","id":1,"result":{"trackId":0}}
org.rdk.player.getAudioTrackInfo
GetAudioTrackInfo
sessionId : string
trackInfo:AudioTrack
Get details of active audio track
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAudioTrackInfo","params":{"sessionId":"sess-abc-001"}}
 
{"jsonrpc":"2.0","id":1,"result":{"trackInfo":{"index":0,"language":"en","rendition":"main","label":"English","codec":"mp4a.40.2","type":"AUDIO_STEREO","channels":2,"bitrate":128000}}}
org.rdk.player.setSubtitleMute
SetSubtitleMute
muted: boolean , sessionId : string
success: boolean
Mute or unmute subtitles
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setSubtitleMute","params":{"sessionId":"sess-abc-001","muted":true}}
 
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getAvailableTextTracks
GetAvailableTextTracks
allTracks : boolean , sessionId : string 

 
tracks : 

TextTrack[]
List available text/subtitle tracks
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAvailableTextTracks","params":{"sessionId":"sess-abc-001","allTracks":false}}
 
{"jsonrpc":"2.0","id":1,"result":{"tracks":[{"index":0,"language":"en","rendition":"main","label":"English","type":"SUBTITLES"},{"index":1,"language":"spa","rendition":"main","label":"Spanish","type":"SUBTITLES"}]}}
org.rdk.player.setTextTrack
SetTextTrack
trackId : integer , sessionId : string
success : boolean
Select a text track by index
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setTextTrack","params":{"sessionId":"sess-abc-001","trackId":0}}
 
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getTextTrack
GetTextTrack
sessionId : string
trackId : integer
Get index of active text track
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getTextTrack","params":{"sessionId":"sess-abc-001"}}
 
{"jsonrpc":"2.0","id":1,"result":{"trackId":0}}
org.rdk.player.getVideoBitrate
GetVideoBitrate
sessionId : string
bitrate : integer 
Get current video bitrate
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getVideoBitrate","params":{"sessionId":"sess-abc-001"}}
 
{"jsonrpc":"2.0","id":1,"result":{"bitrate":4000000}}
org.rdk.player.setVideoBitrate
SetVideoBitrate
bitrate : integer , sessionId : string
success : boolean
Lock the video bitrate
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setVideoBitrate","params":{"sessionId":"sess-abc-001","bitrate":2000000}}
 
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getVideoBitrates
GetVideoBitrates
sessionId : string
bitrates : 

integer[]
List all available video bitrates
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getVideoBitrates","params":{"sessionId":"sess-abc-001"}}
 
{"jsonrpc":"2.0","id":1,"result":{"bitrates":[800000,2000000,4000000,8000000]}}
org.rdk.player.setInitialBitrate
SetInitialBitrate
bitrate : integer , sessionId : string
success  : boolean
Set the startup bitrate hint
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setInitialBitrate","params":{"sessionId":"sess-abc-001","bitrate":2000000}}
 
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getInitialBitrate
getInitialBitrat
 

sessionId : string
bitrate : integer 
Set the startup bitrate hint
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getInitialBitrate","params":{"sessionId":"sess-abc-001"}}
 
{"jsonrpc":"2.0","id":1,"result":{"bitrate":2000000}}
org.rdk.player.setMinimumBitrate
SetMinimumBitrate
bitrate : integer  , sessionId : string
success : boolean
Set the ABR minimum bitrate floor
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setMinimumBitrate","params":{"sessionId":"sess-abc-001","bitrate":800000}}
 
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getMinimumBitrate
GetMinimumBitrate
sessionId : string
bitrate : integer 
Get the ABR minimum bitrate floor 
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getMinimumBitrate","params":{"sessionId":"sess-abc-001"}}
 
{"jsonrpc":"2.0","id":1,"result":{"bitrate":800000}}
org.rdk.player.setMaximumBitrate
SetMaximumBitrate
sessionId : string
success : boolean
Set the ABR maximum bitrate ceiling
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setMaximumBitrate","params":{"sessionId":"sess-abc-001","bitrate":8000000}}
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
 
org.rdk.player.getMaximumBitrate
getMaximumBitrate
sessionId : string
bitrate : integer 
Get the ABR maximum bitrate ceiling
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getMaximumBitrate","params":{"sessionId":"sess-abc-001"}}
 

{"jsonrpc":"2.0","id":1,"result":{"bitrate":8000000}}
rg.rdk.player.setLicenseServerURL
SetLicenseServerURL
url :  string , sessionId : string
success : boolean 
Set the DRM license server URL
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setLicenseServerURL","params":{"sessionId":"sess-abc-001","url":"https://license.example.com/widevine"}}
 
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getDRM
GetDRM
sessionId : string
drm : string 
Get active DRM system
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getDRM","params":{"sessionId":"sess-abc-001"}}
 
{"jsonrpc":"2.0","id":1,"result":{"drm":"widevine"}}
org.rdk.player.setPreferredDRM
SetPreferredDRM
drmType : string , sessionId : string

 
success : boolean
Set the preferred DRM system
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setPreferredDRM","params":{"sessionId":"sess-abc-001","drmType":"widevine"}}
 
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
rg.rdk.player.getAAMPConfig
GetAAMPConfig
sessionId : string
config : object
Get current AAMP configuration
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getAAMPConfig","params":{"sessionId":"sess-abc-001"}}
 
{"jsonrpc":"2.0","id":1,"result":{"config":{"networkTimeout":10,"downloadBuffer":30}}}
org.rdk.player.setAppName
SetAppName
name : string,
sessionId : string
 
success : boolean
Set the application name
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setAppName","params":{"sessionId":"sess-abc-001","name":"MyStreamingApp"}}
 
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.setPreferredLanguages
SetPreferredLanguages
languageList  : string

rendition : string

codecList : string

labelList : string
sessionId : string
success : boolean

{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.setPreferredLanguages","params":{"sessionId":"sess-abc-001","languageList":"en,fra,spa","rendition":"main","type":"AUDIO_STEREO","codecList":"mp4a.40.2"}}
 
{"jsonrpc":"2.0","id":1,"result":{"success":true}}
org.rdk.player.getPreferredLanguages
GetPreferredLanguages
sessionId : string

 
languageList : sting

 
Get the preferred language list
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.getPreferredLanguages","params":{"sessionId":"sess-abc-001"}}
 
{"jsonrpc":"2.0","id":1,"result":{"languageList":"en,fra"}}
Events and Notifications

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:

Request
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.subscribe","params":{"sessionId":"sess-abc-001","event":"org.rdk.player.onProgress"}}


Response
{"jsonrpc":"2.0","id":1,"result":{"success":true}}

Unsubscribe

eg:

Request
{"jsonrpc":"2.0","id":1,"method":"org.rdk.player.unsubscribe","params":{"sessionId":"sess-abc-001","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":{"sessionId":"sess-abc-001"}}
org.rdk.player.onTuneFailed
Tune failed and playback is not ready
{"jsonrpc":"2.0","method":"org.rdk.player.onTuneFailed","params":{"sessionId":"sess-abc-001","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":{"sessionId":"sess-abc-001","state":"playing"}}
org.rdk.player.onProgress
Periodic playback progress
{"jsonrpc":"2.0","method":"org.rdk.player.onProgress","params":{"sessionId":"sess-abc-001","positionMs":12500,"durationMs":3600000,"speed":1,"startMs":0,"endMs":3600000,"videoBufferedMs":8000,"audioBufferedMs":8000,"liveLatencyMs":0,"profileBitrate":4000000,"networkBitrate":6000000}}
org.rdk.player.onBitrateChanged
ABR switches to a different video profile
{"jsonrpc":"2.0","method":"org.rdk.player.onBitrateChanged","params":{"sessionId":"sess-abc-001","bitrate":2000000,"width":1280,"height":720,"description":"NetworkCongestion"}}
org.rdk.player.onMediaMetadata
Stream metadata is parsed after a tune completes
{"jsonrpc":"2.0","method":"org.rdk.player.onMediaMetadata","params":{"sessionId":"sess-abc-001","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
Effective playback speed changes (e.g. trick-play, pause, resume)
{"jsonrpc":"2.0","method":"org.rdk.player.onSpeedChanged","params":{"sessionId":"sess-abc-001","speed":2}}
org.rdk.player.onBufferingChanged
Player enters or exits a buffering stall
{"jsonrpc":"2.0","method":"org.rdk.player.onBufferingChanged","params":{"sessionId":"sess-abc-001","buffering":true}}
 
org.rdk.player.onSeeked
A seek operation completes and playback resumes at the new position
{"jsonrpc":"2.0","method":"org.rdk.player.onSeeked","params":{"sessionId":"sess-abc-001","positionMs":120000}}
 
org.rdk.player.onDrmMetadata
DRM system reports an access status update
{"jsonrpc":"2.0","method":"org.rdk.player.onDrmMetadata","params":{"sessionId":"sess-abc-001","accessStatus":"Authorized"}}
 
org.rdk.player.onAnomaly
Fired when AAMP raises an internal diagnostic report
{"jsonrpc":"2.0","method":"org.rdk.player.onAnomaly","params":{"sessionId":"sess-abc-001","severity":1,"message":"Segment download stalled; retrying"}}
 
org.rdk.player.onAdReservationStart
Ad reservation start event
{"jsonrpc":"2.0","method":"org.rdk.player.onAdReservationStart","params":{"sessionId":"sess-abc-001","adBreakId":"break-001","position":120000}}
 
org.rdk.player.onTimedMetadata


Fired when a timed metadata tag
{"jsonrpc":"2.0","method":"org.rdk.player.onTimedMetadata","params":{"sessionId":"sess-abc-001","name":"#EXT-X-CUE","id":"cue-001","timeMilliseconds":5000,"durationMilliSeconds":30000,"content":"/DAlAAAAAA=="}}
 
org.rdk.player.onBulkTimedMetadata


Fired when a bulk set of timed metadata entries is available
{"jsonrpc":"2.0","method":"org.rdk.player.onBulkTimedMetadata","params":{"sessionId":"sess-abc-001","metadata":"[{\"name\":\"#EXT-X-CUE\",\"time\":5000}]"}}
 
org.rdk.player.onSupportedSpeedsChanged


Fired when the list of supported trick-play speed values for the current stream changes.
{"jsonrpc":"2.0","method":"org.rdk.player.onSupportedSpeedsChanged","params":{"sessionId":"sess-abc-001","supportedSpeedCount":13,"supportedSpeeds":[-64,-32,-16,-8,-4,-2,1,2,4,8,16,32,64]}}
 
org.rdk.player.onAdResolved


Fired when an ad resolve attempt completes, reporting whether the ad was successfully resolved or encountered an error.
{"jsonrpc":"2.0","method":"org.rdk.player.onAdResolved","params":{"sessionId":"sess-abc-001","resolveStatus":true,"adId":"ad-001","startMS":60000,"durationMs":30000,"errorCode":"","errorDescription":""}}
 
org.rdk.player.onAdPlacementStart


Ad placement started
{"jsonrpc":"2.0","method":"org.rdk.player.onAdPlacementStart","params":{"sessionId":"sess-abc-001","adId":"ad-001","position":60000,"offset":0,"duration":30000,"errorCode":0}}
 
org.rdk.player.onAdPlacementEnd


Ad placement ended
{"jsonrpc":"2.0","method":"org.rdk.player.onAdPlacementEnd","params":{"sessionId":"sess-abc-001","adId":"ad-001","position":60000,"offset":30000,"duration":30000,"errorCode":0}}
org.rdk.player.onAdPlacementError


Ad placement error
{"jsonrpc":"2.0","method":"org.rdk.player.onAdPlacementError","params":{"sessionId":"sess-abc-001","adId":"ad-001","position":60000,"offset":5000,"duration":30000,"errorCode":2}}
 
org.rdk.player.onAdPlacementProgress


Ad placement progress update
{"jsonrpc":"2.0","method":"org.rdk.player.onAdPlacementProgress","params":{"sessionId":"sess-abc-001","adId":"ad-001","position":60000,"offset":15000,"duration":30000,"errorCode":0}}
 
org.rdk.player.onID3Metadata


 ID3 tag metadata extracted from stream
{"jsonrpc":"2.0","method":"org.rdk.player.onID3Metadata","params":{"sessionId":"sess-abc-001","data":"SUQzBAAAAAAAI1RTUFQ=","length":20}}
 
org.rdk.player.onDrmMessage


DRM system message received
{"jsonrpc":"2.0","method":"org.rdk.player.onDrmMessage","params":{"sessionId":"sess-abc-001","data":"license renewal required"}}
 
org.rdk.player.onContentGap


Content gap detected in stream
{"jsonrpc":"2.0","method":"org.rdk.player.onContentGap","params":{"sessionId":"sess-abc-001","timeMilliseconds":120000,"durationMilliSeconds":5000}}
 
org.rdk.player.onHTTPResponseHeader


Matched HTTP response header received
{"jsonrpc":"2.0","method":"org.rdk.player.onHTTPResponseHeader","params":{"sessionId":"sess-abc-001","header":"X-CDN-Provider","response":"Akamai"}}
 
org.rdk.player.onContentProtectionDataUpdate


Content protection key data updated
{"jsonrpc":"2.0","method":"org.rdk.player.onContentProtectionDataUpdate","params":{"sessionId":"sess-abc-001","keyID":"AAECBA==","streamType":"video"}}
 
org.rdk.player.onTuneTimeMetrics


Fired after a successful tune with detailed metrics.
{"jsonrpc":"2.0","method":"org.rdk.player.onTuneTimeMetrics","params":{"sessionId":"sess-abc-001","tuneMetricData":"{\"latency\":1500,\"fragmentDownloadTime\":200}"}}


org.rdk.player.onMonitorAVStatus


Fired periodically by the AV health monitor with audio/video decoder positions.
{"jsonrpc":"2.0","method":"org.rdk.player.onMonitorAVStatus","params":{"sessionId":"sess-abc-001","monitorAVStatus":"playing","videoPositionMS":12500,"audioPositionMS":12490,"timeInStateMS":5000,"droppedFrames":0}}
 
org.rdk.player.onMetricsData


Fired when an internal AAMP metrics report

{"jsonrpc":"2.0","method":"org.rdk.player.onMetricsData","params":{"sessionId":"sess-abc-001","type":1,"metricUUID":"550e8400-e29b-41d4-a716-446655440000","data":"{\"latency\":1200}"}}
 
org.rdk.player.onCCHandleReceived
Fired when the closed-caption decoder handle is allocated 
{"jsonrpc":"2.0","method":"org.rdk.player.onCCHandleReceived","params":{"sessionId":"sess-abc-001","handle":12345}}


Aamp openrpc.json


{
  "openrpc": "1.3.2",
  "info": {
    "title": "AAMP Player JSON-RPC API",
    "version": "1.0.0",
    "description": "WebSocket-based JSON-RPC 2.0 API for controlling an AAMP media player instance.\n\nEndpoint: ws://<host>:9999\n\nSession lifecycle: openSession -> configureSession (optional) -> playback methods -> closeSession"
  },
  "servers": [
    {
      "name": "AAMP Player",
      "url": "ws://localhost:9999"
    }
  ],
  "components": {
    "schemas": {
      "PlayerState": {
        "title": "PlayerState",
        "type": "string",
        "description": "AAMP player lifecycle state",
        "enum": [
          "idle",
          "initializing",
          "initialized",
          "preparing",
          "prepared",
          "buffering",
          "paused",
          "seeking",
          "playing",
          "stopping",
          "stopped",
          "complete",
          "error",
          "released",
          "blocked"
        ]
      },
      "AudioTrack": {
        "title": "AudioTrack",
        "type": "object",
        "required": [
          "index",
          "language"
        ],
        "properties": {
          "index": {
            "type": "integer",
            "description": "Zero-based track index"
          },
          "language": {
            "type": "string",
            "description": "ISO 639 language code"
          },
          "rendition": {
            "type": "string",
            "description": "Rendition label (e.g. main, alternate, commentary)"
          },
          "label": {
            "type": "string",
            "description": "Human-readable track label"
          },
          "codec": {
            "type": "string",
            "description": "Audio codec identifier (e.g. mp4a.40.2, ec-3)"
          },
          "type": {
            "type": "string",
            "description": "Audio type (e.g. AUDIO_STEREO, AUDIO_DOLBY_ATMOS)"
          },
          "channels": {
            "type": "integer",
            "description": "Number of audio channels"
          },
          "bitrate": {
            "type": "integer",
            "description": "Track bitrate in bps"
          }
        }
      },
      "TextTrack": {
        "title": "TextTrack",
        "type": "object",
        "required": [
          "index",
          "language"
        ],
        "properties": {
          "index": {
            "type": "integer",
            "description": "Zero-based track index"
          },
          "language": {
            "type": "string",
            "description": "ISO 639 language code"
          },
          "rendition": {
            "type": "string",
            "description": "Rendition label"
          },
          "label": {
            "type": "string",
            "description": "Human-readable track label"
          },
          "type": {
            "type": "string",
            "description": "Subtitle format (e.g. CLOSED_CAPTIONS, SUBTITLES, WEBVTT, TTML)"
          }
        }
      },
      "SuccessResult": {
        "title": "SuccessResult",
        "type": "object",
        "required": [
          "success"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "enum": [
              true
            ]
          }
        }
      }
    }
  },
  "methods": [
    {
      "name": "org.rdk.player.openSession",
      "summary": "Open a new player session",
      "description": "Allocates a player instance and associates it with the calling WebSocket connection. Must be called before any playback or configuration method. Returns a sessionId that is echoed back in all subsequent responses for correlation.",
      "tags": [
        {
          "name": "Session Management"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "instanceId",
          "required": true,
          "description": "Client-supplied player instance identifier.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "displayId",
          "required": true,
          "description": "Display/window identifier to associate with this player instance.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "openSessionResult",
        "schema": {
          "type": "object",
          "required": [
            "sessionId",
            "status"
          ],
          "properties": {
            "sessionId": {
              "type": "string",
              "description": "Session identifier to use in subsequent calls"
            },
            "status": {
              "type": "boolean"
            }
          }
        }
      },
      "examples": [
        {
          "name": "openSessionExample",
          "params": [
            {
              "name": "instanceId",
              "value": "123-1232-321312-3123"
            },
            {
              "name": "displayId",
              "value": "wst-mywindow"
            }
          ],
          "result": {
            "name": "openSessionResult",
            "value": {
              "sessionId": "session_1783267426",
              "status": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.configureSession",
      "summary": "Apply configuration to an open session",
      "description": "Applies AAMP configuration key-value pairs to the session. Must be called after openSession and before tune.",
      "tags": [
        {
          "name": "Session Management"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "config",
          "required": true,
          "description": "AAMP configuration block as a JSON object or JSON-encoded string.",
          "schema": {
            "oneOf": [
              {
                "type": "object"
              },
              {
                "type": "string"
              }
            ]
          }
        }
      ],
      "result": {
        "name": "configureSessionResult",
        "schema": {
          "type": "object",
          "required": [
            "sessionId",
            "success"
          ],
          "properties": {
            "sessionId": {
              "type": "string"
            },
            "success": {
              "type": "boolean"
            }
          }
        }
      },
      "examples": [
        {
          "name": "configureSessionExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "config",
              "value": {
                "networkTimeout": 10,
                "downloadBuffer": 30,
                "preferredDRM": "widevine",
                "initialBitrate": 2000000
              }
            }
          ],
          "result": {
            "name": "configureSessionResult",
            "value": {
              "sessionId": "sess-abc-001",
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.closeSession",
      "summary": "Close and release a player session",
      "description": "Stops any active playback, releases decoder and DRM resources, and destroys the session. After this call the sessionId is invalid. The WebSocket connection itself is not closed.",
      "tags": [
        {
          "name": "Session Management"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "closeSessionResult",
        "schema": {
          "type": "object",
          "required": [
            "status"
          ],
          "properties": {
            "message": {
              "type": "string",
              "description": "Human-readable status message"
            },
            "status": {
              "type": "boolean"
            }
          }
        }
      },
      "examples": [
        {
          "name": "closeSessionExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "closeSessionResult",
            "value": {
              "message": "Session closed successfully.",
              "status": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.play",
      "summary": "Start playback of a media stream",
      "description": "Instructs the AAMP player to tune to the given URL. Optionally auto-starts playback and accepts a content type hint and trace UUID for diagnostics.",
      "tags": [
        {
          "name": "Playback Control"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "url",
          "required": true,
          "description": "Media manifest URL (HLS, DASH, progressive MP4, etc.)",
          "schema": {
            "type": "string",
            "format": "uri"
          }
        },
        {
          "name": "autoPlay",
          "required": false,
          "description": "Start playback immediately after buffering.",
          "schema": {
            "type": "boolean",
            "default": true
          }
        },
        {
          "name": "contentType",
          "required": false,
          "description": "Stream type hint.",
          "schema": {
            "type": "string",
            "enum": [
              "VOD",
              "LIVE",
              "LINEAR_TV",
              "IVOD",
              "EAS",
              "DVR",
              "CDVR",
              "IPVideo",
              "OTT",
              "SLE"
            ]
          }
        },
        {
          "name": "traceUUID",
          "required": false,
          "description": "Correlation UUID forwarded to AAMP diagnostics and telemetry.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "result": {
        "name": "playResult",
        "schema": {
          "type": "object",
          "required": [
            "status"
          ],
          "properties": {
            "message": {
              "type": "string",
              "description": "Human-readable status message"
            },
            "status": {
              "type": "boolean"
            }
          }
        }
      },
      "examples": [
        {
          "name": "playExample",
          "params": [
            {
              "name": "url",
              "value": "http://dash.akamaized.net/dash264/TestCases/1a/qualcomm/1/MultiRate.mpd"
            },
            {
              "name": "sessionId",
              "value": "session_1783267426"
            }
          ],
          "result": {
            "name": "playResult",
            "value": {
              "message": "Content playback started.",
              "status": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.stop",
      "summary": "Stop playback",
      "description": "Stops the current playback and releases decoder resources. The player returns to the idle state.",
      "tags": [
        {
          "name": "Playback Control"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "stopResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "stopExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "stopResult",
            "value": {
              "success": true
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.seek",
      "summary": "Seek to a position",
      "description": "Seeks to an absolute position in the stream (in seconds from the start). For live streams, position is relative to the live edge.",
      "tags": [
        {
          "name": "Playback Control"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "position",
          "required": true,
          "description": "Target seek position in seconds (>= 0).",
          "schema": {
            "type": "number",
            "minimum": 0
          }
        },
        {
          "name": "keepPaused",
          "required": false,
          "description": "If true, the player remains paused after seeking.",
          "schema": {
            "type": "boolean",
            "default": false
          }
        }
      ],
      "result": {
        "name": "seekResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "seekExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "position",
              "value": 120.0
            },
            {
              "name": "keepPaused",
              "value": false
            }
          ],
          "result": {
            "name": "seekResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.seekToLive",
      "summary": "Seek to the live edge",
      "description": "Moves playback to the current live edge of a live or time-shifted stream.",
      "tags": [
        {
          "name": "Playback Control"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "keepPaused",
          "required": false,
          "description": "If true, the player remains paused after seeking to live.",
          "schema": {
            "type": "boolean",
            "default": false
          }
        }
      ],
      "result": {
        "name": "seekToLiveResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "seekToLiveExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "keepPaused",
              "value": false
            }
          ],
          "result": {
            "name": "seekToLiveResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.setRate",
      "summary": "Set playback rate / trick-play speed",
      "description": "Sets the playback rate for trick-play. Rate 1=normal, 0=pause, 2=2x fast-forward, -2=2x rewind.",
      "tags": [
        {
          "name": "Playback Control"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "rate",
          "required": true,
          "description": "Playback rate multiplier.",
          "schema": {
            "type": "number"
          }
        },
        {
          "name": "overshootCorrection",
          "required": false,
          "description": "Overshoot correction offset in milliseconds applied during trick play.",
          "schema": {
            "type": "integer",
            "default": 0
          }
        }
      ],
      "result": {
        "name": "setRateResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setRateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "rate",
              "value": 2
            },
            {
              "name": "overshootCorrection",
              "value": 0
            }
          ],
          "result": {
            "name": "setRateResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.setPlaybackSpeed",
      "summary": "Set playback speed",
      "description": "Sets the playback speed directly (equivalent to setRate without the overshoot correction option).",
      "tags": [
        {
          "name": "Playback Control"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "speed",
          "required": true,
          "description": "Playback speed multiplier (e.g. 1.0, 0.5, 2.0).",
          "schema": {
            "type": "number"
          }
        }
      ],
      "result": {
        "name": "setPlaybackSpeedResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setPlaybackSpeedExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "speed",
              "value": 0.5
            }
          ],
          "result": {
            "name": "setPlaybackSpeedResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.pauseAt",
      "summary": "Schedule a pause at a future position",
      "description": "Requests the player to automatically pause when playback reaches the specified position. Pass a negative value to cancel a previously scheduled pause.",
      "tags": [
        {
          "name": "Playback Control"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "position",
          "required": true,
          "description": "Position in seconds at which to pause. Pass a negative value to cancel.",
          "schema": {
            "type": "number"
          }
        }
      ],
      "result": {
        "name": "pauseAtResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "pauseAtExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "position",
              "value": 300.0
            }
          ],
          "result": {
            "name": "pauseAtResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.setRateAndSeek",
      "summary": "Atomically set rate and seek",
      "description": "Combines a rate change and a seek into a single atomic operation, avoiding the visual glitch that can occur when calling them separately.",
      "tags": [
        {
          "name": "Playback Control"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "rate",
          "required": true,
          "description": "Target playback rate (e.g. 1, -2, 4).",
          "schema": {
            "type": "integer"
          }
        },
        {
          "name": "position",
          "required": true,
          "description": "Target position in seconds (>= 0).",
          "schema": {
            "type": "number",
            "minimum": 0
          }
        }
      ],
      "result": {
        "name": "setRateAndSeekResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setRateAndSeekExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "rate",
              "value": 1
            },
            {
              "name": "position",
              "value": 60.0
            }
          ],
          "result": {
            "name": "setRateAndSeekResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getState",
      "summary": "Get current player state",
      "description": "Returns the current lifecycle state of the AAMP player instance.",
      "tags": [
        {
          "name": "Playback State"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getStateResult",
        "schema": {
          "type": "object",
          "required": [
            "state"
          ],
          "properties": {
            "state": {
              "$ref": "#/components/schemas/PlayerState"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getStateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getStateResult",
            "value": {
              "state": "playing"
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.getPlaybackPosition",
      "summary": "Get current playback position",
      "tags": [
        {
          "name": "Playback State"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getPlaybackPositionResult",
        "schema": {
          "type": "object",
          "required": [
            "position"
          ],
          "properties": {
            "position": {
              "type": "number",
              "description": "Current playback position in seconds"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getPlaybackPositionExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getPlaybackPositionResult",
            "value": {
              "position": 120.5
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.getPlaybackDuration",
      "summary": "Get total stream duration",
      "description": "Returns -1 for live streams without a known duration.",
      "tags": [
        {
          "name": "Playback State"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getPlaybackDurationResult",
        "schema": {
          "type": "object",
          "required": [
            "duration"
          ],
          "properties": {
            "duration": {
              "type": "number",
              "description": "Total stream duration in seconds; -1 for unbounded live streams"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getPlaybackDurationExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getPlaybackDurationResult",
            "value": {
              "duration": 3600.0
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.getPlaybackRate",
      "summary": "Get current playback rate",
      "tags": [
        {
          "name": "Playback State"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getPlaybackRateResult",
        "schema": {
          "type": "object",
          "required": [
            "rate"
          ],
          "properties": {
            "rate": {
              "type": "number",
              "description": "Current playback rate multiplier (1.0 = normal, 0 = paused)"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getPlaybackRateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getPlaybackRateResult",
            "value": {
              "rate": 1.0
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.isLive",
      "summary": "Check if stream is live",
      "tags": [
        {
          "name": "Playback State"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "isLiveResult",
        "schema": {
          "type": "object",
          "required": [
            "isLive"
          ],
          "properties": {
            "isLive": {
              "type": "boolean",
              "description": "true if the current stream is a live broadcast"
            }
          }
        }
      },
      "examples": [
        {
          "name": "isLiveExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "isLiveResult",
            "value": {
              "isLive": false
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.setVideoMute",
      "summary": "Mute or unmute the video plane",
      "description": "Blanks (mutes) or restores the video plane without affecting audio.",
      "tags": [
        {
          "name": "Video"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "muted",
          "required": true,
          "description": "true to blank the video plane; false to restore it.",
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "setVideoMuteResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setVideoMuteExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "muted",
              "value": true
            }
          ],
          "result": {
            "name": "setVideoMuteResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getVideoMute",
      "summary": "Get video mute state",
      "tags": [
        {
          "name": "Video"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getVideoMuteResult",
        "schema": {
          "type": "object",
          "required": [
            "muted"
          ],
          "properties": {
            "muted": {
              "type": "boolean",
              "description": "true if the video plane is currently muted (blanked)"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getVideoMuteExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getVideoMuteResult",
            "value": {
              "muted": false
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.setAudioVolume",
      "summary": "Set audio volume",
      "tags": [
        {
          "name": "Audio"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "volume",
          "required": true,
          "description": "Volume level from 0 (muted) to 100 (maximum).",
          "schema": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          }
        }
      ],
      "result": {
        "name": "setAudioVolumeResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setAudioVolumeExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "volume",
              "value": 80
            }
          ],
          "result": {
            "name": "setAudioVolumeResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getAudioVolume",
      "summary": "Get audio volume",
      "tags": [
        {
          "name": "Audio"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getAudioVolumeResult",
        "schema": {
          "type": "object",
          "required": [
            "volume"
          ],
          "properties": {
            "volume": {
              "type": "integer",
              "description": "Current volume level (0-100)"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getAudioVolumeExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getAudioVolumeResult",
            "value": {
              "volume": 80
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.getAudioLanguage",
      "summary": "Get currently active audio language",
      "tags": [
        {
          "name": "Audio"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getAudioLanguageResult",
        "schema": {
          "type": "object",
          "required": [
            "language"
          ],
          "properties": {
            "language": {
              "type": "string",
              "description": "ISO 639 language code of the active audio track (e.g. en)"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getAudioLanguageExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getAudioLanguageResult",
            "value": {
              "language": "en"
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.getAvailableAudioTracks",
      "summary": "List available audio tracks",
      "description": "Returns all audio tracks present in the current manifest.",
      "tags": [
        {
          "name": "Audio"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "allTracks",
          "required": false,
          "description": "true to include tracks from all DASH periods, not just the current one.",
          "schema": {
            "type": "boolean",
            "default": false
          }
        }
      ],
      "result": {
        "name": "getAvailableAudioTracksResult",
        "schema": {
          "type": "object",
          "required": [
            "tracks"
          ],
          "properties": {
            "tracks": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/AudioTrack"
              },
              "description": "Array of available audio track descriptors"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getAvailableAudioTracksExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "allTracks",
              "value": false
            }
          ],
          "result": {
            "name": "getAvailableAudioTracksResult",
            "value": {
              "tracks": [
                {
                  "index": 0,
                  "language": "en",
                  "rendition": "main",
                  "label": "English",
                  "codec": "mp4a.40.2",
                  "type": "AUDIO_STEREO",
                  "channels": 2,
                  "bitrate": 128000
                },
                {
                  "index": 1,
                  "language": "fra",
                  "rendition": "main",
                  "label": "French",
                  "codec": "mp4a.40.2",
                  "type": "AUDIO_STEREO",
                  "channels": 2,
                  "bitrate": 128000
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.setAudioTrack",
      "summary": "Select an audio track by index",
      "description": "Switches to the audio track at the specified index from getAvailableAudioTracks.",
      "tags": [
        {
          "name": "Audio"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "trackId",
          "required": true,
          "description": "Zero-based index of the target audio track (>= 0).",
          "schema": {
            "type": "integer",
            "minimum": 0
          }
        }
      ],
      "result": {
        "name": "setAudioTrackResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setAudioTrackExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "trackId",
              "value": 1
            }
          ],
          "result": {
            "name": "setAudioTrackResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getAudioTrack",
      "summary": "Get index of active audio track",
      "tags": [
        {
          "name": "Audio"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getAudioTrackResult",
        "schema": {
          "type": "object",
          "required": [
            "trackId"
          ],
          "properties": {
            "trackId": {
              "type": "integer",
              "description": "Zero-based index of the currently active audio track"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getAudioTrackExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getAudioTrackResult",
            "value": {
              "trackId": 0
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.getAudioTrackInfo",
      "summary": "Get details of active audio track",
      "tags": [
        {
          "name": "Audio"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getAudioTrackInfoResult",
        "schema": {
          "type": "object",
          "required": [
            "trackInfo"
          ],
          "properties": {
            "trackInfo": {
              "$ref": "#/components/schemas/AudioTrack"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getAudioTrackInfoExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getAudioTrackInfoResult",
            "value": {
              "trackInfo": {
                "index": 0,
                "language": "en",
                "rendition": "main",
                "label": "English",
                "codec": "mp4a.40.2",
                "type": "AUDIO_STEREO",
                "channels": 2,
                "bitrate": 128000
              }
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.setSubtitleMute",
      "summary": "Mute or unmute subtitles",
      "description": "Enables or suppresses subtitle rendering without changing the active text track selection.",
      "tags": [
        {
          "name": "Subtitles"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "muted",
          "required": true,
          "description": "true to hide subtitles; false to show them.",
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "result": {
        "name": "setSubtitleMuteResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setSubtitleMuteExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "muted",
              "value": true
            }
          ],
          "result": {
            "name": "setSubtitleMuteResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getAvailableTextTracks",
      "summary": "List available text/subtitle tracks",
      "tags": [
        {
          "name": "Subtitles"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "allTracks",
          "required": false,
          "description": "true to include tracks from all DASH periods.",
          "schema": {
            "type": "boolean",
            "default": false
          }
        }
      ],
      "result": {
        "name": "getAvailableTextTracksResult",
        "schema": {
          "type": "object",
          "required": [
            "tracks"
          ],
          "properties": {
            "tracks": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/TextTrack"
              }
            }
          }
        }
      },
      "examples": [
        {
          "name": "getAvailableTextTracksExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "allTracks",
              "value": false
            }
          ],
          "result": {
            "name": "getAvailableTextTracksResult",
            "value": {
              "tracks": [
                {
                  "index": 0,
                  "language": "en",
                  "rendition": "main",
                  "label": "English",
                  "type": "SUBTITLES"
                },
                {
                  "index": 1,
                  "language": "spa",
                  "rendition": "main",
                  "label": "Spanish",
                  "type": "SUBTITLES"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.setTextTrack",
      "summary": "Select a text track by index",
      "tags": [
        {
          "name": "Subtitles"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "trackId",
          "required": true,
          "description": "Zero-based index of the target text track (>= 0).",
          "schema": {
            "type": "integer",
            "minimum": 0
          }
        }
      ],
      "result": {
        "name": "setTextTrackResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setTextTrackExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "trackId",
              "value": 0
            }
          ],
          "result": {
            "name": "setTextTrackResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getTextTrack",
      "summary": "Get index of active text track",
      "tags": [
        {
          "name": "Subtitles"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getTextTrackResult",
        "schema": {
          "type": "object",
          "required": [
            "trackId"
          ],
          "properties": {
            "trackId": {
              "type": "integer",
              "description": "Zero-based index of the currently active text track"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getTextTrackExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getTextTrackResult",
            "value": {
              "trackId": 0
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.getVideoBitrate",
      "summary": "Get current video bitrate",
      "tags": [
        {
          "name": "Bitrate / ABR"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getVideoBitrateResult",
        "schema": {
          "type": "object",
          "required": [
            "bitrate"
          ],
          "properties": {
            "bitrate": {
              "type": "integer",
              "description": "Current video bitrate in bits per second"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getVideoBitrateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getVideoBitrateResult",
            "value": {
              "bitrate": 4000000
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.setVideoBitrate",
      "summary": "Lock the video bitrate",
      "description": "Pins ABR to the profile closest to the specified bitrate. Pass 0 to re-enable automatic ABR.",
      "tags": [
        {
          "name": "Bitrate / ABR"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "bitrate",
          "required": true,
          "description": "Target bitrate in bps; 0 restores automatic ABR.",
          "schema": {
            "type": "integer",
            "minimum": 0
          }
        }
      ],
      "result": {
        "name": "setVideoBitrateResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setVideoBitrateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "bitrate",
              "value": 2000000
            }
          ],
          "result": {
            "name": "setVideoBitrateResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getVideoBitrates",
      "summary": "List all available video bitrates",
      "tags": [
        {
          "name": "Bitrate / ABR"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getVideoBitratesResult",
        "schema": {
          "type": "object",
          "required": [
            "bitrates"
          ],
          "properties": {
            "bitrates": {
              "type": "array",
              "items": {
                "type": "integer"
              },
              "description": "Available video bitrates in bps, ascending order"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getVideoBitratesExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getVideoBitratesResult",
            "value": {
              "bitrates": [
                800000,
                2000000,
                4000000,
                8000000
              ]
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.setInitialBitrate",
      "summary": "Set the startup bitrate hint",
      "description": "Hints to AAMP which bitrate profile to select at the start of the next tune. ABR may switch away after the initial segments are downloaded.",
      "tags": [
        {
          "name": "Bitrate / ABR"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "bitrate",
          "required": true,
          "description": "Desired startup bitrate in bps.",
          "schema": {
            "type": "integer",
            "minimum": 0
          }
        }
      ],
      "result": {
        "name": "setInitialBitrateResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setInitialBitrateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "bitrate",
              "value": 2000000
            }
          ],
          "result": {
            "name": "setInitialBitrateResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getInitialBitrate",
      "summary": "Get the startup bitrate hint",
      "tags": [
        {
          "name": "Bitrate / ABR"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getInitialBitrateResult",
        "schema": {
          "type": "object",
          "required": [
            "bitrate"
          ],
          "properties": {
            "bitrate": {
              "type": "integer",
              "description": "Configured startup bitrate in bps"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getInitialBitrateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getInitialBitrateResult",
            "value": {
              "bitrate": 2000000
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.setMinimumBitrate",
      "summary": "Set the ABR minimum bitrate floor",
      "description": "Prevents AAMP from selecting any video profile below this bitrate during adaptive bitrate switching.",
      "tags": [
        {
          "name": "Bitrate / ABR"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "bitrate",
          "required": true,
          "description": "Minimum allowed bitrate in bps.",
          "schema": {
            "type": "integer",
            "minimum": 0
          }
        }
      ],
      "result": {
        "name": "setMinimumBitrateResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setMinimumBitrateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "bitrate",
              "value": 800000
            }
          ],
          "result": {
            "name": "setMinimumBitrateResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getMinimumBitrate",
      "summary": "Get the ABR minimum bitrate floor",
      "tags": [
        {
          "name": "Bitrate / ABR"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getMinimumBitrateResult",
        "schema": {
          "type": "object",
          "required": [
            "bitrate"
          ],
          "properties": {
            "bitrate": {
              "type": "integer",
              "description": "Configured minimum ABR bitrate in bps"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getMinimumBitrateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getMinimumBitrateResult",
            "value": {
              "bitrate": 800000
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.setMaximumBitrate",
      "summary": "Set the ABR maximum bitrate ceiling",
      "description": "Prevents AAMP from selecting any video profile above this bitrate during adaptive bitrate switching.",
      "tags": [
        {
          "name": "Bitrate / ABR"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "bitrate",
          "required": true,
          "description": "Maximum allowed bitrate in bps.",
          "schema": {
            "type": "integer",
            "minimum": 0
          }
        }
      ],
      "result": {
        "name": "setMaximumBitrateResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setMaximumBitrateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "bitrate",
              "value": 8000000
            }
          ],
          "result": {
            "name": "setMaximumBitrateResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getMaximumBitrate",
      "summary": "Get the ABR maximum bitrate ceiling",
      "tags": [
        {
          "name": "Bitrate / ABR"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getMaximumBitrateResult",
        "schema": {
          "type": "object",
          "required": [
            "bitrate"
          ],
          "properties": {
            "bitrate": {
              "type": "integer",
              "description": "Configured maximum ABR bitrate in bps"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getMaximumBitrateExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getMaximumBitrateResult",
            "value": {
              "bitrate": 8000000
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.setLicenseServerURL",
      "summary": "Set the DRM license server URL",
      "description": "Overrides the license server URL for the active DRM system. Can be used to redirect license requests to a proxy.",
      "tags": [
        {
          "name": "DRM"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "url",
          "required": true,
          "description": "License server URL (e.g. https://license.example.com/widevine).",
          "schema": {
            "type": "string",
            "format": "uri"
          }
        }
      ],
      "result": {
        "name": "setLicenseServerURLResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setLicenseServerURLExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "url",
              "value": "https://license.example.com/widevine"
            }
          ],
          "result": {
            "name": "setLicenseServerURLResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getDRM",
      "summary": "Get active DRM system",
      "tags": [
        {
          "name": "DRM"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getDRMResult",
        "schema": {
          "type": "object",
          "required": [
            "drm"
          ],
          "properties": {
            "drm": {
              "type": "string",
              "description": "Name of the active DRM system",
              "enum": [
                "widevine",
                "playready",
                "clearkey",
                "none"
              ]
            }
          }
        }
      },
      "examples": [
        {
          "name": "getDRMExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getDRMResult",
            "value": {
              "drm": "widevine"
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.setPreferredDRM",
      "summary": "Set the preferred DRM system",
      "description": "Tells AAMP which DRM system to prefer when multiple are available in the manifest.",
      "tags": [
        {
          "name": "DRM"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "drmType",
          "required": true,
          "description": "DRM identifier.",
          "schema": {
            "type": "string",
            "enum": [
              "widevine",
              "playready",
              "clearkey"
            ]
          }
        }
      ],
      "result": {
        "name": "setPreferredDRMResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setPreferredDRMExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "drmType",
              "value": "widevine"
            }
          ],
          "result": {
            "name": "setPreferredDRMResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getAAMPConfig",
      "summary": "Get current AAMP configuration",
      "tags": [
        {
          "name": "Configuration"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getAAMPConfigResult",
        "schema": {
          "type": "object",
          "required": [
            "config"
          ],
          "properties": {
            "config": {
              "type": "object",
              "description": "Complete current AAMP configuration as a JSON object"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getAAMPConfigExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getAAMPConfigResult",
            "value": {
              "config": {
                "networkTimeout": 10,
                "downloadBuffer": 30
              }
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.setAppName",
      "summary": "Set the application name",
      "description": "Sets a human-readable application name included in AAMP diagnostic logs and telemetry.",
      "tags": [
        {
          "name": "Configuration"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "name",
          "required": true,
          "description": "Application name (e.g. MyStreamingApp).",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "setAppNameResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setAppNameExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "name",
              "value": "MyStreamingApp"
            }
          ],
          "result": {
            "name": "setAppNameResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.setPreferredLanguages",
      "summary": "Set preferred audio/text language preferences",
      "description": "Configures fine-grained language selection. All parameters are optional; omit to leave that dimension unchanged.",
      "tags": [
        {
          "name": "Configuration"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "languageList",
          "required": false,
          "description": "Comma-separated ISO 639 language codes in priority order (e.g. en,fra,spa).",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "rendition",
          "required": false,
          "description": "Preferred rendition label (e.g. main, alternate).",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "type",
          "required": false,
          "description": "Preferred audio type (e.g. AUDIO_DOLBY_ATMOS, AUDIO_STEREO).",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "codecList",
          "required": false,
          "description": "Comma-separated preferred audio codecs (e.g. ec-3,mp4a).",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "labelList",
          "required": false,
          "description": "Comma-separated preferred HLS GROUP-ID or DASH label values.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "setPreferredLanguagesResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "setPreferredLanguagesExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "languageList",
              "value": "en,fra,spa"
            },
            {
              "name": "rendition",
              "value": "main"
            },
            {
              "name": "type",
              "value": "AUDIO_STEREO"
            },
            {
              "name": "codecList",
              "value": "mp4a.40.2"
            }
          ],
          "result": {
            "name": "setPreferredLanguagesResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getPreferredLanguages",
      "summary": "Get the preferred language list",
      "tags": [
        {
          "name": "Configuration"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getPreferredLanguagesResult",
        "schema": {
          "type": "object",
          "required": [
            "languageList"
          ],
          "properties": {
            "languageList": {
              "type": "string",
              "description": "Comma-separated ISO 639 language codes in preference order"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getPreferredLanguagesExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getPreferredLanguagesResult",
            "value": {
              "languageList": "en,fra"
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.subscribe",
      "summary": "Subscribe to server-pushed event notifications",
      "description": "After subscribing, the server pushes matching events as JSON-RPC notifications (no id field). Use * to subscribe to all events.",
      "tags": [
        {
          "name": "Event Subscription"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "event",
          "required": true,
          "description": "Event name (e.g. org.rdk.player.onProgress) or * for all events.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "subscribeResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "subscribeExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "event",
              "value": "org.rdk.player.onProgress"
            }
          ],
          "result": {
            "name": "subscribeResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.unsubscribe",
      "summary": "Unsubscribe from event notifications",
      "tags": [
        {
          "name": "Event Subscription"
        }
      ],
      "paramStructure": "by-name",
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "event",
          "required": true,
          "description": "Event name to unsubscribe from.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "unsubscribeResult",
        "schema": {
          "$ref": "#/components/schemas/SuccessResult"
        }
      },
      "examples": [
        {
          "name": "unsubscribeExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            },
            {
              "name": "event",
              "value": "org.rdk.player.onProgress"
            }
          ],
          "result": {
            "name": "unsubscribeResult",
            "value": {
              "success": true
            }
          }
        }
      ]
    },
    {
      "name": "org.rdk.player.getSubscriptions",
      "summary": "List active event subscriptions",
      "tags": [
        {
          "name": "Event Subscription"
        }
      ],
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "getSubscriptionsResult",
        "schema": {
          "type": "object",
          "required": [
            "subscriptions"
          ],
          "properties": {
            "subscriptions": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Event names currently active for this client"
            }
          }
        }
      },
      "examples": [
        {
          "name": "getSubscriptionsExample",
          "params": [
            {
              "name": "sessionId",
              "value": "sess-abc-001"
            }
          ],
          "result": {
            "name": "getSubscriptionsResult",
            "value": {
              "subscriptions": [
                "org.rdk.player.onProgress",
                "org.rdk.player.onStateChanged"
              ]
            }
          }
        }
      ],
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.onTuned",
      "summary": "Tune succeeded and playback is ready",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "onTunedParams",
        "schema": {
          "type": "object"
        }
      },
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.onTuneFailed",
      "summary": "Tune failed",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "description",
          "schema": {
            "type": "string",
            "description": "Human-readable error description"
          }
        },
        {
          "name": "code",
          "schema": {
            "type": "integer",
            "description": "AAMP internal error code"
          }
        },
        {
          "name": "shouldRetry",
          "schema": {
            "type": "boolean",
            "description": "true if the application should retry the tune"
          }
        }
      ],
      "result": {
        "name": "onTuneFailedParams",
        "schema": {
          "type": "object",
          "properties": {
            "description": {
              "type": "string"
            },
            "code": {
              "type": "integer"
            },
            "shouldRetry": {
              "type": "boolean"
            }
          }
        }
      }
    },
    {
      "name": "org.rdk.player.onStateChanged",
      "summary": "Player lifecycle state transition",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "state",
          "schema": {
            "$ref": "#/components/schemas/PlayerState"
          }
        }
      ],
      "result": {
        "name": "onStateChangedParams",
        "schema": {
          "type": "object",
          "properties": {
            "state": {
              "$ref": "#/components/schemas/PlayerState"
            }
          }
        }
      }
    },
    {
      "name": "org.rdk.player.onProgress",
      "summary": "Periodic playback heartbeat (~1 s interval)",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "positionMs",
          "schema": {
            "type": "number",
            "description": "Current playback position in milliseconds"
          }
        },
        {
          "name": "durationMs",
          "schema": {
            "type": "number",
            "description": "Total stream duration in ms; -1 for unbounded live"
          }
        },
        {
          "name": "speed",
          "schema": {
            "type": "number",
            "description": "Current playback speed multiplier"
          }
        },
        {
          "name": "startMs",
          "schema": {
            "type": "number",
            "description": "Start of the seekable window in milliseconds"
          }
        },
        {
          "name": "endMs",
          "schema": {
            "type": "number",
            "description": "End of the seekable window in milliseconds"
          }
        },
        {
          "name": "videoBufferedMs",
          "schema": {
            "type": "number",
            "description": "Video data buffered ahead of current position in ms"
          }
        },
        {
          "name": "audioBufferedMs",
          "schema": {
            "type": "number",
            "description": "Audio data buffered ahead of current position in ms"
          }
        },
        {
          "name": "liveLatencyMs",
          "schema": {
            "type": "number",
            "description": "Distance from the live edge in ms; 0 for VOD"
          }
        },
        {
          "name": "profileBitrate",
          "schema": {
            "type": "integer",
            "description": "Bitrate of the selected video profile in bps"
          }
        },
        {
          "name": "networkBitrate",
          "schema": {
            "type": "integer",
            "description": "Estimated download throughput in bps"
          }
        }
      ],
      "result": {
        "name": "onProgressParams",
        "schema": {
          "type": "object",
          "properties": {
            "positionMs": {
              "type": "number"
            },
            "durationMs": {
              "type": "number"
            },
            "speed": {
              "type": "number"
            },
            "startMs": {
              "type": "number"
            },
            "endMs": {
              "type": "number"
            },
            "videoBufferedMs": {
              "type": "number"
            },
            "audioBufferedMs": {
              "type": "number"
            },
            "liveLatencyMs": {
              "type": "number"
            },
            "profileBitrate": {
              "type": "integer"
            },
            "networkBitrate": {
              "type": "integer"
            }
          }
        }
      }
    },
    {
      "name": "org.rdk.player.onEOS",
      "summary": "End of stream reached",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "onEOSParams",
        "schema": {
          "type": "object"
        }
      },
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.onSpeedChanged",
      "summary": "Effective playback speed changed",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "speed",
          "schema": {
            "type": "number",
            "description": "New playback speed multiplier"
          }
        }
      ],
      "result": {
        "name": "onSpeedChangedParams",
        "schema": {
          "type": "object",
          "properties": {
            "speed": {
              "type": "number"
            }
          }
        }
      }
    },
    {
      "name": "org.rdk.player.onBufferingChanged",
      "summary": "Player entered or exited a buffering state",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "buffering",
          "schema": {
            "type": "boolean",
            "description": "true when actively buffering; false when buffering is complete"
          }
        }
      ],
      "result": {
        "name": "onBufferingChangedParams",
        "schema": {
          "type": "object",
          "properties": {
            "buffering": {
              "type": "boolean"
            }
          }
        }
      }
    },
    {
      "name": "org.rdk.player.onSeeked",
      "summary": "Seek operation completed",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "positionMs",
          "schema": {
            "type": "number",
            "description": "New playback position in milliseconds after the seek"
          }
        }
      ],
      "result": {
        "name": "onSeekedParams",
        "schema": {
          "type": "object",
          "properties": {
            "positionMs": {
              "type": "number"
            }
          }
        }
      }
    },
    {
      "name": "org.rdk.player.onBitrateChanged",
      "summary": "ABR switched to a different video profile",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "bitrate",
          "schema": {
            "type": "integer",
            "description": "New video bitrate in bps"
          }
        },
        {
          "name": "width",
          "schema": {
            "type": "integer",
            "description": "Horizontal resolution of the new profile in pixels"
          }
        },
        {
          "name": "height",
          "schema": {
            "type": "integer",
            "description": "Vertical resolution of the new profile in pixels"
          }
        },
        {
          "name": "description",
          "schema": {
            "type": "string",
            "description": "Reason for the bitrate change (e.g. NetworkCongestion)"
          }
        }
      ],
      "result": {
        "name": "onBitrateChangedParams",
        "schema": {
          "type": "object",
          "properties": {
            "bitrate": {
              "type": "integer"
            },
            "width": {
              "type": "integer"
            },
            "height": {
              "type": "integer"
            },
            "description": {
              "type": "string"
            }
          }
        }
      }
    },
    {
      "name": "org.rdk.player.onMediaMetadata",
      "summary": "Stream metadata parsed after tune",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "durationMs",
          "schema": {
            "type": "integer",
            "description": "Total stream duration in milliseconds"
          }
        },
        {
          "name": "width",
          "schema": {
            "type": "integer",
            "description": "Horizontal resolution of the highest-quality profile"
          }
        },
        {
          "name": "height",
          "schema": {
            "type": "integer",
            "description": "Vertical resolution of the highest-quality profile"
          }
        },
        {
          "name": "hasDrm",
          "schema": {
            "type": "boolean",
            "description": "true if the stream is DRM protected"
          }
        },
        {
          "name": "isLive",
          "schema": {
            "type": "boolean",
            "description": "true if the stream is a live broadcast"
          }
        },
        {
          "name": "drmType",
          "schema": {
            "type": "string",
            "description": "Active DRM system name, or empty string for clear"
          }
        },
        {
          "name": "languages",
          "schema": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "ISO 639 language codes of all available audio tracks"
          }
        },
        {
          "name": "bitrates",
          "schema": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "description": "Available video bitrates in bps, ascending order"
          }
        },
        {
          "name": "speeds",
          "schema": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Trick-play speeds supported by the stream"
          }
        }
      ],
      "result": {
        "name": "onMediaMetadataParams",
        "schema": {
          "type": "object",
          "properties": {
            "durationMs": {
              "type": "integer"
            },
            "width": {
              "type": "integer"
            },
            "height": {
              "type": "integer"
            },
            "hasDrm": {
              "type": "boolean"
            },
            "isLive": {
              "type": "boolean"
            },
            "drmType": {
              "type": "string"
            },
            "languages": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "bitrates": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "speeds": {
              "type": "array",
              "items": {
                "type": "number"
              }
            }
          }
        }
      }
    },
    {
      "name": "org.rdk.player.onAudioTracksChanged",
      "summary": "Available audio track list changed",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "onAudioTracksChangedParams",
        "schema": {
          "type": "object"
        }
      },
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.onTextTracksChanged",
      "summary": "Available text track list changed",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "onTextTracksChangedParams",
        "schema": {
          "type": "object"
        }
      },
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.onDrmMetadata",
      "summary": "DRM access status update",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "accessStatus",
          "schema": {
            "type": "string",
            "description": "DRM access status string reported by the DRM system"
          }
        }
      ],
      "result": {
        "name": "onDrmMetadataParams",
        "schema": {
          "type": "object",
          "properties": {
            "accessStatus": {
              "type": "string"
            }
          }
        }
      }
    },
    {
      "name": "org.rdk.player.onAdReservationStart",
      "summary": "SCTE-35 ad reservation window opened",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "onAdReservationStartParams",
        "schema": {
          "type": "object"
        }
      },
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.onAdReservationEnd",
      "summary": "SCTE-35 ad reservation window closed",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "result": {
        "name": "onAdReservationEndParams",
        "schema": {
          "type": "object"
        }
      },
      "paramStructure": "by-name"
    },
    {
      "name": "org.rdk.player.onAnomaly",
      "summary": "Internal diagnostic / anomaly report",
      "tags": [
        {
          "name": "Notifications"
        }
      ],
      "x-server-notification": true,
      "params": [
        {
          "name": "sessionId",
          "required": true,
          "description": "Session identifier returned by openSession.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "severity",
          "schema": {
            "type": "integer",
            "minimum": 0,
            "maximum": 3,
            "description": "Severity level: 0=INFO, 1=WARNING, 2=ERROR, 3=TRACE"
          }
        },
        {
          "name": "message",
          "schema": {
            "type": "string",
            "description": "Human-readable anomaly description"
          }
        }
      ],
      "result": {
        "name": "onAnomalyParams",
        "schema": {
          "type": "object",
          "properties": {
            "severity": {
              "type": "integer"
            },
            "message": {
              "type": "string"
            }
          }
        }
      }
    }
  ]
}
  • No labels