Ticket #13535 (closed patch: fixed)
Support addition and removal of media session from running call
| Reported by: | haakon | Owned by: | Maiku |
|---|---|---|---|
| Milestone: | 2.8.0 | Component: | Voice and Video |
| Version: | 2.7.11 | Keywords: | add remove media session |
| Cc: |
Description
Motivation
Some VoIP clients allow to dynamically add or remove media sessions from running call. For example in Empathy it is possible to start Jabber voice call, later turn on webcam to add video and remove it again at any time. Same applies to VoIP application in Maemo 5 running on N900 internet tablet and many others. It would be nice to have proper support for these usage scenarios also in Pidgin, when communicating with clients having such capabilities.
Scope of patches
This set of patches attempts to implement the base support for dynamic addition and removal of sessions in the core libpurple media code and adapt Pidgin's call UI to create needed widgets when session is added and properly destroy them when session terminates.
It was developed and tested in conjunction with 3rd party Sipe plugin, with intention to be usable also by other protocols in mind.
Implementation details
purple_media_dynamic_av.patch enhances libpurple and allows to remove a media session while the call is still running. Upon a change state signal announcing transition to PURPLE_MEDIA_STATE_END, affected Farsight backend streams and sessions are unreferenced and GStreamer elements created for the session are cleaned up from pipeline. In previous implementation, this was done only when the whole call terminated.
There were some bugs in Farsight2 that did not allow to properly remove FsRtpSession? and FsRtpStream? from the conference, resolved in Farsight2 0.0.26. Those were:
- https://bugs.freedesktop.org/show_bug.cgi?id=34580
- https://bugs.freedesktop.org/show_bug.cgi?id=34582
pidgin_ui_dynamic_av.patch implements removal of audio level meters and video picture boxes for sessions that were terminated. Also ensures only one 'Pause' and 'Hold' button per conference, they were created whenever new session was added.
Code was successfully tested with Sipe, I tried also jabber with Empathy and Maemo, but call terminates with "unsupported-applications" reason, so it seems some support within XMPP plugin is needed (I am not enough familiar with XMPP protocol to implement this correctly).
Possibilities for further enhancements
- Support in other protocol plugins than Sipe
- Pidgin user itself should be able to dynamically add and remove at least webcam video (buttons in UI to turn on camera, ...)



