This commit introduces a new RTP transport model,
based on the AmRtpTransport abstraction, providing a more modular and
efficient approach to RTP handling compared to the legacy model.
General things:
- Introduction of new RTP receiver and transport abstractions
- The new model coexists with the legacy RTP handling
to preserve backward compatibility
Architecture overview:
- A new AmRtpTransport layer is introduced to encapsulate RTP transport logic
and decouple it from AmRtpStream and session-level code
- Transport-specific functionality is implemented via dedicated classes:
- AmRtpTransport: base abstraction responsible for RTP/RTCP packet flow,
lifecycle management, and interaction with streams
- AmRtpUdpSocket: UDP-based RTP socket implementation
- AmRtpSocketPair: manages RTP/RTCP socket pairs and their coordination
- AmRtpStream is refactored to rely on the transport interface
instead of directly managing sockets and low-level I/O
Integration details:
- SIP session and dialog logic (AmSession, AmSipDialog) is updated to work with
the new transport model
- SBC call legs and call profiles are extended to support transport selection
and lifecycle handling
- SDP processing (AmSdp) is updated to reflect transport capabilities and
address handling changes
This refactoring improves separation of concerns, reduces coupling between RTP
streaming and transport mechanics, and provides a cleaner foundation for future
RTP extensions and optimizations.
Code provenance and license:
- part of the code was written by Fokus GmbH
- part of the code was written by Sipwise GmbH
- part of the code base copyrighted by Fokus GmbH was provided by them in
the form of backports under the GPL license.
- these changes are covered by the GPL, matching the existing project license
Change-Id: I313c4abd9b54f805c1e668c019cf6fb8c4a9e46d
Cover the whole conditioning with the lock,
because otherwise two threads competing on execution
can suddenly come across the `(m_playout_type != type)` getting
true (for both) and one of them by acquiring the lock can potentially
manage to modify that, what can actually make `(m_playout_type != type)`
not true anymore for the other thread in race condition here.
Change-Id: Ie352da10a515837efc696063837b70dc2c9a304d
Add missing initialisers and fix order.
In some cases the member was actually unused and could just be removed.
Change-Id: I0f0c927eb8271c35dcfd371f225847f62bea2812
Warned-by: Coverity
Eliminate the `auto_ptr` usage for core/* ,
since this pointer type has been deprecated in C++11.
Use, as recommended, `unique_ptr` instead.
Change-Id: I352e03bd0c8401d9a4890d8a1845913e4c22dab3
- a codec may export with CODEC_WITH_FMT also a payload format negotiation function
negotiate_fmt
- transcoder adds fmt strings to transcoder codecs
- changed codec fmt_description such that the codec returns a pointer to a
description array
Conflicts:
core/plug-in/amr/amr.c
core/plug-in/speex/speex.c
(real ticket number: TT#13019)
Change-Id: I47a18a8ba13fa3c3a693f7ed6ae7f614237480d6
o SEMS-7: RTP extension headers may be ignored if ignore_rtpxheaders=yes set in config file
o if changing payload type fails, packet will not be processed
o minor code beautification and comments added/corrected
git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@418 8eb893ce-cfd4-0310-b710-fb5ebe64c474
in the RTP stream. It is possible to disable this new behaviour using
single_codec_in_ok parameter in the sems.conf.
Developed by: Sippy Software, Inc.
Sponsored by: Digifonica Canada Limited
git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@279 8eb893ce-cfd4-0310-b710-fb5ebe64c474
Adaptive jitter buffer can be compiled in instead by making with
WITH_ADAPTIVE_JITTERBUFFER=yes
(e.g. WITH_ADAPTIVE_JITTERBUFFER=yes make all)
Echo application switches with the star key the adaptive playout on and off.
git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@225 8eb893ce-cfd4-0310-b710-fb5ebe64c474
Changes
-------
1. Make the AmJitterBuffer work with variable size RTP packets. Packet size
can be changed even during session (ex. Cisco in fax passthrough mode). Also
several improvements and fixes have been made to resyncronization logic.
2. Fix made to the AmPlayoutBuffer class to avoid reading chunks of size
larger than requested. This is required in cases when RTP packets contain
more or less data than internal frame size.
3. Small fix to AmRtpPacket class - replace the pointer to internal buffer
with offset in the buffer. This eliminates the nesessity to reparse the
packet each time the packet has been copied.
4. Replace the sample size field in amci_codec_t structure with two
functions - sampes2bytes and bytes2samples as that field did not allow to
specify sample size for LBR codecs (iLBC, gsm). This also brings ability
for codecs to determine the sample size at runtime (ex. iLBC).
5. Remove the sample size from amci_file_desc_t structure as it was used as
internal attribute of WAV files only and doesn't make much sense for other
file formats. Use the codec's ability to calculate sample size instead.
6. Parameter list for amci_inoutfmt_t.on_close() has been changed to give
ability to determine sample size in this file handler (WAV write_header
procedure requires this).
7. Fix gsm, ilbc, wav plugins and AmPlugin.c to reflect changes to amci.
Add corresponding samples2bytes and bytes2samples functions.
Caveats
--------
1. AmAdaptivePlayout class needs additional checking with RTP streams with
packets containing number of samples different from internal frame size
(for example 240 samples per packet in G711). Adaptive playout class
potentially may produce big packets of audio and therefore make the Conference
application work badly. The adaptive playout is used in Conference application
only and the application is working fine now with jitter buffer and without
adaptive playout. So I turned the adaptive playout off in the Conference app
as a workaround.
Developed by: Sippy Software, Inc.
Sponsored by: Digifonica Canada Limited
git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@185 8eb893ce-cfd4-0310-b710-fb5ebe64c474
module don't work very well on public networks with variable delay and jitter.
Still WiP, but should provide significant improvement over the current
behaviour.
Developed by: Sippy Software, Inc.
Sponsored by: Digifonica Canada Limited
git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@156 8eb893ce-cfd4-0310-b710-fb5ebe64c474
this would have cause SEMS to stop send any packets
after about 7 days.
* adds a simple playout buffer for application which do
not need adaptive playout (voicemail, annoucement, ...).
git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@51 8eb893ce-cfd4-0310-b710-fb5ebe64c474