mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-10-01 11:49:51 -04:00
Add version 0 of the VoIP specification.
This commit is contained in:
parent
3578046101
commit
9c82276760
@ -1122,18 +1122,103 @@ Typing notifications
|
|||||||
|
|
||||||
Voice over IP
|
Voice over IP
|
||||||
=============
|
=============
|
||||||
.. NOTE::
|
Matrix can also be used to set up VoIP calls. This is part of the core specification,
|
||||||
This section is a work in progress.
|
although is still in a very early stage. Voice (and video) over Matrix is based on
|
||||||
|
the WebRTC standards.
|
||||||
|
|
||||||
|
Call events are sent to a room, like any other event. This means that clients
|
||||||
|
must only send call events to rooms with exactly two participants as currently
|
||||||
|
the WebRTC standard is based around two-party communication.
|
||||||
|
|
||||||
|
Events
|
||||||
|
------
|
||||||
|
``m.call.invite``
|
||||||
|
This event is sent by the caller when they wish to establish a call.
|
||||||
|
|
||||||
|
Required keys:
|
||||||
|
- ``call_id`` : "string" - A unique identifier for the call
|
||||||
|
- ``offer`` : "offer object" - The session description
|
||||||
|
- ``version`` : "integer" - The version of the VoIP specification this message
|
||||||
|
adheres to. This specification is version 0.
|
||||||
|
|
||||||
|
Optional keys:
|
||||||
|
None.
|
||||||
|
Example:
|
||||||
|
``{ "version" : 0, "call_id": "12345", "offer": { "type" : "offer", "sdp" : "v=0\r\no=- 6584580628695956864 2 IN IP4 127.0.0.1[...]" } }``
|
||||||
|
|
||||||
|
``Offer Object``
|
||||||
|
Required keys:
|
||||||
|
- ``type`` : "string" - The type of session description, in this case 'offer'
|
||||||
|
- ``sdp`` : "string" - The SDP text of the session description
|
||||||
|
|
||||||
|
``m.call.candidate``
|
||||||
|
This event is sent by callers after sending an invite and by the callee after answering.
|
||||||
|
Its purpose is to give the other party an additional ICE candidate to try using to
|
||||||
|
communicate.
|
||||||
|
|
||||||
|
Required keys:
|
||||||
|
- ``call_id`` : "string" - The ID of the call this event relates to
|
||||||
|
- ``version`` : "integer" - The version of the VoIP specification this messages
|
||||||
|
adheres to. his specification is version 0.
|
||||||
|
- ``candidate`` : "candidate object" - Object describing the candidate.
|
||||||
|
|
||||||
|
``Candidate Object``
|
||||||
|
|
||||||
|
Required Keys:
|
||||||
|
- ``sdpMid`` : "string" - The SDP media type this candidate is intended for.
|
||||||
|
- ``sdpMLineIndex`` : "integer" - The index of the SDP 'm' line this
|
||||||
|
candidate is intended for
|
||||||
|
- ``candidate`` : "string" - The SDP 'a' line of the candidate
|
||||||
|
|
||||||
|
``m.call.answer``
|
||||||
|
|
||||||
|
Required keys:
|
||||||
|
- ``call_id`` : "string" - The ID of the call this event relates to
|
||||||
|
- ``version`` : "integer" - The version of the VoIP specification this messages
|
||||||
|
- ``answer`` : "answer object" - Object giving the SDK answer
|
||||||
|
|
||||||
|
``Answer Object``
|
||||||
|
|
||||||
|
Required keys:
|
||||||
|
- ``type`` : "string" - The type of session description. 'answer' in this case.
|
||||||
|
- ``sdp`` : "string" - The SDP text of the session description
|
||||||
|
|
||||||
|
``m.call.hangup``
|
||||||
|
Sent by either party to signal their termination of the call. This can be sent either once
|
||||||
|
the call has has been established or before to abort the call.
|
||||||
|
|
||||||
|
Required keys:
|
||||||
|
- ``call_id`` : "string" - The ID of the call this event relates to
|
||||||
|
- ``version`` : "integer" - The version of the VoIP specification this messages
|
||||||
|
|
||||||
|
Message Exchange
|
||||||
|
----------------
|
||||||
|
A call is set up with messages exchanged as follows:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
Caller Callee
|
||||||
|
m.call.invite ----------->
|
||||||
|
m.call.candidate -------->
|
||||||
|
[more candidates events]
|
||||||
|
User answers call
|
||||||
|
<------ m.call.answer
|
||||||
|
[...]
|
||||||
|
<------ m.call.hangup
|
||||||
|
|
||||||
|
Or a rejected call:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
Caller Callee
|
||||||
|
m.call.invite ----------->
|
||||||
|
m.call.candidate -------->
|
||||||
|
[more candidates events]
|
||||||
|
User rejects call
|
||||||
|
<------- m.call.hangup
|
||||||
|
|
||||||
|
Calls are negotiated according to the WebRTC specification.
|
||||||
|
|
||||||
.. TODO Dave
|
|
||||||
- what are the event types.
|
|
||||||
- what are the valid keys/values. What do they represent. Any gotchas?
|
|
||||||
- In what sequence should the events be sent?
|
|
||||||
- How do you accept / decline inbound calls? How do you make outbound calls?
|
|
||||||
Give examples.
|
|
||||||
- How does negotiation work? Give examples.
|
|
||||||
- How do you hang up?
|
|
||||||
- What does call log information look like e.g. duration of call?
|
|
||||||
|
|
||||||
Profiles
|
Profiles
|
||||||
========
|
========
|
||||||
@ -2116,3 +2201,4 @@ Transaction:
|
|||||||
.. _/join/<room_alias_or_id>: /docs/api/client-server/#!/-rooms/join
|
.. _/join/<room_alias_or_id>: /docs/api/client-server/#!/-rooms/join
|
||||||
|
|
||||||
.. _`Event Stream`: /docs/api/client-server/#!/-events/get_event_stream
|
.. _`Event Stream`: /docs/api/client-server/#!/-events/get_event_stream
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user