跳转到内容

ak.profile.media_service_binding.livekit.v1

← Profiles

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."
}

Source