Ticket #13535 (closed patch: fixed)

Opened 11 months ago

Last modified 11 months ago

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:

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

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

Change History

Changed 11 months ago by haakon

Remove Farsight/GStreamer elements on session and stream end

Changed 11 months ago by haakon

Adapt Pidgin UI for stream removal

Changed 11 months ago by Robby

  • milestone set to Patches Needing Review

Changed 11 months ago by jakub.adam@…

  • status changed from new to closed
  • resolution set to fixed
  • milestone changed from Patches Needing Review to 2.8.0

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

Changed 11 months 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!