• Stars
    star
    124
  • Rank 288,207 (Top 6 %)
  • Language
    C
  • License
    GNU Affero Genera...
  • Created almost 10 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Linphone.org mirror for mediastreamer2 (git://git.linphone.org/mediastreamer2.git)

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 :

  • under a GNU/AGPLv3 license, for free (open source). Please make sure that you understand and agree with the terms of this license before using it (see LICENSE.txt file for details). AGPLv3 is choosen over GPLv3 because mediastreamer2 can be used to create server-side applications, not just client-side ones. Any product incorporating mediastreamer2 to provide a remote service then has to be licensed under AGPLv3. For a client-side product, the "remote interaction" clause of AGPLv3 being irrelevant, the usual terms GPLv3 terms do apply (the two licences differ by this only clause).

  • under a proprietary license, for a fee, to be used in closed source applications. Contact Belledonne Communications for any question about costs and services.

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:

  • bctoolbox[1]: portability layer
  • oRTP[2]: RTP stack

Optional dependencies

  • libsrtp for SRTP encryption
  • bzrtp[3] for ZRTP encryption
  • libgsm: GSM codecs support
  • libbv16: BV16 codec support
  • libopus for Opus encoding and decoding
  • libspeex: SPEEX codec support
  • **libspeex-dsp: resampler and AEC
  • libalsa: ALSA support (GNU/Linux only)
  • libpulse: PulseAudio support (GNU/Linux only)
  • libv4l2: video capture (GNU/Linux only;disablable)
  • libx11 and libxv: video display with X11 (GNU/Linux only)
  • libglx: video dispaly with GLX (GNU/Linux only)
  • libvpx for VP8 encoding and decoding
  • libmastroska-c for recording/playing of audio/video streams
  • libturbojpeg: video screenshot feature
  • ffmpeg, h264 decoder, mpeg4 and mjpeg encoder/decoders, rescaling and pixel conversion.

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:

  • CMAKE_INSTALL_PREFIX=<string> : install prefix
  • CMAKE_PREFIX_PATH=<string> : column-separated list of prefixes where to search for dependencies
  • ENABLE_STRICT=NO : build without strict compilation flags (-Wall -Werror)
  • ENABLE_UNIT_TESTS=YES : build tester binaries
  • ENABLE_DOC=NO : do not generate the documentation
  • ENABLE_DEBUG_LOGS=YES : turn on debug-level logs

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.

  • MS_TICKER_SCHEDPRIO : UNIX only. It is an integer defining the thread priority to be used by MSTicker. Values are OS specific and depend on the scheduling policy SCHED_FIFO, SCHED_RR or SCHED_OTHER.
  • MS2_OPUS_COMPLEXITY : opus codec complexity parameter. A value of -1 stands for mediastreamer2's own default value. Otherwise it must be between 0 and 10.
  • MEDIASTREAMER_DEBUG : when set to 1, verbose logging is activated by default.
  • DISPLAY : used by video display filters relying on X11 (GNU/Linux only).

Contact information

Use the linphone mailing list for question about mediastreamer2. [email protected]. Subscribe here: https://savannah.nongnu.org/mail/?group=linphone


More Repositories

1

linphone-android

Linphone.org mirror for linphone-android (https://gitlab.linphone.org/BC/public/linphone-android)
Kotlin
1,018
star
2

linphone-iphone

Linphone is a free VoIP and video softphone based on the SIP protocol. Mirror of linphone-iphone (git://git.linphone.org/linphone-iphone.git)
Objective-C
542
star
3

linphone-desktop

Linphone is a free VoIP and video softphone based on the SIP protocol. Mirror of git://git.linphone.org/linphone-desktop.git
C++
349
star
4

liblinphone

Linphone.org mirror for liblinphone (git://git.linphone.org/liblinphone.git)
C++
343
star
5

ortp

Linphone.org mirror for ortp (git://git.linphone.org/ortp.git)
C
135
star
6

flexisip

Linphone.org mirror for flexisip (git://git.linphone.org/flexisip.git)
C++
126
star
7

bcg729

Linphone.org mirror for bcg729 (git://git.linphone.org/bcg729.git)
C
114
star
8

linphone-sdk

Mirror for linphone-sdk (https://gitlab.linphone.org/BC/public/linphone-sdk.git)
CMake
81
star
9

belle-sip

Linphone.org mirror for belle-sip (git://git.linphone.org/belle-sip.git)
C
64
star
10

sofia-sip

Linphone.org mirror for sofia-sip (git://git.linphone.org/sofia-sip.git)
C
27
star
11

linphone-xamarin

Linphone.org mirror for linphone-xamarin (git://git.linphone.org/linphone-xamarin.git)
C#
27
star
12

bctoolbox

Linphone.org mirror for bctoolbox (git://git.linphone.org/bctoolbox.git)
C
23
star
13

opencore-amr

Linphone.org mirror for opencore-amr (git://git.code.sf.net/p/opencore-amr/code)
C++
17
star
14

bzrtp

Linphone.org mirror for bzrtp (git://git.linphone.org/bzrtp.git)
C
14
star
15

linphone-windows10

Linphone.org mirror for linphone-windows10 (git://git.linphone.org/linphone-windows10.git)
C#
14
star
16

linphone-web-ui

Linphone.org mirror for linphone-web-ui (git://git.linphone.org/linphone-web-ui.git)
JavaScript
12
star
17

linphone-cmake-builder

Linphone.org mirror for linphone-cmake-builder (git://git.linphone.org/linphone-cmake-builder.git)
CMake
12
star
18

bcunit

Linphone.org mirror for bcunit (git://git.linphone.org/bcunit.git)
C
9
star
19

linphone-web-plugin

Linphone.org mirror for linphone-web-plugin (git://git.linphone.org/linphone-web-plugin.git)
C++
8
star
20

linhome-android

Kotlin
8
star
21

belr

ABNF Parser - Linphone.org mirror for belr (git://git.linphone.org/belr.git)
C++
8
star
22

libupnp

Linphone.org mirror for libupnp (git://git.code.sf.net/p/pupnp/code)
C
8
star
23

linphone-wp

Linphone.org mirror for linphone-wp (Windows Phone) (git://git.linphone.org/linphone-wp.git)
C
7
star
24

flexisip-account-manager

A REST API, web portal and provisioning server for Flexisip
PHP
5
star
25

meta-bc

Linphone recipes layers for builds using Yocto.
BitBake
3
star
26

linhome-ios

Swift
2
star
27

vo-amrwbenc

Linphone.org mirror for vo-amrwbenc (git://git.code.sf.net/p/opencore-amr/vo-amrwbenc)
C
2
star
28

firebreath

Linphone.org mirror for firebreath (git://git.linphone.org/firebreath729.git), based on firebreath
C++
2
star
29

lime

C++
2
star
30

mselph264

Mediastream2 plugin for ELP camera with h264 encoding support.
C++
1
star
31

linphone-bb10

Linphone.org mirror for linphone-bb10 (git://git.linphone.org/linphone-bb10.git)
C++
1
star