BelledonneCommunications / mediastreamer2

Linphone.org mirror for mediastreamer2 (git://git.linphone.org/mediastreamer2.git)
http://linphone.org
GNU Affero General Public License v3.0
132 stars 105 forks source link

pipeline status

Mediastreamer2

Mediastreamer2 is a powerful and lightweight streaming engine for voice/video telephony applications. This media processing and streaming toolkit is responsible for receiving and sending all multimedia streams in Linphone, including voice/video capture, encoding and decoding, and rendering.

For additional information, please visit mediastreamer2's homepage on linphone.org

License

Copyright © Belledonne Communications

Mediastreamer2 is dual licensed, and is available either :

Documentation

Please browse supported features and RFCs from [https://www.linphone.org/technical-corner/mediastreamer2/features].

Mediastreamer2 has a concept of filters, that can be connected to form a graph. Each filter is responsible for doing some kind of processing and delivers data to the next filter. As an example, you could get some data from network and unpack it in an RTP filter. This RTP filter will deliver the data to a decoder (speex, G711...) which will deliver it to a filter that is able to play the PCM data or another to record it into a .wav file. A more high level API is available in mediastreamer2/mediastream.h header file, exposing primitives to create audio and video streams suitable for a VoIP application.

Compilation and installation

Required dependencies:

Optional dependencies

Build instructions:

The Autotools way is deprecated. Use CMake to configure the source code.

cmake . -DCMAKE_INSTALL_PREFIX=<prefix> -DCMAKE_PREFIX_PATH=<search_path>

make
make install

Alternatively, mediastreamer2 library is integrated in linphone-sdk[4] meta project, which provides a convenient way to build it for various targets.

Supported options:

Note for packagers:

Our CMake scripts may automatically add some paths into research paths of generated binaries. To ensure that the installed binaries are striped of any rpath, use -DCMAKE_SKIP_INSTALL_RPATH=ON while you invoke cmake.

Rpm packaging mediastremer2 rpm can be generated with cmake3 using the following command: mkdir WORK cd WORK cmake3 ../ make package_source rpmbuild -ta --clean --rmsource --rmspec mediastreamer--.tar.gz

Environment variables used by mediastreamer2

MS2_RTP_FIXED_DELAY : default value is 0. When set to 1, RTP packets belonging from one tick execution are actually sent at the beginning of the next tick. This allows a zero jitter in the RTP timing at sender side. This is to be used for measurements, this mode has no interest for doing a real conversation and does not improve quality.

MS_AUDIO_PRIO, MS_VIDEO_PRIO : define the scheduling policy of the audio and video threads (MSTicker objects). Possible values are 'NORMAL', 'HIGH', 'REALTIME'. The corresponding behavior is as follows:

+-------------------+------------------------+------------------------+-------------------------+
| Priority type     |     GNU/Linux          |        MacOS           |         Windows         |
+-------------------+------------------------+------------------------+-------------------------+
| NORMAL            | SCHED_OTHER, def. prio | SCHED_OTHER, def. prio | Default priority.       |
| HIGH              | SCHED_RR, max prio     | SCHED_RR, max prio     | THREAD_PRIORITY_HIGHEST |
| REALTIME          | SCHED_FIFO, max prio   | SCHED_FIFO, max prio   | THREAD_PRIORITY_HIGHEST |
+-------------------+------------------------+------------------------+-------------------------+

Note that SCHED_FIFO leaves entire control of the cpu to the mediastreamer2 thread. In case of CPU overload due to heavy encoder processing for example, a mono-core machine will stop responding.

Contact information

Use the linphone mailing list for question about mediastreamer2. linphone-developers@nongnu.org. Subscribe here: https://savannah.nongnu.org/mail/?group=linphone