Voice Broadcast (by message chunking) #632
Replies: 5 comments
This comment has been hidden.
This comment has been hidden.
-
To initialize voice broadcast on client side we need the following parameters in the configuration :
|
Beta Was this translation helpful? Give feedback.
-
Suggested defaults:
|
Beta Was this translation helpful? Give feedback.
-
GraveyardOption A - Extensible eventsThe message type of voice broadcast chunks is To inform clients without voice broadcast support that a broadcast will take place, the first chunk message should contain an MSC1767 extensible event Example of a first broadcast chunk: {
"type": "m.voice_broadcast_chunk",
"content": {
"m.text": [
{
"body": "Alice has started a voice broadcast. Unfortunately, your client does not seem to support playback of it."
}
],
"m.voice_broadcast_chunk": {
"sequence": 1
},
"m.relates_to": {
"rel_type": "m.reference",
"event_id": "$voice_broadcast_info_started_event_id",
},
"m.voice_broadcast.file": "…file content as per MSC3551",
"m.voice_broadcast.audio_details": "…file content as per MSC3927"
}
} Example of a subsequent broadcast chunk: {
"type": "m.voice_broadcast_chunk",
"content": {
"m.voice_broadcast_chunk": {
"sequence": 23
},
"m.relates_to": {
"rel_type": "m.reference",
"event_id": "$voice_broadcast_info_started_event_id",
},
"m.voice_broadcast.file": "…file content as per MSC3551",
"m.voice_broadcast.audio_details": "…file content as per MSC3927"
}
}
|
Beta Was this translation helpful? Give feedback.
-
The current implementation has been done according to the following specification: We are using chunks of voice messages to implement the Voice Broadcast feature. It will built on top of MSC3245: Voice Messages and is heavily inspired by MSC3489: Live Location Sharing. A new state event
Every following
Example of a voice message as part of a broadcast:
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
The current implementation based on custom types is described here. This implementation is at the Element application level.
The following is the draft of the MSC3888 which should let be able to implement the same logic at the SDK level:
Is your feature request related to a problem? Please describe.
As a user I want to be able to send a voice broadcast to all users of a room, so that I can easily provide information by just talking. Compared to already existing voice messages it should be possible to listen to voice broadcast at the time they are being recorded. Think of this being a live-podcast over Matrix.
Some use-case scenarios for this feature can be to verbally provide updates, trainings, or talk to a large number of people.
Describe the solution you'd like
This issue proposes using a series of voice messages to implement the Voice Broadcast feature.
A new state event
m.voice_broadcast_info
will be introduced. This state event identifies a broadcast and provides its state, such asstarted
orpaused
. In addition to that this proposal introduces new event typem.voice_broadcast_chunk
with a relation to the state event to mark them as belonging to a specific voice broadcast.The following diagram shows a typical event flow for a voice broadcast:
m.voice_broadcast_info
event example:m.voice_broadcast_info
properties:type
m.voice_broadcast_info
state_key
state
started
a new voice broadcast has been started and is currently being livepaused
stands for a paused broadcast that may be resumedresumed
flags a voice broadcast previously paused as resumedstopped
marks a broadcast as finisheddevice_id
state
isstarted
m.relates_to
state
is notstarted
m.reference
relation to thestarted
m.voice_broadcast_info
state eventlast_chunk_sequence
state
ispaused
orstopped
Every following
m.voice_broadcast_info
should have an MSC3267m.reference
relation to thestarted
state event:This diagram shows the possible
state
transitions:ℹ️ This proposal does not suggest to implement any server-side support to enforce the correct event order. Clients should be robust enough to handle any
state
transition and receive broadcast chunks in any state.The message type of a voice broadcast chunk is
m.voice_broadcast_chunk
. The message content uses theinfo
,file
andurl
properties fromm.audio
m.room.message
events.m.voice_broadcast_chunk
messages that belong to the broadcast will have an MSC3267m.reference
relation to the
started
m.voice_broadcast_info
state event.To inform clients without voice broadcast support that a broadcast will take place, the first chunk message should contain an MSC1767 extensible event
m.text
block.Example of a first broadcast chunk:
Example of a subsequent broadcast chunk:
m.voice_broadcast_chunk
properties:m.relates_to
m.reference
relation to thestarted
m.voice_broadcast_info
state eventinfo
m.audio
url
/file
m.audio
sequence
1
Describe alternatives you've considered
Implementation based on MSC3401: Native Group VoIP Signalling
Implementation based on [MSC4016: Streaming E2EE file transfers with random access]
Streaming file transfer could be relatively easy on the serverside, given Glow exists and works (other than the operational unpleasantness of introducing an entirely new server), but clientside it requires major changes on all three platforms:
Unstable prefixes
While this MSC is unstable, these event types should be used:
m.voice_broadcast_info
org.matrix.msc3888.voice_broadcast_info
m.voice_broadcast_chunk
org.matrix.msc3888.voice_broadcast_chunk
Additional context
Clients could use MSC3912: Relation-based redactions to redact a voice broadcast and all related events.
ℹ️ This discussion describes an intermediate solution to implement voice broadcasts. The final solution will be described in MSC3888.
Beta Was this translation helpful? Give feedback.
All reactions