Media 0.1.0-alpha.29
Direct calls, meetings, large audio stages, and screen sharing for independent web environments.
اعتماد و موارد اعلامشده
- کلاس اجرا
trusted_library— آداپتر فرانتاند در قلمروJavaScriptمحیط میزبان اجرا میشود و محیط ایزوله یاsandboxنیست.- مجوزهای پلتفرم
identity:readprofile:readsettings:readsettings:writeplugin-grant:request- سازگاری
- قراردادها
^0.1.0-alpha.1· SDK^0.1.0-alpha.1 - مجوز نرمافزار
- MIT
آداپترهای فرانتاند
- react — محیط اجرا
reactو مسیر خروجی.است.خروجیهای نامدار:createMediaV2Runtime،mediaV2ProblemMessageFa،mediaV2MicrophoneMessageFa،mediaV2PlaybackMessageFa،mediaV2TransportMessageFa،mediaV2BootstrapMessageFa،mediaV2SelfMember،mediaV2IsJoined،mediaV2IsModerator،mediaV2ActiveMembers،mediaV2PendingSpeakerOfferForSelf،mediaV2RaisedHandQueue،mediaV2MicrophoneButton،mediaV2CallableActorKeySet،mediaV2RecoveryOffer،MediaV2RuntimeProvider،useMediaV2،mediaPluginManifest،MediaV2ClientMessageSchema،MediaV2ServerMessageSchema،MediaSpacePolicyV2Schema،MediaEnvironmentConfigV2Schema،MediaV2ActionError،mediaV2AudioGate،mediaV2MediaTransportMessageFa،mediaV2ConnectionQualityMessageFaقابلیتها:media:direct-call،media:meeting،media:stage،media:screen-share
نیازمندیهای مرورگر
- microphone (اختیاری) — Requested only when the participant chooses to speak.
- display-capture (اختیاری) — Requested only when the participant explicitly starts screen sharing.
دسترسی شبکه
Authenticated control traffic and self-hosted LiveKit WebRTC media transport.
https://media.al-amr.comwss://rtc.al-amr.com
شیوهٔ استفاده از داده
- دادههای جمعآوریشده
- pairwise plugin actor، authoritative display profile، environment and scope، session membership، connection diagnostics
- دادههای اشتراکی
- هیچکدام
- نگهداری
- Invitations and session state are ephemeral. Security audit events follow platform retention policy. Media is not recorded or transcribed, and Media does not collect movement or position data.
- سیاست حریم خصوصی
- مشاهدهٔ سیاست
مجوزهای کوتاهعمر بکاند
- Media control plane:
media:connectmedia:direct-callmedia:join-spacemedia:request-speakmedia:publish
اسنپشات انتشار
{
"contractVersion": "0.1.0-alpha.1",
"pluginId": "plg_media",
"publisher": {
"id": "pub_fcb267e3-08ca-4755-9fe0-ceb6142544cd",
"handle": "al-amr-technical"
},
"slug": "media",
"name": "Media",
"version": "0.1.0-alpha.29",
"shortDescription": "Direct calls, meetings, large audio stages, and screen sharing for independent web environments.",
"category": "communication",
"kind": "full_stack",
"runtimeClass": "trusted_library",
"frontendAdapters": [
{
"id": "react",
"runtime": "react",
"exportPath": ".",
"exports": [
"createMediaV2Runtime",
"mediaV2ProblemMessageFa",
"mediaV2MicrophoneMessageFa",
"mediaV2PlaybackMessageFa",
"mediaV2TransportMessageFa",
"mediaV2BootstrapMessageFa",
"mediaV2SelfMember",
"mediaV2IsJoined",
"mediaV2IsModerator",
"mediaV2ActiveMembers",
"mediaV2PendingSpeakerOfferForSelf",
"mediaV2RaisedHandQueue",
"mediaV2MicrophoneButton",
"mediaV2CallableActorKeySet",
"mediaV2RecoveryOffer",
"MediaV2RuntimeProvider",
"useMediaV2",
"mediaPluginManifest",
"MediaV2ClientMessageSchema",
"MediaV2ServerMessageSchema",
"MediaSpacePolicyV2Schema",
"MediaEnvironmentConfigV2Schema",
"MediaV2ActionError",
"mediaV2AudioGate",
"mediaV2MediaTransportMessageFa",
"mediaV2ConnectionQualityMessageFa"
],
"capabilities": [
"media:direct-call",
"media:meeting",
"media:stage",
"media:screen-share"
],
"peerDependencies": {
"react": ">=18"
},
"semanticPorts": {
"provides": [],
"requires": []
}
}
],
"backendComponents": [
{
"id": "control",
"name": "Media control plane",
"protocol": "websocket",
"protocolArtifactId": "media-v2-data-plane",
"hostCallbacks": [
{
"id": "publisher-authority",
"description": "Asks the owning Environment backend whether the scope-bound actor may publish in a configured Media space.",
"target": "environment_backend",
"endpointConfigPointer": "/spaces/*/policy/roleAuthorityUrl",
"protocolArtifactId": "publisher-authority-api",
"operationId": "authorizePublisher",
"authorization": {
"kind": "forwarded_plugin_grant",
"requiredScopes": [
"media:publish"
],
"location": "json_body",
"field": "grant"
},
"timeoutMs": 2000,
"maxResponseBytes": 4096,
"redirectPolicy": "error",
"failureMode": "deny"
}
],
"capabilities": [
"call:signaling",
"space:membership",
"media:authorization",
"moderation"
],
"grantScopes": [
"media:connect",
"media:direct-call",
"media:join-space",
"media:request-speak",
"media:publish"
],
"contextSchema": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 96,
"pattern": "^[A-Za-z0-9][A-Za-z0-9:_-]{0,95}$"
}
},
"required": [
"scope"
],
"additionalProperties": false
},
"limits": {
"maxConcurrentSessions": 1,
"maxParticipantsPerContext": 150,
"maxMessageBytes": 16384,
"requestsPerMinute": 600
}
}
],
"protocolArtifacts": [
{
"id": "media-v2-data-plane",
"kind": "asyncapi",
"specificationVersion": "3.0.0",
"path": "./protocol/media-v2.asyncapi.json",
"digest": "sha256:65a7407f65fedb42a32d93e61d5406473816653b6d8aa73edf39378f4e4327cc",
"mediaType": "application/vnd.aai.asyncapi+json"
},
{
"id": "publisher-authority-api",
"kind": "openapi",
"specificationVersion": "3.1.0",
"path": "./protocol/publisher-authority.openapi.json",
"digest": "sha256:db7cb99f3b43fe3e71a8d5849597eb4529fa7a877231e0357ba56d6b8db613ff",
"mediaType": "application/vnd.oai.openapi+json"
}
],
"settings": {
"schemaVersion": "1.0.0",
"type": "object",
"properties": {
"volume": {
"title": "Volume",
"x-al-amr-scopes": [
"plugin_default",
"user",
"user_environment"
],
"type": "number",
"default": 0.8,
"minimum": 0,
"maximum": 1,
"multipleOf": 0.05
},
"defaultMuted": {
"title": "Join muted",
"x-al-amr-scopes": [
"plugin_default",
"user",
"user_environment"
],
"type": "boolean",
"default": true
},
"inputDeviceId": {
"title": "Input device",
"x-al-amr-scopes": [
"session"
],
"type": "string",
"maxLength": 512
},
"outputDeviceId": {
"title": "Output device",
"x-al-amr-scopes": [
"session"
],
"type": "string",
"maxLength": 512
}
},
"additionalProperties": false
},
"environmentConfigSchema": {
"title": "Media installation configuration",
"description": "Media v2 policies keep interaction mode, capacity, floor control, screen sharing, encryption, reconnection, and spatial audio explicit per space. Registry validates this bounded structural schema and the Media service applies the stricter cross-field policy contract.",
"type": "object",
"properties": {
"spaces": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"pattern": "^[a-z][a-z0-9_-]{0,79}$"
},
"policy": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"stage",
"meeting"
],
"maxLength": 16
},
"raiseHand": {
"type": "string",
"enum": [
"disabled",
"enabled"
],
"maxLength": 8
},
"encryption": {
"type": "string",
"enum": [
"transport",
"sfu_blind"
],
"maxLength": 10
},
"guestPolicy": {
"type": "string",
"enum": [
"account_required",
"allowed"
],
"maxLength": 16
},
"screenShare": {
"type": "string",
"enum": [
"disabled",
"owners",
"speakers"
],
"maxLength": 8
},
"floorControl": {
"type": "string",
"enum": [
"fixed",
"moderated",
"open"
],
"maxLength": 16
},
"spatialAudio": {
"type": "string",
"enum": [
"disabled",
"distance_attenuation"
],
"maxLength": 20
},
"screenProfile": {
"type": "string",
"enum": [
"slides",
"motion"
],
"maxLength": 8
},
"maxParticipants": {
"type": "integer",
"minimum": 2,
"maximum": 150
},
"maxSpeakerSeats": {
"type": "integer",
"minimum": 1,
"maximum": 16
},
"roleAuthorityUrl": {
"type": "string",
"maxLength": 2048
},
"reconnectGraceSeconds": {
"type": "integer",
"minimum": 5,
"maximum": 120
}
},
"required": [
"mode",
"maxParticipants",
"maxSpeakerSeats",
"floorControl",
"raiseHand",
"screenShare",
"guestPolicy",
"encryption",
"reconnectGraceSeconds"
],
"additionalProperties": false
}
},
"required": [
"id",
"policy"
],
"additionalProperties": false
},
"maxItems": 64
},
"directCalls": {
"type": "object",
"properties": {
"policy": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"const": "direct_call",
"maxLength": 16
},
"raiseHand": {
"type": "string",
"const": "disabled",
"maxLength": 8
},
"encryption": {
"type": "string",
"const": "sfu_blind",
"maxLength": 10
},
"guestPolicy": {
"type": "string",
"enum": [
"account_required",
"callee_only"
],
"maxLength": 16
},
"screenShare": {
"type": "string",
"const": "disabled",
"maxLength": 8
},
"floorControl": {
"type": "string",
"const": "open",
"maxLength": 16
},
"spatialAudio": {
"type": "string",
"const": "disabled",
"maxLength": 20
},
"maxParticipants": {
"type": "integer",
"const": 2
},
"maxSpeakerSeats": {
"type": "integer",
"const": 2
},
"roleAuthorityUrl": {
"type": "string",
"maxLength": 2048
},
"reconnectGraceSeconds": {
"type": "integer",
"minimum": 5,
"maximum": 120
}
},
"required": [
"mode",
"maxParticipants",
"maxSpeakerSeats",
"floorControl",
"raiseHand",
"screenShare",
"guestPolicy",
"encryption",
"reconnectGraceSeconds"
],
"additionalProperties": false
},
"enabled": {
"type": "boolean"
}
},
"required": [
"enabled"
],
"additionalProperties": false
}
},
"required": [
"directCalls"
],
"additionalProperties": false
},
"platformPermissions": [
"identity:read",
"profile:read",
"settings:read",
"settings:write",
"plugin-grant:request"
],
"browserRequirements": [
{
"name": "microphone",
"reason": "Requested only when the participant chooses to speak.",
"required": false
},
{
"name": "display-capture",
"reason": "Requested only when the participant explicitly starts screen sharing.",
"required": false
}
],
"networkAccess": {
"origins": [
"https://media.al-amr.com",
"wss://rtc.al-amr.com"
],
"reason": "Authenticated control traffic and self-hosted LiveKit WebRTC media transport."
},
"dataHandling": {
"collected": [
"pairwise plugin actor",
"authoritative display profile",
"environment and scope",
"session membership",
"connection diagnostics"
],
"shared": [],
"retention": "Invitations and session state are ephemeral. Security audit events follow platform retention policy. Media is not recorded or transcribed, and Media does not collect movement or position data.",
"privacyPolicyUrl": "https://developer.al-amr.com/legal/privacy"
},
"compat": {
"contracts": "^0.1.0-alpha.1",
"sdk": "^0.1.0-alpha.1"
},
"documentation": {
"canonicalUrl": "https://developer.al-amr.com/plugins/al-amr/media",
"integrationUrl": "https://developer.al-amr.com/plugins/al-amr/media/integration.md",
"repositoryUrl": "https://github.com/al-amr/al-amr/tree/main/plugins/media",
"license": "MIT"
}
}