| /* $Id$ */ |
| /* |
| * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com) |
| * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org> |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| */ |
| #ifndef __PJMEDIA_DOXYGEN_H__ |
| #define __PJMEDIA_DOXYGEN_H__ |
| |
| /** |
| * @file doxygen.h |
| * @brief Doxygen's mainpage. |
| */ |
| |
| |
| /*////////////////////////////////////////////////////////////////////////// */ |
| /* |
| INTRODUCTION PAGE |
| */ |
| |
| /** |
| * @mainpage PJMEDIA |
| * |
| * \n |
| * @section intro2 Introduction to PJMEDIA |
| * |
| * PJMEDIA is a fully featured media stack, distributed under Open Source/GPL |
| * terms, and featuring small footprint and good extensibility and excellent |
| * portability. Here are some brief overview of PJMEDIA benefits. |
| * |
| * @subsection benefit Benefits |
| * @subsubsection full_feature Many Features |
| * PJMEDIA has many features, and rather than to list them all here, please |
| * see the <A HREF="modules.htm"><b>Modules</b></A> page for more info. |
| * |
| * Video is planned to arrive at version 2. |
| * |
| * @subsubsection portable Excellent Portability |
| * It's been ported to all desktop systems and many mobile platforms including |
| * Symbian, Windows Mobile, iPhone, and Android. Thanks to its zero thread |
| * design, users have been able to run PJMEDIA on deeply embedded platforms, |
| * even without operating systems (those typically found in DSP platforms). |
| * Except the echo suppressor, all other PJMEDIA components have fixed point |
| * implementation, which makes it ideal for embedded systems which lack FPU. |
| * PJMEDIA also has tiny footprint, as explained below |
| * |
| * @subsubsection footprint Tiny Footprint |
| * Lets not talk about less meaningful and potentially misleading term such as |
| * core footprint, and instead here is the footprint of all components |
| * typically used to build a full streaming media: |
| * |
| * \verbatim |
| Category Component text data bss dec filename |
| ------------------------------------------------------------------------------- |
| Core Error subsystem 135 0 0 135 errno.o |
| Core Endpoint 4210 4 4 4218 endpoint.o |
| Core Port framework 652 0 0 652 port.o |
| Core Codec framework 6257 0 0 6257 codec.o |
| Codec Alaw/ulaw conv. 1060 16 0 1076 alaw_ulaw.o |
| Codec G.711 3298 128 96 3522 g711.o |
| Codec PLC 883 24 0 907 plc_common.o |
| Codec PLC 7130 0 0 7130 wsola.o |
| Session Stream 12222 0 1920 14142 stream.o |
| Transport RTCP 3732 0 0 3732 rtcp.o |
| Transport RTP 2568 0 0 2568 rtp.o |
| Transport UDP 6612 96 0 6708 transport_udp.o |
| Transport Jitter buffer 6473 0 0 6473 jbuf.o |
| ------------------------------------------------------------------------------- |
| TOTAL 55,232 268 2,020 57,520 |
| |
| \endverbatim |
| * The 56KB are for media streaming components, complete with codec, RTP, and |
| * RTCP. The footprint above was done for PJSIP version 1.8.2 on a Linux x86 |
| * machine, using footprintopimization as explained in PJSIP FAQ. Numbers are |
| * in bytes. |
| * |
| * @subsubsection quality Good Quality |
| * PJMEDIA supports wideband, ultra-wideband, and beyond, as well as multiple |
| * audio channels. The jitter buffer has been proven to work on lower |
| * bandwidth links such as 3G, and to some extent, Edge and GPRS. We've grown |
| * our own algorithm to compensate for packet losses and clock drifts in audio |
| * transmission, as well as feature to use codec's built in PLC if available. |
| * |
| * @subsubsection hw Hardware Support |
| * PJMEDIA supports hardware, firmware, or other built-in feature that comes |
| * with the device. These are crucial for mobile devices to allow the best |
| * use of the very limited CPU and battery power of the device. Among other |
| * things, device's on-board codec and echo cancellation may be used if |
| * available. |
| * |
| * @subsubsection extensible Extensible |
| * Despite its tiny footprint, PJMEDIA uses a flexible port concept, which is |
| * adapted from filter based concept found in other media framework. It is not |
| * as flexible as those found in Direct Show or gstreamer (and that would be |
| * unnecessary since it serves different purpose), but it's flexible enough |
| * to allow components to be assembled one after another to achieve certain |
| * task, and easy creation of such components by application and interconnect |
| * them to the rest of the framework. |
| * |
| * @subsubsection doc (Fairly Okay) Documentation |
| * We understand that any documentation can always be improved, but we put |
| * a lot of efforts in creating and maintaining our documentation, because |
| * we know it matters. |
| * |
| * \n |
| * @subsection org1 Organization |
| * |
| * At the top-most level, PJMEDIA library suite contains the following |
| * libraries. |
| * |
| * @subsubsection libpjmedia PJMEDIA |
| * This contains all main media components. Please see the |
| * <A HREF="modules.htm"><b>Modules</b></A> page for complete list of |
| * components that PJMEDIA provides. |
| * |
| * @subsubsection libpjmediacodec PJMEDIA Codec |
| * PJMEDIA-CODEC is a static library containing various codec implementations, |
| * wrapped into PJMEDIA codec framework. The static library is designed as |
| * such so that only codecs that are explicitly initialized are linked with |
| * the application, therefore keeping the application size in control. |
| * |
| * Please see @ref PJMEDIA_CODEC for more info. |
| * |
| * @subsubsection libpjmediaaudiodev PJMEDIA Audio Device |
| * PJMEDIA-Audiodev is audio device framework and abstraction library. Please |
| * see @ref audio_device_api for more info. |
| * |
| * \n |
| * @section pjmedia_concepts PJMEDIA Key Concepts |
| * Below are some key concepts in PJMEDIA: |
| * - @ref PJMEDIA_PORT |
| * - @ref PJMEDIA_PORT_CLOCK |
| * - @ref PJMEDIA_TRANSPORT |
| * - @ref PJMEDIA_SESSION |
| */ |
| |
| |
| /** |
| @page page_pjmedia_samples PJMEDIA and PJMEDIA-CODEC Examples |
| |
| @section pjmedia_samples_sec PJMEDIA and PJMEDIA-CODEC Examples |
| |
| Please find below some PJMEDIA related examples that may help in giving |
| some more info: |
| |
| - @ref page_pjmedia_samples_level_c\n |
| This is a good place to start learning about @ref PJMEDIA_PORT, |
| as it shows that @ref PJMEDIA_PORT are only "passive" objects |
| with <tt>get_frame()</tt> and <tt>put_frame()</tt> interface, and |
| someone has to call these to retrieve/store media frames. |
| |
| - @ref page_pjmedia_samples_playfile_c\n |
| This example shows that when application connects a media port (in this |
| case a @ref PJMEDIA_FILE_PLAY) to @ref PJMED_SND_PORT, media will flow |
| automatically since the @ref PJMED_SND_PORT provides @ref PJMEDIA_PORT_CLOCK. |
| |
| - @ref page_pjmedia_samples_recfile_c\n |
| Demonstrates how to capture audio from microphone to WAV file. |
| |
| - @ref page_pjmedia_samples_playsine_c\n |
| Demonstrates how to create a custom @ref PJMEDIA_PORT (in this |
| case a sine wave generator) and integrate it to PJMEDIA. |
| |
| - @ref page_pjmedia_samples_confsample_c\n |
| This demonstrates how to use the @ref PJMEDIA_CONF. The sample program can |
| open multiple WAV files, and instruct the conference bridge to mix the |
| signal before playing it to the sound device. |
| |
| - @ref page_pjmedia_samples_confbench_c\n |
| I use this to benchmark/optimize the conference bridge algorithm, but |
| readers may find the source useful. |
| |
| - @ref page_pjmedia_samples_resampleplay_c\n |
| Demonstrates how to use @ref PJMEDIA_RESAMPLE_PORT to change the |
| sampling rate of a media port (in this case, a @ref PJMEDIA_FILE_PLAY). |
| |
| - @ref page_pjmedia_samples_sndtest_c\n |
| This program performs some tests to the sound device to get some |
| quality parameters (such as sound jitter and clock drifts).\n |
| Screenshots on WinXP: \image html sndtest.jpg "sndtest screenshot on WinXP" |
| |
| - @ref page_pjmedia_samples_streamutil_c\n |
| This example mainly demonstrates how to stream media (in this case a |
| @ref PJMEDIA_FILE_PLAY) to remote peer using RTP. |
| |
| - @ref page_pjmedia_samples_siprtp_c\n |
| This is a useful program (integrated with PJSIP) to actively measure |
| the network quality/impairment parameters by making one or more SIP |
| calls (or receiving one or more SIP calls) and display the network |
| impairment of each stream direction at the end of the call. |
| The program is able to measure network quality parameters such as |
| jitter, packet lost/reorder/duplicate, round trip time, etc.\n |
| Note that the remote peer MUST support RTCP so that network quality |
| of each direction can be calculated. Using siprtp for both endpoints |
| is recommended.\n |
| Screenshots on WinXP: \image html siprtp.jpg "siprtp screenshot on WinXP" |
| |
| - @ref page_pjmedia_samples_tonegen_c\n |
| This is a simple program to generate a tone and write the samples to |
| a raw PCM file. The main purpose of this file is to analyze the |
| quality of the tones/sine wave generated by PJMEDIA tone/sine wave |
| generator. |
| |
| - @ref page_pjmedia_samples_aectest_c\n |
| Play a file to speaker, run AEC, and record the microphone input |
| to see if echo is coming. |
| */ |
| |
| /** |
| * \page page_pjmedia_samples_siprtp_c Samples: Using SIP and Custom RTP/RTCP to Monitor Quality |
| * |
| * This source is an example to demonstrate using SIP and RTP/RTCP framework |
| * to measure the network quality/impairment from the SIP call. This |
| * program can be used to make calls or to receive calls from other |
| * SIP endpoint (or other siprtp program), and to display the media |
| * quality statistics at the end of the call. |
| * |
| * Note that the remote peer must support RTCP. |
| * |
| * The layout of the program has been designed so that custom reporting |
| * can be generated instead of plain human readable text. |
| * |
| * The source code of the file is pjsip-apps/src/samples/siprtp.c |
| * |
| * Screenshots on WinXP: \image html siprtp.jpg |
| * |
| * \includelineno siprtp.c |
| */ |
| |
| #endif /* __PJMEDIA_DOXYGEN_H__ */ |
| |