...
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{"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 errororg.rdk.player.onAdPlacementProgress | {"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
...