summaryrefslogtreecommitdiff
path: root/docs/multi-party-negotiation.txt
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.co.uk>2008-01-07 18:03:34 -0500
committerOlivier CrĂȘte <olivier.crete@collabora.co.uk>2008-01-07 18:03:34 -0500
commit500995239cc65776d6e3e31c80ecb763c47ded8b (patch)
tree6436c1423170ac12793d728dc9f5ddb542fde479 /docs/multi-party-negotiation.txt
parent021ad1469395da8eed23655cb26f42605d6b1564 (diff)
downloadfarstream-500995239cc65776d6e3e31c80ecb763c47ded8b.tar.gz
Add explanation of the behavior for multi-party codec negotiation
Diffstat (limited to 'docs/multi-party-negotiation.txt')
-rw-r--r--docs/multi-party-negotiation.txt36
1 files changed, 36 insertions, 0 deletions
diff --git a/docs/multi-party-negotiation.txt b/docs/multi-party-negotiation.txt
new file mode 100644
index 00000000..fc69ea0d
--- /dev/null
+++ b/docs/multi-party-negotiation.txt
@@ -0,0 +1,36 @@
+Codec negotiation for multi-party conferencing
+----------------------------------------------
+
+
+RTP multi-party conferencing requires that all parties use the same list of codecs. There are three ways to ensure that.
+
+- Have a static pre-determined list of codecs and use it on all
+ clients
+
+- Negotiate a common list in a centralised manner
+
+- Negotiated the common list in a decentralized manner
+
+Farsight 2 supports the first two techniques, but not the third (which
+is a lot more complicated and error-prone).
+
+To use technique one, one just needs to call
+fs_stream_set_remote_codecs() with the same list of codecs on all
+streams (actually, on at least one stream per session).
+
+To use the second technique, one must designate a Focus, which will
+generate the list that every one node will use.
+
+The non-focus nodes will send their list of codecs to the Focus and
+accept whatever the focus sends them as a reply (and use that).
+
+The focus node will first receive a list of codecs from a node, and it
+will perform the normal negotiation (prefering the remote payload
+type), but when a second FsStream is added to the FsSession, the
+behavior of the codec negotiation changes and the only effect of
+setting remote codecs from other nodes will be to reduce the possible
+codecs to the common set (ie the intersection). If there is no
+intersection between the current pool of codecs (from the negotiation
+with the previous nodes) and the codecs added by a new participant in
+the session, this participant will be rejected and
+_set_remote_codecs() will fail.