doxygen.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /*
  2. * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  3. * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. */
  19. #ifndef __PJMEDIA_DOXYGEN_H__
  20. #define __PJMEDIA_DOXYGEN_H__
  21. /**
  22. * @file doxygen.h
  23. * @brief Doxygen's mainpage.
  24. */
  25. /*////////////////////////////////////////////////////////////////////////// */
  26. /*
  27. INTRODUCTION PAGE
  28. */
  29. /**
  30. * @mainpage PJMEDIA
  31. *
  32. * \n
  33. * @section intro2 Introduction to PJMEDIA
  34. *
  35. * PJMEDIA is a fully featured media stack, distributed under Open Source/GPL
  36. * terms, and featuring small footprint and good extensibility and excellent
  37. * portability. Here are some brief overview of PJMEDIA benefits.
  38. *
  39. * @subsection benefit Benefits
  40. * @subsubsection full_feature Many Features
  41. * PJMEDIA has many features, and rather than to list them all here, please
  42. * see the <A HREF="modules.htm"><b>Modules</b></A> page for more info.
  43. *
  44. * Video is planned to arrive at version 2.
  45. *
  46. * @subsubsection portable Excellent Portability
  47. * It's been ported to all desktop systems and many mobile platforms including
  48. * Symbian, Windows Mobile, iPhone, and Android. Thanks to its zero thread
  49. * design, users have been able to run PJMEDIA on deeply embedded platforms,
  50. * even without operating systems (those typically found in DSP platforms).
  51. * Except the echo suppressor, all other PJMEDIA components have fixed point
  52. * implementation, which makes it ideal for embedded systems which lack FPU.
  53. * PJMEDIA also has tiny footprint, as explained below
  54. *
  55. * @subsubsection footprint Tiny Footprint
  56. * Lets not talk about less meaningful and potentially misleading term such as
  57. * core footprint, and instead here is the footprint of all components
  58. * typically used to build a full streaming media:
  59. *
  60. * \verbatim
  61. Category Component text data bss dec filename
  62. -------------------------------------------------------------------------------
  63. Core Error subsystem 135 0 0 135 errno.o
  64. Core Endpoint 4210 4 4 4218 endpoint.o
  65. Core Port framework 652 0 0 652 port.o
  66. Core Codec framework 6257 0 0 6257 codec.o
  67. Codec Alaw/ulaw conv. 1060 16 0 1076 alaw_ulaw.o
  68. Codec G.711 3298 128 96 3522 g711.o
  69. Codec PLC 883 24 0 907 plc_common.o
  70. Codec PLC 7130 0 0 7130 wsola.o
  71. Session Stream 12222 0 1920 14142 stream.o
  72. Transport RTCP 3732 0 0 3732 rtcp.o
  73. Transport RTP 2568 0 0 2568 rtp.o
  74. Transport UDP 6612 96 0 6708 transport_udp.o
  75. Transport Jitter buffer 6473 0 0 6473 jbuf.o
  76. -------------------------------------------------------------------------------
  77. TOTAL 55,232 268 2,020 57,520
  78. \endverbatim
  79. * The 56KB are for media streaming components, complete with codec, RTP, and
  80. * RTCP. The footprint above was done for PJSIP version 1.8.2 on a Linux x86
  81. * machine, using footprintopimization as explained in PJSIP FAQ. Numbers are
  82. * in bytes.
  83. *
  84. * @subsubsection quality Good Quality
  85. * PJMEDIA supports wideband, ultra-wideband, and beyond, as well as multiple
  86. * audio channels. The jitter buffer has been proven to work on lower
  87. * bandwidth links such as 3G, and to some extent, Edge and GPRS. We've grown
  88. * our own algorithm to compensate for packet losses and clock drifts in audio
  89. * transmission, as well as feature to use codec's built in PLC if available.
  90. *
  91. * @subsubsection hw Hardware Support
  92. * PJMEDIA supports hardware, firmware, or other built-in feature that comes
  93. * with the device. These are crucial for mobile devices to allow the best
  94. * use of the very limited CPU and battery power of the device. Among other
  95. * things, device's on-board codec and echo cancellation may be used if
  96. * available.
  97. *
  98. * @subsubsection extensible Extensible
  99. * Despite its tiny footprint, PJMEDIA uses a flexible port concept, which is
  100. * adapted from filter based concept found in other media framework. It is not
  101. * as flexible as those found in Direct Show or gstreamer (and that would be
  102. * unnecessary since it serves different purpose), but it's flexible enough
  103. * to allow components to be assembled one after another to achieve certain
  104. * task, and easy creation of such components by application and interconnect
  105. * them to the rest of the framework.
  106. *
  107. * @subsubsection doc (Fairly Okay) Documentation
  108. * We understand that any documentation can always be improved, but we put
  109. * a lot of efforts in creating and maintaining our documentation, because
  110. * we know it matters.
  111. *
  112. * \n
  113. * @subsection org1 Organization
  114. *
  115. * At the top-most level, PJMEDIA library suite contains the following
  116. * libraries.
  117. *
  118. * @subsubsection libpjmedia PJMEDIA
  119. * This contains all main media components. Please see the
  120. * <A HREF="modules.htm"><b>Modules</b></A> page for complete list of
  121. * components that PJMEDIA provides.
  122. *
  123. * @subsubsection libpjmediacodec PJMEDIA Codec
  124. * PJMEDIA-CODEC is a static library containing various codec implementations,
  125. * wrapped into PJMEDIA codec framework. The static library is designed as
  126. * such so that only codecs that are explicitly initialized are linked with
  127. * the application, therefore keeping the application size in control.
  128. *
  129. * Please see @ref PJMEDIA_CODEC for more info.
  130. *
  131. * @subsubsection libpjmediaaudiodev PJMEDIA Audio Device
  132. * PJMEDIA-Audiodev is audio device framework and abstraction library. Please
  133. * see @ref audio_device_api for more info.
  134. *
  135. * \n
  136. * @section pjmedia_concepts PJMEDIA Key Concepts
  137. * Below are some key concepts in PJMEDIA:
  138. * - @ref PJMEDIA_PORT
  139. * - @ref PJMEDIA_PORT_CLOCK
  140. * - @ref PJMEDIA_TRANSPORT
  141. * - @ref PJMEDIA_SESSION
  142. */
  143. /**
  144. @page page_pjmedia_samples PJMEDIA and PJMEDIA-CODEC Examples
  145. @section pjmedia_samples_sec PJMEDIA and PJMEDIA-CODEC Examples
  146. Please find below some PJMEDIA related examples that may help in giving
  147. some more info:
  148. - @ref page_pjmedia_samples_level_c \n
  149. This is a good place to start learning about @ref PJMEDIA_PORT,
  150. as it shows that @ref PJMEDIA_PORT are only "passive" objects
  151. with <tt>get_frame()</tt> and <tt>put_frame()</tt> interface, and
  152. someone has to call these to retrieve/store media frames.
  153. - @ref page_pjmedia_samples_playfile_c \n
  154. This example shows that when application connects a media port (in this
  155. case a @ref PJMEDIA_FILE_PLAY) to @ref PJMED_SND_PORT, media will flow
  156. automatically since the @ref PJMED_SND_PORT provides @ref PJMEDIA_PORT_CLOCK.
  157. - @ref page_pjmedia_samples_recfile_c \n
  158. Demonstrates how to capture audio from microphone to WAV file.
  159. - @ref page_pjmedia_samples_playsine_c \n
  160. Demonstrates how to create a custom @ref PJMEDIA_PORT (in this
  161. case a sine wave generator) and integrate it to PJMEDIA.
  162. - @ref page_pjmedia_samples_confsample_c \n
  163. This demonstrates how to use the @ref PJMEDIA_CONF. The sample program can
  164. open multiple WAV files, and instruct the conference bridge to mix the
  165. signal before playing it to the sound device.
  166. - @ref page_pjmedia_samples_confbench_c \n
  167. I use this to benchmark/optimize the conference bridge algorithm, but
  168. readers may find the source useful.
  169. - @ref page_pjmedia_samples_resampleplay_c \n
  170. Demonstrates how to use @ref PJMEDIA_RESAMPLE_PORT to change the
  171. sampling rate of a media port (in this case, a @ref PJMEDIA_FILE_PLAY).
  172. - @ref page_pjmedia_samples_sndtest_c \n
  173. This program performs some tests to the sound device to get some
  174. quality parameters (such as sound jitter and clock drifts).\n
  175. Screenshots on WinXP: \image html sndtest.jpg "sndtest screenshot on WinXP"
  176. - @ref page_pjmedia_samples_streamutil_c \n
  177. This example mainly demonstrates how to stream media (in this case a
  178. @ref PJMEDIA_FILE_PLAY) to remote peer using RTP.
  179. - @ref page_pjmedia_samples_siprtp_c \n
  180. This is a useful program (integrated with PJSIP) to actively measure
  181. the network quality/impairment parameters by making one or more SIP
  182. calls (or receiving one or more SIP calls) and display the network
  183. impairment of each stream direction at the end of the call.
  184. The program is able to measure network quality parameters such as
  185. jitter, packet lost/reorder/duplicate, round trip time, etc.\n
  186. Note that the remote peer MUST support RTCP so that network quality
  187. of each direction can be calculated. Using siprtp for both endpoints
  188. is recommended.\n
  189. Screenshots on WinXP: \image html siprtp.jpg "siprtp screenshot on WinXP"
  190. - @ref page_pjmedia_samples_tonegen_c \n
  191. This is a simple program to generate a tone and write the samples to
  192. a raw PCM file. The main purpose of this file is to analyze the
  193. quality of the tones/sine wave generated by PJMEDIA tone/sine wave
  194. generator.
  195. - @ref page_pjmedia_samples_aectest_c \n
  196. Play a file to speaker, run AEC, and record the microphone input
  197. to see if echo is coming.
  198. */
  199. /**
  200. * \page page_pjmedia_samples_siprtp_c Samples: Using SIP and Custom RTP/RTCP to Monitor Quality
  201. *
  202. * This source is an example to demonstrate using SIP and RTP/RTCP framework
  203. * to measure the network quality/impairment from the SIP call. This
  204. * program can be used to make calls or to receive calls from other
  205. * SIP endpoint (or other siprtp program), and to display the media
  206. * quality statistics at the end of the call.
  207. *
  208. * Note that the remote peer must support RTCP.
  209. *
  210. * The layout of the program has been designed so that custom reporting
  211. * can be generated instead of plain human readable text.
  212. *
  213. * The source code of the file is pjsip-apps/src/samples/siprtp.c
  214. *
  215. * Screenshots on WinXP: \image html siprtp.jpg
  216. *
  217. * \includelineno siprtp.c
  218. */
  219. #endif /* __PJMEDIA_DOXYGEN_H__ */