This cluster provides an interface for controlling Media Playback (PLAY, PAUSE, etc) on a media device such as a TV, Set-top Box, or Smart Speaker.

This cluster server would be supported on Video Player devices or endpoints that provide media playback, such as a Content App. This cluster provides an interface for controlling Media Playback.

MediaPlaybackCluster supports optional features that you can enable with the MediaPlaybackCluster.with() factory method.

MatterSpecification.v13.Cluster § 6.10

interface Cluster {
    attributes: Merge<{
        currentState: Attribute<MediaPlayback.PlaybackState, any>;
    }, GlobalAttributes<{
        advancedSeek: BitFlag;
        audioAdvance: BitFlag;
        audioTracks: BitFlag;
        textTracks: BitFlag;
        variableSpeed: BitFlag;
    }>>;
    base: undefined;
    commands: {
        next: OptionalCommand<void, TypeFromFields<{
            data: OptionalFieldType<string>;
            status: FieldType<MediaPlayback.Status>;
        }>, any>;
        pause: Command<void, TypeFromFields<{
            data: OptionalFieldType<string>;
            status: FieldType<MediaPlayback.Status>;
        }>, any>;
        play: Command<void, TypeFromFields<{
            data: OptionalFieldType<string>;
            status: FieldType<MediaPlayback.Status>;
        }>, any>;
        previous: OptionalCommand<void, TypeFromFields<{
            data: OptionalFieldType<string>;
            status: FieldType<MediaPlayback.Status>;
        }>, any>;
        skipBackward: OptionalCommand<TypeFromFields<{
            deltaPositionMilliseconds: FieldType<number | bigint>;
        }>, TypeFromFields<{
            data: OptionalFieldType<string>;
            status: FieldType<MediaPlayback.Status>;
        }>, any>;
        skipForward: OptionalCommand<TypeFromFields<{
            deltaPositionMilliseconds: FieldType<number | bigint>;
        }>, TypeFromFields<{
            data: OptionalFieldType<string>;
            status: FieldType<MediaPlayback.Status>;
        }>, any>;
        startOver: OptionalCommand<void, TypeFromFields<{
            data: OptionalFieldType<string>;
            status: FieldType<MediaPlayback.Status>;
        }>, any>;
        stop: Command<void, TypeFromFields<{
            data: OptionalFieldType<string>;
            status: FieldType<MediaPlayback.Status>;
        }>, any>;
    };
    events: {
        stateChanged: OptionalEvent<TypeFromFields<{
            audioAdvanceUnmuted: OptionalFieldType<boolean>;
            currentState: FieldType<MediaPlayback.PlaybackState>;
            data: OptionalFieldType<Uint8Array>;
            duration: OptionalFieldType<number | bigint>;
            playbackSpeed: OptionalFieldType<number>;
            sampledPosition: OptionalFieldType<TypeFromFields<{
                position: FieldType<null | number | bigint>;
                updatedAt: FieldType<number | bigint>;
            }>>;
            seekRangeEnd: OptionalFieldType<number | bigint>;
            seekRangeStart: OptionalFieldType<number | bigint>;
            startTime: OptionalFieldType<number | bigint>;
        }>, any>;
    };
    extensions: readonly [{
        component: {
            attributes: {
                duration: Attribute<null | number | bigint, any>;
                playbackSpeed: Attribute<number, any>;
                sampledPosition: Attribute<null | TypeFromFields<{
                    position: FieldType<null | number | bigint>;
                    updatedAt: FieldType<number | bigint>;
                }>, any>;
                seekRangeEnd: Attribute<null | number | bigint, any>;
                seekRangeStart: Attribute<null | number | bigint, any>;
                startTime: Attribute<null | number | bigint, any>;
            };
            commands: {
                seek: Command<TypeFromFields<{
                    position: FieldType<number | bigint>;
                }>, TypeFromFields<{
                    data: OptionalFieldType<string>;
                    status: FieldType<MediaPlayback.Status>;
                }>, any>;
            };
        };
        flags: {
            advancedSeek: true;
        };
    }, {
        component: {
            attributes: {
                activeAudioTrack: Attribute<null | TypeFromFields<{
                    id: FieldType<string>;
                    trackAttributes: FieldType<TypeFromFields<{
                        characteristics: ...;
                        displayName: ...;
                        languageCode: ...;
                    }>>;
                }>, any>;
                availableAudioTracks: Attribute<null | TypeFromFields<{
                    id: FieldType<string>;
                    trackAttributes: FieldType<TypeFromFields<(...)>>;
                }>[], any>;
            };
            commands: {
                activateAudioTrack: Command<TypeFromFields<{
                    audioOutputIndex: OptionalFieldType<null | number>;
                    trackId: FieldType<string>;
                }>, void, any>;
            };
        };
        flags: {
            audioTracks: true;
        };
    }, {
        component: {
            attributes: {
                activeTextTrack: Attribute<null | TypeFromFields<{
                    id: FieldType<string>;
                    trackAttributes: FieldType<TypeFromFields<{
                        characteristics: ...;
                        displayName: ...;
                        languageCode: ...;
                    }>>;
                }>, any>;
                availableTextTracks: Attribute<null | TypeFromFields<{
                    id: FieldType<string>;
                    trackAttributes: FieldType<TypeFromFields<(...)>>;
                }>[], any>;
            };
            commands: {
                activateTextTrack: Command<TypeFromFields<{
                    trackId: FieldType<string>;
                }>, void, any>;
                deactivateTextTrack: Command<void, void, any>;
            };
        };
        flags: {
            textTracks: true;
        };
    }, {
        component: {
            commands: {
                fastForward: Command<TypeFromFields<{
                    audioAdvanceUnmuted: OptionalFieldType<boolean>;
                }>, TypeFromFields<{
                    data: OptionalFieldType<string>;
                    status: FieldType<MediaPlayback.Status>;
                }>, any>;
                rewind: Command<TypeFromFields<{
                    audioAdvanceUnmuted: OptionalFieldType<boolean>;
                }>, TypeFromFields<{
                    data: OptionalFieldType<string>;
                    status: FieldType<MediaPlayback.Status>;
                }>, any>;
            };
        };
        flags: {
            variableSpeed: true;
        };
    }];
    features: {
        advancedSeek: BitFlag;
        audioAdvance: BitFlag;
        audioTracks: BitFlag;
        textTracks: BitFlag;
        variableSpeed: BitFlag;
    };
    id: Branded<1286, "ClusterId">;
    name: "MediaPlayback";
    revision: 2;
    supportedFeatures: {};
    unknown: false;
    alter<const AlterationsT>(alterations: AlterationsT): WithAlterations<Of<{
        attributes: {
            currentState: Attribute<MediaPlayback.PlaybackState, any>;
        };
        commands: {
            next: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            pause: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            play: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            previous: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipBackward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipForward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            startOver: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            stop: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
        };
        events: {
            stateChanged: OptionalEvent<TypeFromFields<{
                audioAdvanceUnmuted: OptionalFieldType<boolean>;
                currentState: FieldType<MediaPlayback.PlaybackState>;
                data: OptionalFieldType<Uint8Array>;
                duration: OptionalFieldType<number | bigint>;
                playbackSpeed: OptionalFieldType<number>;
                sampledPosition: OptionalFieldType<TypeFromFields<{
                    position: FieldType<(...)>;
                    updatedAt: FieldType<(...)>;
                }>>;
                seekRangeEnd: OptionalFieldType<number | bigint>;
                seekRangeStart: OptionalFieldType<number | bigint>;
                startTime: OptionalFieldType<number | bigint>;
            }>, any>;
        };
        extensions: readonly [{
            component: {
                attributes: {
                    duration: Attribute<null | number | bigint, any>;
                    playbackSpeed: Attribute<number, any>;
                    sampledPosition: Attribute<null | TypeFromFields<{
                        position: ...;
                        updatedAt: ...;
                    }>, any>;
                    seekRangeEnd: Attribute<null | number | bigint, any>;
                    seekRangeStart: Attribute<null | number | bigint, any>;
                    startTime: Attribute<null | number | bigint, any>;
                };
                commands: {
                    seek: Command<TypeFromFields<{
                        position: FieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                advancedSeek: true;
            };
        }, {
            component: {
                attributes: {
                    activeAudioTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateAudioTrack: Command<TypeFromFields<{
                        audioOutputIndex: OptionalFieldType<(...)>;
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                };
            };
            flags: {
                audioTracks: true;
            };
        }, {
            component: {
                attributes: {
                    activeTextTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateTextTrack: Command<TypeFromFields<{
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                    deactivateTextTrack: Command<void, void, any>;
                };
            };
            flags: {
                textTracks: true;
            };
        }, {
            component: {
                commands: {
                    fastForward: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                    rewind: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                variableSpeed: true;
            };
        }];
        features: {
            advancedSeek: BitFlag;
            audioAdvance: BitFlag;
            audioTracks: BitFlag;
            textTracks: BitFlag;
            variableSpeed: BitFlag;
        };
        id: 1286;
        name: "MediaPlayback";
        revision: 2;
    }>, AlterationsT>;
    enable<const FlagsT>(flags: FlagsT): WithFlags<Of<{
        attributes: {
            currentState: Attribute<MediaPlayback.PlaybackState, any>;
        };
        commands: {
            next: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            pause: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            play: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            previous: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipBackward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipForward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            startOver: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            stop: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
        };
        events: {
            stateChanged: OptionalEvent<TypeFromFields<{
                audioAdvanceUnmuted: OptionalFieldType<boolean>;
                currentState: FieldType<MediaPlayback.PlaybackState>;
                data: OptionalFieldType<Uint8Array>;
                duration: OptionalFieldType<number | bigint>;
                playbackSpeed: OptionalFieldType<number>;
                sampledPosition: OptionalFieldType<TypeFromFields<{
                    position: FieldType<(...)>;
                    updatedAt: FieldType<(...)>;
                }>>;
                seekRangeEnd: OptionalFieldType<number | bigint>;
                seekRangeStart: OptionalFieldType<number | bigint>;
                startTime: OptionalFieldType<number | bigint>;
            }>, any>;
        };
        extensions: readonly [{
            component: {
                attributes: {
                    duration: Attribute<null | number | bigint, any>;
                    playbackSpeed: Attribute<number, any>;
                    sampledPosition: Attribute<null | TypeFromFields<{
                        position: ...;
                        updatedAt: ...;
                    }>, any>;
                    seekRangeEnd: Attribute<null | number | bigint, any>;
                    seekRangeStart: Attribute<null | number | bigint, any>;
                    startTime: Attribute<null | number | bigint, any>;
                };
                commands: {
                    seek: Command<TypeFromFields<{
                        position: FieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                advancedSeek: true;
            };
        }, {
            component: {
                attributes: {
                    activeAudioTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateAudioTrack: Command<TypeFromFields<{
                        audioOutputIndex: OptionalFieldType<(...)>;
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                };
            };
            flags: {
                audioTracks: true;
            };
        }, {
            component: {
                attributes: {
                    activeTextTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateTextTrack: Command<TypeFromFields<{
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                    deactivateTextTrack: Command<void, void, any>;
                };
            };
            flags: {
                textTracks: true;
            };
        }, {
            component: {
                commands: {
                    fastForward: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                    rewind: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                variableSpeed: true;
            };
        }];
        features: {
            advancedSeek: BitFlag;
            audioAdvance: BitFlag;
            audioTracks: BitFlag;
            textTracks: BitFlag;
            variableSpeed: BitFlag;
        };
        id: 1286;
        name: "MediaPlayback";
        revision: 2;
    }>, FlagsT>;
    set<const ValuesT>(values: ValuesT): WithValues<Of<{
        attributes: {
            currentState: Attribute<MediaPlayback.PlaybackState, any>;
        };
        commands: {
            next: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            pause: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            play: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            previous: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipBackward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipForward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            startOver: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            stop: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
        };
        events: {
            stateChanged: OptionalEvent<TypeFromFields<{
                audioAdvanceUnmuted: OptionalFieldType<boolean>;
                currentState: FieldType<MediaPlayback.PlaybackState>;
                data: OptionalFieldType<Uint8Array>;
                duration: OptionalFieldType<number | bigint>;
                playbackSpeed: OptionalFieldType<number>;
                sampledPosition: OptionalFieldType<TypeFromFields<{
                    position: FieldType<(...)>;
                    updatedAt: FieldType<(...)>;
                }>>;
                seekRangeEnd: OptionalFieldType<number | bigint>;
                seekRangeStart: OptionalFieldType<number | bigint>;
                startTime: OptionalFieldType<number | bigint>;
            }>, any>;
        };
        extensions: readonly [{
            component: {
                attributes: {
                    duration: Attribute<null | number | bigint, any>;
                    playbackSpeed: Attribute<number, any>;
                    sampledPosition: Attribute<null | TypeFromFields<{
                        position: ...;
                        updatedAt: ...;
                    }>, any>;
                    seekRangeEnd: Attribute<null | number | bigint, any>;
                    seekRangeStart: Attribute<null | number | bigint, any>;
                    startTime: Attribute<null | number | bigint, any>;
                };
                commands: {
                    seek: Command<TypeFromFields<{
                        position: FieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                advancedSeek: true;
            };
        }, {
            component: {
                attributes: {
                    activeAudioTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateAudioTrack: Command<TypeFromFields<{
                        audioOutputIndex: OptionalFieldType<(...)>;
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                };
            };
            flags: {
                audioTracks: true;
            };
        }, {
            component: {
                attributes: {
                    activeTextTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateTextTrack: Command<TypeFromFields<{
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                    deactivateTextTrack: Command<void, void, any>;
                };
            };
            flags: {
                textTracks: true;
            };
        }, {
            component: {
                commands: {
                    fastForward: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                    rewind: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                variableSpeed: true;
            };
        }];
        features: {
            advancedSeek: BitFlag;
            audioAdvance: BitFlag;
            audioTracks: BitFlag;
            textTracks: BitFlag;
            variableSpeed: BitFlag;
        };
        id: 1286;
        name: "MediaPlayback";
        revision: 2;
    }>, ValuesT>;
    with<const SelectionT>(...selection: SelectionT): Of<Of<{
        attributes: {
            currentState: Attribute<MediaPlayback.PlaybackState, any>;
        };
        commands: {
            next: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            pause: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            play: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            previous: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipBackward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipForward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            startOver: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            stop: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
        };
        events: {
            stateChanged: OptionalEvent<TypeFromFields<{
                audioAdvanceUnmuted: OptionalFieldType<boolean>;
                currentState: FieldType<MediaPlayback.PlaybackState>;
                data: OptionalFieldType<Uint8Array>;
                duration: OptionalFieldType<number | bigint>;
                playbackSpeed: OptionalFieldType<number>;
                sampledPosition: OptionalFieldType<TypeFromFields<{
                    position: FieldType<(...)>;
                    updatedAt: FieldType<(...)>;
                }>>;
                seekRangeEnd: OptionalFieldType<number | bigint>;
                seekRangeStart: OptionalFieldType<number | bigint>;
                startTime: OptionalFieldType<number | bigint>;
            }>, any>;
        };
        extensions: readonly [{
            component: {
                attributes: {
                    duration: Attribute<null | number | bigint, any>;
                    playbackSpeed: Attribute<number, any>;
                    sampledPosition: Attribute<null | TypeFromFields<{
                        position: ...;
                        updatedAt: ...;
                    }>, any>;
                    seekRangeEnd: Attribute<null | number | bigint, any>;
                    seekRangeStart: Attribute<null | number | bigint, any>;
                    startTime: Attribute<null | number | bigint, any>;
                };
                commands: {
                    seek: Command<TypeFromFields<{
                        position: FieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                advancedSeek: true;
            };
        }, {
            component: {
                attributes: {
                    activeAudioTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateAudioTrack: Command<TypeFromFields<{
                        audioOutputIndex: OptionalFieldType<(...)>;
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                };
            };
            flags: {
                audioTracks: true;
            };
        }, {
            component: {
                attributes: {
                    activeTextTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateTextTrack: Command<TypeFromFields<{
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                    deactivateTextTrack: Command<void, void, any>;
                };
            };
            flags: {
                textTracks: true;
            };
        }, {
            component: {
                commands: {
                    fastForward: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                    rewind: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                variableSpeed: true;
            };
        }];
        features: {
            advancedSeek: BitFlag;
            audioAdvance: BitFlag;
            audioTracks: BitFlag;
            textTracks: BitFlag;
            variableSpeed: BitFlag;
        };
        id: 1286;
        name: "MediaPlayback";
        revision: 2;
    }>, SelectionT>;
}

Hierarchy (view full)

Properties

attributes: Merge<{
    currentState: Attribute<MediaPlayback.PlaybackState, any>;
}, GlobalAttributes<{
    advancedSeek: BitFlag;
    audioAdvance: BitFlag;
    audioTracks: BitFlag;
    textTracks: BitFlag;
    variableSpeed: BitFlag;
}>>

Type declaration

  • ReadonlycurrentState: Attribute<MediaPlayback.PlaybackState, any>

    Indicates the current playback state of media.

    During fast-forward, rewind, and other seek operations; this attribute shall be set to PLAYING.

    MatterSpecification.v13.Cluster § 6.10.6.1

base: undefined
commands: {
    next: OptionalCommand<void, TypeFromFields<{
        data: OptionalFieldType<string>;
        status: FieldType<MediaPlayback.Status>;
    }>, any>;
    pause: Command<void, TypeFromFields<{
        data: OptionalFieldType<string>;
        status: FieldType<MediaPlayback.Status>;
    }>, any>;
    play: Command<void, TypeFromFields<{
        data: OptionalFieldType<string>;
        status: FieldType<MediaPlayback.Status>;
    }>, any>;
    previous: OptionalCommand<void, TypeFromFields<{
        data: OptionalFieldType<string>;
        status: FieldType<MediaPlayback.Status>;
    }>, any>;
    skipBackward: OptionalCommand<TypeFromFields<{
        deltaPositionMilliseconds: FieldType<number | bigint>;
    }>, TypeFromFields<{
        data: OptionalFieldType<string>;
        status: FieldType<MediaPlayback.Status>;
    }>, any>;
    skipForward: OptionalCommand<TypeFromFields<{
        deltaPositionMilliseconds: FieldType<number | bigint>;
    }>, TypeFromFields<{
        data: OptionalFieldType<string>;
        status: FieldType<MediaPlayback.Status>;
    }>, any>;
    startOver: OptionalCommand<void, TypeFromFields<{
        data: OptionalFieldType<string>;
        status: FieldType<MediaPlayback.Status>;
    }>, any>;
    stop: Command<void, TypeFromFields<{
        data: OptionalFieldType<string>;
        status: FieldType<MediaPlayback.Status>;
    }>, any>;
}

Type declaration

events: {
    stateChanged: OptionalEvent<TypeFromFields<{
        audioAdvanceUnmuted: OptionalFieldType<boolean>;
        currentState: FieldType<MediaPlayback.PlaybackState>;
        data: OptionalFieldType<Uint8Array>;
        duration: OptionalFieldType<number | bigint>;
        playbackSpeed: OptionalFieldType<number>;
        sampledPosition: OptionalFieldType<TypeFromFields<{
            position: FieldType<null | number | bigint>;
            updatedAt: FieldType<number | bigint>;
        }>>;
        seekRangeEnd: OptionalFieldType<number | bigint>;
        seekRangeStart: OptionalFieldType<number | bigint>;
        startTime: OptionalFieldType<number | bigint>;
    }>, any>;
}

Type declaration

extensions: readonly [{
    component: {
        attributes: {
            duration: Attribute<null | number | bigint, any>;
            playbackSpeed: Attribute<number, any>;
            sampledPosition: Attribute<null | TypeFromFields<{
                position: FieldType<null | number | bigint>;
                updatedAt: FieldType<number | bigint>;
            }>, any>;
            seekRangeEnd: Attribute<null | number | bigint, any>;
            seekRangeStart: Attribute<null | number | bigint, any>;
            startTime: Attribute<null | number | bigint, any>;
        };
        commands: {
            seek: Command<TypeFromFields<{
                position: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
        };
    };
    flags: {
        advancedSeek: true;
    };
}, {
    component: {
        attributes: {
            activeAudioTrack: Attribute<null | TypeFromFields<{
                id: FieldType<string>;
                trackAttributes: FieldType<TypeFromFields<{
                    characteristics: ...;
                    displayName: ...;
                    languageCode: ...;
                }>>;
            }>, any>;
            availableAudioTracks: Attribute<null | TypeFromFields<{
                id: FieldType<string>;
                trackAttributes: FieldType<TypeFromFields<(...)>>;
            }>[], any>;
        };
        commands: {
            activateAudioTrack: Command<TypeFromFields<{
                audioOutputIndex: OptionalFieldType<null | number>;
                trackId: FieldType<string>;
            }>, void, any>;
        };
    };
    flags: {
        audioTracks: true;
    };
}, {
    component: {
        attributes: {
            activeTextTrack: Attribute<null | TypeFromFields<{
                id: FieldType<string>;
                trackAttributes: FieldType<TypeFromFields<{
                    characteristics: ...;
                    displayName: ...;
                    languageCode: ...;
                }>>;
            }>, any>;
            availableTextTracks: Attribute<null | TypeFromFields<{
                id: FieldType<string>;
                trackAttributes: FieldType<TypeFromFields<(...)>>;
            }>[], any>;
        };
        commands: {
            activateTextTrack: Command<TypeFromFields<{
                trackId: FieldType<string>;
            }>, void, any>;
            deactivateTextTrack: Command<void, void, any>;
        };
    };
    flags: {
        textTracks: true;
    };
}, {
    component: {
        commands: {
            fastForward: Command<TypeFromFields<{
                audioAdvanceUnmuted: OptionalFieldType<boolean>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            rewind: Command<TypeFromFields<{
                audioAdvanceUnmuted: OptionalFieldType<boolean>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
        };
    };
    flags: {
        variableSpeed: true;
    };
}]
features: {
    advancedSeek: BitFlag;
    audioAdvance: BitFlag;
    audioTracks: BitFlag;
    textTracks: BitFlag;
    variableSpeed: BitFlag;
}

Type declaration

  • ReadonlyadvancedSeek: BitFlag

    AdvancedSeek

    This feature provides access to the time offset location within current playback media and allows for jumping to a specific location using time offsets. This enables clients to implement more advanced media seeking behavior in their user interface, for instance a "seek bar".

    MatterSpecification.v13.Cluster § 6.10.4.1

  • ReadonlyaudioAdvance: BitFlag

    AudioAdvance

    This feature is for a device or app that supports playing audio during fast and slow advance and rewind (e.g., while playback speed is not 1). A device that supports this feature may only support playing audio during certain speeds.

    A cluster implementing AA shall implement AS.

    MatterSpecification.v13.Cluster § 6.10.4.5

  • ReadonlyaudioTracks: BitFlag

    AudioTracks

    This feature is for a device or app that supports Audio Tracks.

    MatterSpecification.v13.Cluster § 6.10.4.4

  • ReadonlytextTracks: BitFlag

    TextTracks

    This feature is for a device or app that supports Text Tracks.

    MatterSpecification.v13.Cluster § 6.10.4.3

  • ReadonlyvariableSpeed: BitFlag

    VariableSpeed

    This feature is for a device which supports variable speed playback on media that supports it.

    MatterSpecification.v13.Cluster § 6.10.4.2

id: Branded<1286, "ClusterId">
name
revision
supportedFeatures: {}
unknown

Methods

  • Modify elements using ElementModifier.alter.

    Type Parameters

    • const AlterationsT extends Alterations<Of<{
          attributes: {
              currentState: Attribute<MediaPlayback.PlaybackState, any>;
          };
          commands: {
              next: OptionalCommand<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              pause: Command<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              play: Command<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              previous: OptionalCommand<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              skipBackward: OptionalCommand<TypeFromFields<{
                  deltaPositionMilliseconds: FieldType<number | bigint>;
              }>, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              skipForward: OptionalCommand<TypeFromFields<{
                  deltaPositionMilliseconds: FieldType<number | bigint>;
              }>, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              startOver: OptionalCommand<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              stop: Command<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
          };
          events: {
              stateChanged: OptionalEvent<TypeFromFields<{
                  audioAdvanceUnmuted: OptionalFieldType<boolean>;
                  currentState: FieldType<MediaPlayback.PlaybackState>;
                  data: OptionalFieldType<Uint8Array>;
                  duration: OptionalFieldType<number | bigint>;
                  playbackSpeed: OptionalFieldType<number>;
                  sampledPosition: OptionalFieldType<TypeFromFields<{
                      position: FieldType<(...)>;
                      updatedAt: FieldType<(...)>;
                  }>>;
                  seekRangeEnd: OptionalFieldType<number | bigint>;
                  seekRangeStart: OptionalFieldType<number | bigint>;
                  startTime: OptionalFieldType<number | bigint>;
              }>, any>;
          };
          extensions: readonly [{
              component: {
                  attributes: {
                      duration: Attribute<null | number | bigint, any>;
                      playbackSpeed: Attribute<number, any>;
                      sampledPosition: Attribute<null | TypeFromFields<{
                          position: ...;
                          updatedAt: ...;
                      }>, any>;
                      seekRangeEnd: Attribute<null | number | bigint, any>;
                      seekRangeStart: Attribute<null | number | bigint, any>;
                      startTime: Attribute<null | number | bigint, any>;
                  };
                  commands: {
                      seek: Command<TypeFromFields<{
                          position: FieldType<(...)>;
                      }>, TypeFromFields<{
                          data: OptionalFieldType<(...)>;
                          status: FieldType<(...)>;
                      }>, any>;
                  };
              };
              flags: {
                  advancedSeek: true;
              };
          }, {
              component: {
                  attributes: {
                      activeAudioTrack: Attribute<null | TypeFromFields<{
                          id: ...;
                          trackAttributes: ...;
                      }>, any>;
                      availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                  };
                  commands: {
                      activateAudioTrack: Command<TypeFromFields<{
                          audioOutputIndex: OptionalFieldType<(...)>;
                          trackId: FieldType<(...)>;
                      }>, void, any>;
                  };
              };
              flags: {
                  audioTracks: true;
              };
          }, {
              component: {
                  attributes: {
                      activeTextTrack: Attribute<null | TypeFromFields<{
                          id: ...;
                          trackAttributes: ...;
                      }>, any>;
                      availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                  };
                  commands: {
                      activateTextTrack: Command<TypeFromFields<{
                          trackId: FieldType<(...)>;
                      }>, void, any>;
                      deactivateTextTrack: Command<void, void, any>;
                  };
              };
              flags: {
                  textTracks: true;
              };
          }, {
              component: {
                  commands: {
                      fastForward: Command<TypeFromFields<{
                          audioAdvanceUnmuted: OptionalFieldType<(...)>;
                      }>, TypeFromFields<{
                          data: OptionalFieldType<(...)>;
                          status: FieldType<(...)>;
                      }>, any>;
                      rewind: Command<TypeFromFields<{
                          audioAdvanceUnmuted: OptionalFieldType<(...)>;
                      }>, TypeFromFields<{
                          data: OptionalFieldType<(...)>;
                          status: FieldType<(...)>;
                      }>, any>;
                  };
              };
              flags: {
                  variableSpeed: true;
              };
          }];
          features: {
              advancedSeek: BitFlag;
              audioAdvance: BitFlag;
              audioTracks: BitFlag;
              textTracks: BitFlag;
              variableSpeed: BitFlag;
          };
          id: 1286;
          name: "MediaPlayback";
          revision: 2;
      }>>

    Parameters

    Returns WithAlterations<Of<{
        attributes: {
            currentState: Attribute<MediaPlayback.PlaybackState, any>;
        };
        commands: {
            next: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            pause: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            play: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            previous: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipBackward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipForward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            startOver: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            stop: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
        };
        events: {
            stateChanged: OptionalEvent<TypeFromFields<{
                audioAdvanceUnmuted: OptionalFieldType<boolean>;
                currentState: FieldType<MediaPlayback.PlaybackState>;
                data: OptionalFieldType<Uint8Array>;
                duration: OptionalFieldType<number | bigint>;
                playbackSpeed: OptionalFieldType<number>;
                sampledPosition: OptionalFieldType<TypeFromFields<{
                    position: FieldType<(...)>;
                    updatedAt: FieldType<(...)>;
                }>>;
                seekRangeEnd: OptionalFieldType<number | bigint>;
                seekRangeStart: OptionalFieldType<number | bigint>;
                startTime: OptionalFieldType<number | bigint>;
            }>, any>;
        };
        extensions: readonly [{
            component: {
                attributes: {
                    duration: Attribute<null | number | bigint, any>;
                    playbackSpeed: Attribute<number, any>;
                    sampledPosition: Attribute<null | TypeFromFields<{
                        position: ...;
                        updatedAt: ...;
                    }>, any>;
                    seekRangeEnd: Attribute<null | number | bigint, any>;
                    seekRangeStart: Attribute<null | number | bigint, any>;
                    startTime: Attribute<null | number | bigint, any>;
                };
                commands: {
                    seek: Command<TypeFromFields<{
                        position: FieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                advancedSeek: true;
            };
        }, {
            component: {
                attributes: {
                    activeAudioTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateAudioTrack: Command<TypeFromFields<{
                        audioOutputIndex: OptionalFieldType<(...)>;
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                };
            };
            flags: {
                audioTracks: true;
            };
        }, {
            component: {
                attributes: {
                    activeTextTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateTextTrack: Command<TypeFromFields<{
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                    deactivateTextTrack: Command<void, void, any>;
                };
            };
            flags: {
                textTracks: true;
            };
        }, {
            component: {
                commands: {
                    fastForward: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                    rewind: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                variableSpeed: true;
            };
        }];
        features: {
            advancedSeek: BitFlag;
            audioAdvance: BitFlag;
            audioTracks: BitFlag;
            textTracks: BitFlag;
            variableSpeed: BitFlag;
        };
        id: 1286;
        name: "MediaPlayback";
        revision: 2;
    }>, AlterationsT>

  • Modify elements using ElementModifier.enable.

    Type Parameters

    • const FlagsT extends ElementFlags<Of<{
          attributes: {
              currentState: Attribute<MediaPlayback.PlaybackState, any>;
          };
          commands: {
              next: OptionalCommand<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              pause: Command<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              play: Command<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              previous: OptionalCommand<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              skipBackward: OptionalCommand<TypeFromFields<{
                  deltaPositionMilliseconds: FieldType<number | bigint>;
              }>, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              skipForward: OptionalCommand<TypeFromFields<{
                  deltaPositionMilliseconds: FieldType<number | bigint>;
              }>, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              startOver: OptionalCommand<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              stop: Command<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
          };
          events: {
              stateChanged: OptionalEvent<TypeFromFields<{
                  audioAdvanceUnmuted: OptionalFieldType<boolean>;
                  currentState: FieldType<MediaPlayback.PlaybackState>;
                  data: OptionalFieldType<Uint8Array>;
                  duration: OptionalFieldType<number | bigint>;
                  playbackSpeed: OptionalFieldType<number>;
                  sampledPosition: OptionalFieldType<TypeFromFields<{
                      position: FieldType<(...)>;
                      updatedAt: FieldType<(...)>;
                  }>>;
                  seekRangeEnd: OptionalFieldType<number | bigint>;
                  seekRangeStart: OptionalFieldType<number | bigint>;
                  startTime: OptionalFieldType<number | bigint>;
              }>, any>;
          };
          extensions: readonly [{
              component: {
                  attributes: {
                      duration: Attribute<null | number | bigint, any>;
                      playbackSpeed: Attribute<number, any>;
                      sampledPosition: Attribute<null | TypeFromFields<{
                          position: ...;
                          updatedAt: ...;
                      }>, any>;
                      seekRangeEnd: Attribute<null | number | bigint, any>;
                      seekRangeStart: Attribute<null | number | bigint, any>;
                      startTime: Attribute<null | number | bigint, any>;
                  };
                  commands: {
                      seek: Command<TypeFromFields<{
                          position: FieldType<(...)>;
                      }>, TypeFromFields<{
                          data: OptionalFieldType<(...)>;
                          status: FieldType<(...)>;
                      }>, any>;
                  };
              };
              flags: {
                  advancedSeek: true;
              };
          }, {
              component: {
                  attributes: {
                      activeAudioTrack: Attribute<null | TypeFromFields<{
                          id: ...;
                          trackAttributes: ...;
                      }>, any>;
                      availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                  };
                  commands: {
                      activateAudioTrack: Command<TypeFromFields<{
                          audioOutputIndex: OptionalFieldType<(...)>;
                          trackId: FieldType<(...)>;
                      }>, void, any>;
                  };
              };
              flags: {
                  audioTracks: true;
              };
          }, {
              component: {
                  attributes: {
                      activeTextTrack: Attribute<null | TypeFromFields<{
                          id: ...;
                          trackAttributes: ...;
                      }>, any>;
                      availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                  };
                  commands: {
                      activateTextTrack: Command<TypeFromFields<{
                          trackId: FieldType<(...)>;
                      }>, void, any>;
                      deactivateTextTrack: Command<void, void, any>;
                  };
              };
              flags: {
                  textTracks: true;
              };
          }, {
              component: {
                  commands: {
                      fastForward: Command<TypeFromFields<{
                          audioAdvanceUnmuted: OptionalFieldType<(...)>;
                      }>, TypeFromFields<{
                          data: OptionalFieldType<(...)>;
                          status: FieldType<(...)>;
                      }>, any>;
                      rewind: Command<TypeFromFields<{
                          audioAdvanceUnmuted: OptionalFieldType<(...)>;
                      }>, TypeFromFields<{
                          data: OptionalFieldType<(...)>;
                          status: FieldType<(...)>;
                      }>, any>;
                  };
              };
              flags: {
                  variableSpeed: true;
              };
          }];
          features: {
              advancedSeek: BitFlag;
              audioAdvance: BitFlag;
              audioTracks: BitFlag;
              textTracks: BitFlag;
              variableSpeed: BitFlag;
          };
          id: 1286;
          name: "MediaPlayback";
          revision: 2;
      }>>

    Parameters

    Returns WithFlags<Of<{
        attributes: {
            currentState: Attribute<MediaPlayback.PlaybackState, any>;
        };
        commands: {
            next: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            pause: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            play: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            previous: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipBackward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipForward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            startOver: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            stop: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
        };
        events: {
            stateChanged: OptionalEvent<TypeFromFields<{
                audioAdvanceUnmuted: OptionalFieldType<boolean>;
                currentState: FieldType<MediaPlayback.PlaybackState>;
                data: OptionalFieldType<Uint8Array>;
                duration: OptionalFieldType<number | bigint>;
                playbackSpeed: OptionalFieldType<number>;
                sampledPosition: OptionalFieldType<TypeFromFields<{
                    position: FieldType<(...)>;
                    updatedAt: FieldType<(...)>;
                }>>;
                seekRangeEnd: OptionalFieldType<number | bigint>;
                seekRangeStart: OptionalFieldType<number | bigint>;
                startTime: OptionalFieldType<number | bigint>;
            }>, any>;
        };
        extensions: readonly [{
            component: {
                attributes: {
                    duration: Attribute<null | number | bigint, any>;
                    playbackSpeed: Attribute<number, any>;
                    sampledPosition: Attribute<null | TypeFromFields<{
                        position: ...;
                        updatedAt: ...;
                    }>, any>;
                    seekRangeEnd: Attribute<null | number | bigint, any>;
                    seekRangeStart: Attribute<null | number | bigint, any>;
                    startTime: Attribute<null | number | bigint, any>;
                };
                commands: {
                    seek: Command<TypeFromFields<{
                        position: FieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                advancedSeek: true;
            };
        }, {
            component: {
                attributes: {
                    activeAudioTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateAudioTrack: Command<TypeFromFields<{
                        audioOutputIndex: OptionalFieldType<(...)>;
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                };
            };
            flags: {
                audioTracks: true;
            };
        }, {
            component: {
                attributes: {
                    activeTextTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateTextTrack: Command<TypeFromFields<{
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                    deactivateTextTrack: Command<void, void, any>;
                };
            };
            flags: {
                textTracks: true;
            };
        }, {
            component: {
                commands: {
                    fastForward: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                    rewind: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                variableSpeed: true;
            };
        }];
        features: {
            advancedSeek: BitFlag;
            audioAdvance: BitFlag;
            audioTracks: BitFlag;
            textTracks: BitFlag;
            variableSpeed: BitFlag;
        };
        id: 1286;
        name: "MediaPlayback";
        revision: 2;
    }>, FlagsT>

  • Modify elements using ElementModifier.set.

    Type Parameters

    • const ValuesT extends {
          currentState: number;
      }

    Parameters

    Returns WithValues<Of<{
        attributes: {
            currentState: Attribute<MediaPlayback.PlaybackState, any>;
        };
        commands: {
            next: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            pause: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            play: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            previous: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipBackward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipForward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            startOver: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            stop: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
        };
        events: {
            stateChanged: OptionalEvent<TypeFromFields<{
                audioAdvanceUnmuted: OptionalFieldType<boolean>;
                currentState: FieldType<MediaPlayback.PlaybackState>;
                data: OptionalFieldType<Uint8Array>;
                duration: OptionalFieldType<number | bigint>;
                playbackSpeed: OptionalFieldType<number>;
                sampledPosition: OptionalFieldType<TypeFromFields<{
                    position: FieldType<(...)>;
                    updatedAt: FieldType<(...)>;
                }>>;
                seekRangeEnd: OptionalFieldType<number | bigint>;
                seekRangeStart: OptionalFieldType<number | bigint>;
                startTime: OptionalFieldType<number | bigint>;
            }>, any>;
        };
        extensions: readonly [{
            component: {
                attributes: {
                    duration: Attribute<null | number | bigint, any>;
                    playbackSpeed: Attribute<number, any>;
                    sampledPosition: Attribute<null | TypeFromFields<{
                        position: ...;
                        updatedAt: ...;
                    }>, any>;
                    seekRangeEnd: Attribute<null | number | bigint, any>;
                    seekRangeStart: Attribute<null | number | bigint, any>;
                    startTime: Attribute<null | number | bigint, any>;
                };
                commands: {
                    seek: Command<TypeFromFields<{
                        position: FieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                advancedSeek: true;
            };
        }, {
            component: {
                attributes: {
                    activeAudioTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateAudioTrack: Command<TypeFromFields<{
                        audioOutputIndex: OptionalFieldType<(...)>;
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                };
            };
            flags: {
                audioTracks: true;
            };
        }, {
            component: {
                attributes: {
                    activeTextTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateTextTrack: Command<TypeFromFields<{
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                    deactivateTextTrack: Command<void, void, any>;
                };
            };
            flags: {
                textTracks: true;
            };
        }, {
            component: {
                commands: {
                    fastForward: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                    rewind: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                variableSpeed: true;
            };
        }];
        features: {
            advancedSeek: BitFlag;
            audioAdvance: BitFlag;
            audioTracks: BitFlag;
            textTracks: BitFlag;
            variableSpeed: BitFlag;
        };
        id: 1286;
        name: "MediaPlayback";
        revision: 2;
    }>, ValuesT>

  • Select features using ClusterComposer.compose.

    Type Parameters

    • const SelectionT extends FeatureSelection<Of<{
          attributes: {
              currentState: Attribute<MediaPlayback.PlaybackState, any>;
          };
          commands: {
              next: OptionalCommand<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              pause: Command<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              play: Command<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              previous: OptionalCommand<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              skipBackward: OptionalCommand<TypeFromFields<{
                  deltaPositionMilliseconds: FieldType<number | bigint>;
              }>, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              skipForward: OptionalCommand<TypeFromFields<{
                  deltaPositionMilliseconds: FieldType<number | bigint>;
              }>, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              startOver: OptionalCommand<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
              stop: Command<void, TypeFromFields<{
                  data: OptionalFieldType<string>;
                  status: FieldType<MediaPlayback.Status>;
              }>, any>;
          };
          events: {
              stateChanged: OptionalEvent<TypeFromFields<{
                  audioAdvanceUnmuted: OptionalFieldType<boolean>;
                  currentState: FieldType<MediaPlayback.PlaybackState>;
                  data: OptionalFieldType<Uint8Array>;
                  duration: OptionalFieldType<number | bigint>;
                  playbackSpeed: OptionalFieldType<number>;
                  sampledPosition: OptionalFieldType<TypeFromFields<{
                      position: FieldType<(...)>;
                      updatedAt: FieldType<(...)>;
                  }>>;
                  seekRangeEnd: OptionalFieldType<number | bigint>;
                  seekRangeStart: OptionalFieldType<number | bigint>;
                  startTime: OptionalFieldType<number | bigint>;
              }>, any>;
          };
          extensions: readonly [{
              component: {
                  attributes: {
                      duration: Attribute<null | number | bigint, any>;
                      playbackSpeed: Attribute<number, any>;
                      sampledPosition: Attribute<null | TypeFromFields<{
                          position: ...;
                          updatedAt: ...;
                      }>, any>;
                      seekRangeEnd: Attribute<null | number | bigint, any>;
                      seekRangeStart: Attribute<null | number | bigint, any>;
                      startTime: Attribute<null | number | bigint, any>;
                  };
                  commands: {
                      seek: Command<TypeFromFields<{
                          position: FieldType<(...)>;
                      }>, TypeFromFields<{
                          data: OptionalFieldType<(...)>;
                          status: FieldType<(...)>;
                      }>, any>;
                  };
              };
              flags: {
                  advancedSeek: true;
              };
          }, {
              component: {
                  attributes: {
                      activeAudioTrack: Attribute<null | TypeFromFields<{
                          id: ...;
                          trackAttributes: ...;
                      }>, any>;
                      availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                  };
                  commands: {
                      activateAudioTrack: Command<TypeFromFields<{
                          audioOutputIndex: OptionalFieldType<(...)>;
                          trackId: FieldType<(...)>;
                      }>, void, any>;
                  };
              };
              flags: {
                  audioTracks: true;
              };
          }, {
              component: {
                  attributes: {
                      activeTextTrack: Attribute<null | TypeFromFields<{
                          id: ...;
                          trackAttributes: ...;
                      }>, any>;
                      availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                  };
                  commands: {
                      activateTextTrack: Command<TypeFromFields<{
                          trackId: FieldType<(...)>;
                      }>, void, any>;
                      deactivateTextTrack: Command<void, void, any>;
                  };
              };
              flags: {
                  textTracks: true;
              };
          }, {
              component: {
                  commands: {
                      fastForward: Command<TypeFromFields<{
                          audioAdvanceUnmuted: OptionalFieldType<(...)>;
                      }>, TypeFromFields<{
                          data: OptionalFieldType<(...)>;
                          status: FieldType<(...)>;
                      }>, any>;
                      rewind: Command<TypeFromFields<{
                          audioAdvanceUnmuted: OptionalFieldType<(...)>;
                      }>, TypeFromFields<{
                          data: OptionalFieldType<(...)>;
                          status: FieldType<(...)>;
                      }>, any>;
                  };
              };
              flags: {
                  variableSpeed: true;
              };
          }];
          features: {
              advancedSeek: BitFlag;
              audioAdvance: BitFlag;
              audioTracks: BitFlag;
              textTracks: BitFlag;
              variableSpeed: BitFlag;
          };
          id: 1286;
          name: "MediaPlayback";
          revision: 2;
      }>>

    Parameters

    Returns Of<Of<{
        attributes: {
            currentState: Attribute<MediaPlayback.PlaybackState, any>;
        };
        commands: {
            next: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            pause: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            play: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            previous: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipBackward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            skipForward: OptionalCommand<TypeFromFields<{
                deltaPositionMilliseconds: FieldType<number | bigint>;
            }>, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            startOver: OptionalCommand<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
            stop: Command<void, TypeFromFields<{
                data: OptionalFieldType<string>;
                status: FieldType<MediaPlayback.Status>;
            }>, any>;
        };
        events: {
            stateChanged: OptionalEvent<TypeFromFields<{
                audioAdvanceUnmuted: OptionalFieldType<boolean>;
                currentState: FieldType<MediaPlayback.PlaybackState>;
                data: OptionalFieldType<Uint8Array>;
                duration: OptionalFieldType<number | bigint>;
                playbackSpeed: OptionalFieldType<number>;
                sampledPosition: OptionalFieldType<TypeFromFields<{
                    position: FieldType<(...)>;
                    updatedAt: FieldType<(...)>;
                }>>;
                seekRangeEnd: OptionalFieldType<number | bigint>;
                seekRangeStart: OptionalFieldType<number | bigint>;
                startTime: OptionalFieldType<number | bigint>;
            }>, any>;
        };
        extensions: readonly [{
            component: {
                attributes: {
                    duration: Attribute<null | number | bigint, any>;
                    playbackSpeed: Attribute<number, any>;
                    sampledPosition: Attribute<null | TypeFromFields<{
                        position: ...;
                        updatedAt: ...;
                    }>, any>;
                    seekRangeEnd: Attribute<null | number | bigint, any>;
                    seekRangeStart: Attribute<null | number | bigint, any>;
                    startTime: Attribute<null | number | bigint, any>;
                };
                commands: {
                    seek: Command<TypeFromFields<{
                        position: FieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                advancedSeek: true;
            };
        }, {
            component: {
                attributes: {
                    activeAudioTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableAudioTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateAudioTrack: Command<TypeFromFields<{
                        audioOutputIndex: OptionalFieldType<(...)>;
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                };
            };
            flags: {
                audioTracks: true;
            };
        }, {
            component: {
                attributes: {
                    activeTextTrack: Attribute<null | TypeFromFields<{
                        id: ...;
                        trackAttributes: ...;
                    }>, any>;
                    availableTextTracks: Attribute<null | TypeFromFields<(...)>[], any>;
                };
                commands: {
                    activateTextTrack: Command<TypeFromFields<{
                        trackId: FieldType<(...)>;
                    }>, void, any>;
                    deactivateTextTrack: Command<void, void, any>;
                };
            };
            flags: {
                textTracks: true;
            };
        }, {
            component: {
                commands: {
                    fastForward: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                    rewind: Command<TypeFromFields<{
                        audioAdvanceUnmuted: OptionalFieldType<(...)>;
                    }>, TypeFromFields<{
                        data: OptionalFieldType<(...)>;
                        status: FieldType<(...)>;
                    }>, any>;
                };
            };
            flags: {
                variableSpeed: true;
            };
        }];
        features: {
            advancedSeek: BitFlag;
            audioAdvance: BitFlag;
            audioTracks: BitFlag;
            textTracks: BitFlag;
            variableSpeed: BitFlag;
        };
        id: 1286;
        name: "MediaPlayback";
        revision: 2;
    }>, SelectionT>