Prosody + Jingle/COLIBRI = multimedia MUC!
otalk / mod_muc_focus Goto Github PK
View Code? Open in Web Editor NEWProsody + Jingle/COLIBRI = multimedia MUC!
Prosody + Jingle/COLIBRI = multimedia MUC!
sending a source-remove and a session-terminate from the same callback does not make much sense.
currently not handled.
apparently the destroy_conference lingering can trigger when everyone has left the room already. Need to check.
looks like some of the namespaces are registered globally?!
raw:incoming <iq id='0e21b299-5f41-432c-823e-9b4635a77b61' type='result' to='db6833d7-ec9b-4808-b0f0-c8c850b041b1@.../1f787b31-1294-43fb-91a0-1ebf8e4c73bb' from='...'><query xmlns='http://jabber.org/protocol/disco#info'><identity type='im' name='Prosody' category='server'/><feature var='http://jitsi.org/protocol/colibri'/><feature var='urn:xmpp:jingle:1'/><feature var='urn:xmpp:jingle:transports:ice-udp:1'/><feature var='urn:xmpp:jingle:apps:rtp:1'/><feature var='urn:xmpp:jingle:apps:dtls:0'/><feature var='http://jabber.org/protocol/commands'/><feature var='jabber:iq:roster'/><feature var='urn:xmpp:time'/><feature var='jabber:iq:time'/><feature var='jabber:iq:last'/><feature var='urn:xmpp:ping'/><feature var='jabber:iq:version'/><feature var='urn:xmpp:jidprep:0'/><feature var='http://jabber.org/protocol/disco#info'/><feature var='http://jabber.org/protocol/disco#items'/><feature var='msgoffline'/></query></iq>
See jitsi/jitsi-meet@05e0454
-- id is now preferred over endpoint.
currently the focus assumes every participant has a session. This isn't always true and some actions (and some counting) needs to be done based on whether a participants has a session
seen today on beta.talky.io
May 15 16:02:28 mod_websocket debug Websocket received: <iq xmlns="jabber:client" to="[email protected]" type="set" id="1bea51a5-6223-4892-a8bc-dff792539417"><jingle xmlns="urn:xmpp:jingle:1" sid="1b7d5fce9a1a6015" action="session-info"><mute xmlns="urn:xmpp:jingle:apps:rtp:info:1" creator="initiator" name="audio"/><mediastream xmlns="http://andyet.net/xmlns/mmuc" msid="tkNx0DVjMXI59rs8inCAtNn9LCCKStWNYdfE"/></jingle></iq> (384 bytes)
May 15 16:02:28 c2s26e0c20 error Traceback[c2s]: .../lib/prosody/modules/mod_muc_focus/mod_muc_focus.lua:854: attempt to index local 'msids' (a nil value)
stack traceback:
.../lib/prosody/modules/mod_muc_focus/mod_muc_focus.lua:854: in function '?'
/usr/lib/prosody/util/events.lua:67: in function 'fire_event'
/usr/lib/prosody/core/stanza_router.lua:187: in function 'core_post_stanza'
/usr/lib/prosody/core/stanza_router.lua:135: in function 'core_process_stanza'
/usr/lib/prosody/modules/mod_c2s.lua:236: in function 'func'
/usr/lib/prosody/util/async.lua:88: in function </usr/lib/prosody/util/async.lua:86>
The conference is currently not disposed when sending the jingle session-terminate. This could be done -- worst case by setting all the channels expire to 0.
@emcho is there a way to explicitly destroy a conference?
Since making the minimum number of participants configurable in 079528c the following scenario can happen:
A, B, C are in a conference. C reloads the browser.
What currently happens is that the focus terminates the conference, A and B establish a P2P session, C joins, focus makes a new conference, P2P session between A and B gets terminated.
That is clearly suboptimal. It would be better to allow the conference to linger in this state for ~30 seconds. Start a call-out where the termination currently happens, check the number of participants in the timeout.
just saw this with jvb-564:
2015-11-09 17:09:18.731 SEVERE: [112] org.jitsi.impl.neomedia.transform.dtls.DtlsControlImpl.error() Failed to verify and/or validate a certificate offered over the media path against fingerprints declared over the signaling path! No fingerprints declared over the signaling path!
2015-11-09 17:09:18.732 SEVERE: [112] org.jitsi.impl.neomedia.transform.dtls.TlsServerImpl.error() Failed to verify and/or validate client certificate!
java.io.IOException: No fingerprints declared over the signaling path!
I'm pretty sure I signal the client fingerprint. But before, the bridge was never checking this so this might have gone unnoticed.
see https://github.com/bjc/prosody/blob/master/plugins/mod_pep.lua#L260 for a server-side caps cache (caching is not strictly required but...)
the reliable way to measure a call length is to measure the time between creating the conference creation and the session terminate. That's useful for logging purposes.
I hear @bgrozev has something awesome almost working which needs to be mapped as well.
it seems the rejoin is broken since keeping stuff by nick...
hook muc-config-form and muc-config-submitted -- see persistent.lib.lua in muc/
for video channels, set last-n to the number of channels and adaptive-last-n and adaptive-simulcast to true.
Particularly important for mobile clients.
see persistent.lib.lua as well
When receiving a session-terminate the focus needs to expire the channels on the bridge
Currently, when a member source-adds after the initial accept, the array of sources in participants to sources is overwritten with just the new sources (
mod_muc_focus/mod_muc_focus.lua
Line 1046 in 21d0f9f
Instead, the sources should be added to the table(s) for the participant.
Similarly, when removing streams the ssrc's should be removed so they are not incorrectly sent to future participants.
several data structures are kept with the participants real jid (i.e. stanza.attr.from) in handle_jingle. Probably should not be done that way.
since some of the tables are based on the occupants nickname, nick changes need to be handled.
https://github.com/stpeter/mod_muc_focus/blob/master/mod_muc_focus.lua#L225
currently requires a mod_muc which adds stanza and jid to the event.
The stanza is not used even and @daurnimator suggests there is a better way to get the jid.
the bridge can now send <rtcp-mux/> inside of transport which can be mapped to jingle
Needs to check that a source was actually present, or else an empty source-remove is sent.
we don't want clients to add or remove msid in in their presence.
to be spec'ed. I think we will use the msid as endpoint.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.