Track audio writes in the mix buffer to set the `active` flag to true
whenever a write occurs, which makes it possible to create the buffer in
an inactivate state and implicitly set it active on demand.
Handle the mix buffer not returning any data in the RTP sending logic
(which is what happens for an inactive buffer) by simply not sending any
packets.
Change-Id: Iaeb0f6deadb3d90020c8c62872735cc94db80504
Similar to the existing media_player, but instead of simply producing
its own standalone output media stream, the audio_player takes over the
entire media stream flowing to the receiver, including media forwarded
from the opposite side of the call, as well as media produced by the
media_player.
Change-Id: Ic34ecf08fc73b04210cfffb1a7d795b462ece5ea
We use next_run.tv_sec as flag to signal shut down of the media player
timer. Don't even call the run function when the timer has already been
shut down.
Change-Id: I68248ce05e368bd17ed1a6d346f125c035d0da07
Return true/false from media player run functions to signal whether
playback is finished and whether codec handlers should be reset.
Change-Id: Ieb2e0861190ad2851d986bae28becc5548e215ce
Extend __make_transcoder_full with a custom callback function to create
the SSRC handlers.
Functional no-op.
Change-Id: I79cfabf6e9758b105a89908f9023bd773b838d9e
Support creating transcoders with different "packet decoded" callback
functions.
Functional no-op.
Change-Id: I49ba720841161999dc0ae166ea0841dc094e8bc7
Split out the parts of __ssrc_handler_transcode_new that are related to
the decoder only, leaving the encoder-related code in a separate
function. Allow re-use of the decoder setup code.
Functional no-op.
Change-Id: Ifb91c388a872a4ca14c0cc4571f4d0578271407f
... as an extra offset for newly added sources, based on the difference
between the last runtime (read time) of the buffer and the current time.
Change-Id: Ie99e24f0697f0950f0fcfa1e5e58b8f4be134018
A simple circular audio buffer that allows mixing multiple sources of
audio. Sources are tracked by SSRC and all sources are expected to
provide audio in the same format (same clock rate, channels, sample
format).
Only one consumer per buffer is supported, which is expected to retrieve
buffered audio at regular intervals (ptime) and so continuously empty
the buffer.
The first audio source to write into the buffer at the leading edge of
the circular buffer has its audio simply copied into the buffer, with
the leading edge advanced, while other later sources writing into the
buffer mixed into the existing buffered audio at their respective write
positions.
Change-Id: I0f6642b036944508f2a33420359de488ef8b991c
Convenience function to check whether any formats have changed, which
would indicate that a restart of the media player is needed.
Functional no-op.
Change-Id: I2bc9b57b95bb229bc4f8cfc49ca662fa724d3642
We have to restructure project's general README.md
in order to make all recently added documentation sources
(including RTD) be compliant and let it look centralized and
good organized.
The root of the repository still has the README.md, but
it only shows general summary on the project and then gives
links to the extended documentation sources:
- RTD stored
- GitHub stored
Change-Id: Ief160669432ecb3e22df16d9278df863da995991
Deprecate `asserts/` as it's only used for keeping images now.
(github wiki links fixed accordingly)
Create `docs/images` to keep visual materials and to properly
link them from the RTD with markdown.
Change-Id: Icbb8b22c57e087a57495b37bd7ecd1a15de05b43
(cherry picked from commit 99e0d936503a9026dbd55e2e0606b45853abb53b)
We have to unify the approach we use for setting these main blocks
of the documentation to let it: 1) be unified; 2) be compliant
with RTD.
Change-Id: Ifc1f491c14688f0151429a80c8a0cfb1e6a22aaa
This is a first commit introducing general readthedocs wiki
structure.
It introduced the following main chapters:
- Overview (is a symlink to the README.md), the readthedocs
parses the markdown from here and creates the overview page
- Architecture overview (with the sources taken from the git wiki)
- Unit-tests (with the sources taken from the git wiki)
- Troubleshooting Overview (now only memory leaks)
- Glossary (doesn't have much information for now)
Change-Id: I1a7db7ab1b169a5d002d251debbe1ad0f5d195ce
The test number 1142:
"SDP attr manipulations - add a= line for media audio, two times"
used to fail on the buster builds, because of the hash tables
implementation we had in the `command_values` of the `struct sdp_command`.
It didn't necessarily keep the same order, as was used to add values.
Now as the SDP manipulations structures is re-designed, we can re-add it.
Change-Id: Icc7d030894d45c9d62e91669915eafb348d05d97
In order to improve the efficieny of the code (make lookups
faster) use GQueues for CMD_ADD manipulations and
GHashTable for CMD_REM manipulations.
This gives the following benefits:
- faster lookup (check), if any SDP command is to be applied
(no need to iterate through all values of commands, as it used to be)
- keep a sequence for CMD_ADD values given by option flag(s)
In order to keep the code more lightweight and clear,
add a separate struct ptr to queues and hash tables into
the call_interfaces header.
Change-Id: I7e45aca4062750c7b8959473edb410ed76cc04e7
Debian stretch has an old libcurl which doesn't support MIMEPOST.
Disable the entire feature if libcurl is too old.
Change-Id: Id1d2a4d821671142523af355188f21ff06ad20f1
The test number 1142:
"SDP attr manipulations - add a= line for media audio, two times"
fails on the buster builds, because of the hash tables implementation
used in the `command_values` of the `struct sdp_command`.
It doesn't necessarily keep the same order, as was used to add values.
Temporarily removing it, until the `struct sdp_command` is re-designed.
Change-Id: I077771c00c5dc8907e42d7757540e3ffa2063af6
Don't change to a new port for sendonly streams as this causes problems
with NAT. A device receiving a sendonly SDP with a new port won't send
any RTP to the new port, leading to a closed (non existent) NAT mapping.
Change-Id: I2ea2163eb9f1203226bd781b53f421c790a86f0a
The old port latching logic was simply to use the last (newest)
allocated endpoint_map. This turned out to be wrong, because the last
used socket on the monologue could have been one that was allocated
earlier (and older endpoint_map), as it can happen during repeated
re-invites. Add a new function to actually look for the correct
endpoint_map, matching the currently used socket, to make sure the port
doesn't change.
Change-Id: Iae768fe48539264575aed67cbbb6b08ac745130f
These are the entries the kernel will try to look for when userspace
tries to use the RTPENGINE support, but the module is called
xt_RTPENGINE so the kernel does not find it and thus cannot autoload
it.
The problem is that we have startup code that sets up iptables rules,
and will fail if the module has not yet been loaded. By adding these
aliases we are no longer concerned about the ordering, and can let the
kernel autoload the modules when they are needed.
Change-Id: I43a54af4e32adf755538c57df711da048c720030