Opened 8 years ago

Closed 8 years ago

Last modified 8 years ago

#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



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:

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, ...)

Attachments (2)

purple_media_dynamic_av.patch (7.1 KB) - added by haakon 8 years ago.
Remove Farsight/GStreamer elements on session and stream end
pidgin_ui_dynamic_av.patch (9.6 KB) - added by haakon 8 years ago.
Adapt Pidgin UI for stream removal

Download all attachments as: .zip

Change History (5)

Changed 8 years ago by haakon

Remove Farsight/GStreamer elements on session and stream end

Changed 8 years ago by haakon

Adapt Pidgin UI for stream removal

comment:1 Changed 8 years ago by Robby

  • Milestone set to Patches Needing Review

comment:2 Changed 8 years ago by jakub.adam@…

  • Milestone changed from Patches Needing Review to 2.8.0
  • Resolution set to fixed
  • Status changed from new to closed

(In b4483070b354d952ab54dc0468ca2376fe04a8d6):
Adapt the Pidgin UI to correctly handle dynamic addition and removal of streams (sessions) during an active call. Fixes #13535.

comment:3 Changed 8 years ago by rekkanoryo@…

(In 39f808018ae008a3703aa5aaa95658ba1da8d10f):
ChangeLog Jakub's patches. Refs #13535, #13537.

Note: See TracTickets for help on using tickets.
All information, including names and email addresses, entered onto this website or sent to mailing lists affiliated with this website will be public. Do not post confidential information, especially passwords!