ak.profile.media_service_binding.livekit.v1
ak.profile.media_service_binding.livekit.v1
role
"server" description
"LiveKit backend binding sub-profile. Maps Arkret token_exchange to LiveKit JWT claims, SFrame-based E2EE via inject_frame_key, capability mapping to video.canPublishSources, and Egress-based recording through Arkret blob pipeline. Declaring this sub-profile requires declaring ak.profile.media_service_binding.v1. Optional in v1 cycle; not part of v1 mandatory conformance set. See zh/crypto-media/bindings/livekit.md." enforcement_phases
[
"conformance",
"startup_claim_guard"
] operation_requirements
[
{
"direction": "provide",
"operation_id": "ak.self.call.media.exchange.issue_token.v1",
"binding_kind": "http_json"
}
] depends_on
[
"ak.profile.media_service_binding.v1"
] required_profiles
[
"ak.profile.media_service_binding.v1"
] required_event_kinds
[
"ak.realm.media_service",
"ak.call.state"
] rejected_event_kinds
[] required_schemas
[
"ak.schema.event.v1"
] required_fixtures
[
"privacy-security-fixture.json"
] optional_extensions
[
"livekit_egress_recording",
"livekit_cloud_sfu_mesh"
] feature_discovery
{
"required": [
"livekit_jwt_claim_set",
"livekit_sframe_keyprovider"
],
"unsupported_optional": "MUST fail closed; do not fall back to a non-production binding. Deployments needing an alternate backend MUST declare another production-grade media_service_binding sub-profile."
} additional_requirements
{
"livekit_metadata_ban_must": "Token issuer MUST NOT inject LiveKit metadata or canUpdateOwnMetadata claims; Arkret participant metadata strands through ak.call.state only.",
"livekit_recorder_claim_must": "Token issuer MUST set video.recorder=false; recording goes through Arkret Egress proxy, not LiveKit recorder claim."
}