Add m.call.negotiate
parent
78719b4391
commit
ecb30706bf
@ -0,0 +1,14 @@
|
||||
{
|
||||
"$ref": "core/room_event.json",
|
||||
"type": "m.call.negotiate",
|
||||
"content": {
|
||||
"version" : "1",
|
||||
"party_id": "67890",
|
||||
"call_id": "12345",
|
||||
"lifetime": 10000,
|
||||
"offer": {
|
||||
"type" : "offer",
|
||||
"sdp" : "v=0\r\no=- 6584580628695956864 2 IN IP4 127.0.0.1[...]"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,90 @@
|
||||
---
|
||||
type: object
|
||||
description: |
|
||||
Provides SDP negotiation semantics for media pause, hold/resume, ICE restarts
|
||||
and voice/video call up/downgrading. Clients should implement & honour hold
|
||||
functionality as per WebRTC's recommendation:
|
||||
https://www.w3.org/TR/webrtc/#hold-functionality
|
||||
|
||||
If both the invite event and the accepted answer event have `version` equal
|
||||
to `"1"`, either party may send `m.call.negotiate` with a `description` field
|
||||
to offer new SDP to the other party. This event has `call_id` with the ID of
|
||||
the call and `party_id` equal to the client's party ID for that call. The
|
||||
caller ignores any negotiate events with `party_id` + `user_id` tuple not
|
||||
equal to that of the answer it accepted and the callee ignores any negotiate
|
||||
events with `party_id` + `user_id` tuple not equal to that of the caller.
|
||||
Clients should use the `party_id` field to ignore the remote echo of their
|
||||
own negotiate events.
|
||||
|
||||
This has a `lifetime` field as in `m.call.invite`, after which the sender of
|
||||
the negotiate event should consider the negotiation failed (timed out) and
|
||||
the recipient should ignore it.
|
||||
|
||||
The `description` field is the same as the `offer` field in `m.call.invite`
|
||||
and `answer` field in `m.call.answer` and is an `RTCSessionDescriptionInit`
|
||||
object as per https://www.w3.org/TR/webrtc/#dom-rtcsessiondescriptioninit.
|
||||
|
||||
Once an `m.call.negotiate` event is received, the client must respond with
|
||||
another `m.call.negotiate` event, with the SDP answer (with `"type": "answer"`)
|
||||
in the `description` property.
|
||||
|
||||
This MSC also proposes clarifying the `m.call.invite` and `m.call.answer`
|
||||
events to state that the `offer` and `answer` fields respectively are objects
|
||||
of type `RTCSessionDescriptionInit`. Hence the `type` field, whilst
|
||||
redundant in these events, is included for ease of working with the WebRTC
|
||||
API and is mandatory. Receiving clients should not attempt to validate the
|
||||
`type` field, but simply pass the object into the WebRTC API.
|
||||
allOf:
|
||||
- "$ref": core-event-schema/room_event.yaml
|
||||
properties:
|
||||
content:
|
||||
type: object
|
||||
properties:
|
||||
call_id:
|
||||
type: string
|
||||
description: The ID of the call this event relates to.
|
||||
version:
|
||||
type: integer
|
||||
description: The version of the VoIP specification this message adheres to.
|
||||
This specification is version 1. This field is a string such that experimental
|
||||
implementations can use non-integer versions. This field was an integer
|
||||
in the previous spec version and implementations must accept an integer
|
||||
0.
|
||||
party_id:
|
||||
type: string
|
||||
description: This identifies the party that sent this event. A client may
|
||||
choose to re-use the device ID from end-to-end cryptography for the value
|
||||
of this field.
|
||||
offer:
|
||||
type: object
|
||||
title: Offer
|
||||
description: The session description object
|
||||
properties:
|
||||
type:
|
||||
type: string
|
||||
enum:
|
||||
- offer
|
||||
description: The type of session description.
|
||||
sdp:
|
||||
type: string
|
||||
description: The SDP text of the session description.
|
||||
required:
|
||||
- type
|
||||
- sdp
|
||||
lifetime:
|
||||
type: integer
|
||||
description: The time in milliseconds that the invite is valid for.
|
||||
Once the invite age exceeds this value, clients should discard it.
|
||||
They should also no longer show the call as awaiting an answer in the
|
||||
UI.
|
||||
required:
|
||||
- call_id
|
||||
- version
|
||||
- party_id
|
||||
- offer
|
||||
- lifetime
|
||||
type:
|
||||
type: string
|
||||
enum:
|
||||
- m.call.negotiate
|
||||
|
||||
Loading…
Reference in New Issue