Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * RTP definitions
  3.  * Copyright (c) 2002 Fabrice Bellard
  4.  *
  5.  * This file is part of FFmpeg.
  6.  *
  7.  * FFmpeg is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  * FFmpeg is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with FFmpeg; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20.  */
  21. #ifndef AVFORMAT_RTP_H
  22. #define AVFORMAT_RTP_H
  23.  
  24. #include "libavformat/avformat.h"
  25. #include "libavcodec/avcodec.h"
  26. #include "libavutil/mathematics.h"
  27.  
  28. /**
  29.  * Return the payload type for a given stream used in the given format context.
  30.  * Static payload types are derived from the codec.
  31.  * Dynamic payload type are derived from the id field in AVStream.
  32.  * The format context private option payload_type overrides both.
  33.  *
  34.  * @param fmt   The context of the format
  35.  * @param codec The context of the codec
  36.  * @param idx   The stream index
  37.  * @return The payload type (the 'PT' field in the RTP header).
  38.  */
  39. int ff_rtp_get_payload_type(AVFormatContext *fmt, AVCodecContext *codec,
  40.                             int idx);
  41.  
  42. /**
  43.  * Initialize a codec context based on the payload type.
  44.  *
  45.  * Fill the codec_type and codec_id fields of a codec context with
  46.  * information depending on the payload type; for audio codecs, the
  47.  * channels and sample_rate fields are also filled.
  48.  *
  49.  * @param codec The context of the codec
  50.  * @param payload_type The payload type (the 'PT' field in the RTP header)
  51.  * @return In case of unknown payload type or dynamic payload type, a
  52.  * negative value is returned; otherwise, 0 is returned
  53.  */
  54. int ff_rtp_get_codec_info(AVCodecContext *codec, int payload_type);
  55.  
  56. /**
  57.  * Return the encoding name (as defined in
  58.  * http://www.iana.org/assignments/rtp-parameters) for a given payload type.
  59.  *
  60.  * @param payload_type The payload type (the 'PT' field in the RTP header)
  61.  * @return In case of unknown payload type or dynamic payload type, a pointer
  62.  * to an empty string is returned; otherwise, a pointer to a string containing
  63.  * the encoding name is returned
  64.  */
  65. const char *ff_rtp_enc_name(int payload_type);
  66.  
  67. /**
  68.  * Return the codec id for the given encoding name and codec type.
  69.  *
  70.  * @param buf A pointer to the string containing the encoding name
  71.  * @param codec_type The codec type
  72.  * @return In case of unknown encoding name, AV_CODEC_ID_NONE is returned;
  73.  * otherwise, the codec id is returned
  74.  */
  75. enum AVCodecID ff_rtp_codec_id(const char *buf, enum AVMediaType codec_type);
  76.  
  77. #define RTP_PT_PRIVATE 96
  78. #define RTP_VERSION 2
  79. #define RTP_MAX_SDES 256   /**< maximum text length for SDES */
  80.  
  81. /* RTCP packets use 0.5% of the bandwidth */
  82. #define RTCP_TX_RATIO_NUM 5
  83. #define RTCP_TX_RATIO_DEN 1000
  84.  
  85. /* An arbitrary id value for RTP Xiph streams - only relevant to indicate
  86.  * that the configuration has changed within a stream (by changing the
  87.  * ident value sent).
  88.  */
  89. #define RTP_XIPH_IDENT 0xfecdba
  90.  
  91. /* RTCP packet types */
  92. enum RTCPType {
  93.     RTCP_FIR    = 192,
  94.     RTCP_NACK, // 193
  95.     RTCP_SMPTETC,// 194
  96.     RTCP_IJ,   // 195
  97.     RTCP_SR     = 200,
  98.     RTCP_RR,   // 201
  99.     RTCP_SDES, // 202
  100.     RTCP_BYE,  // 203
  101.     RTCP_APP,  // 204
  102.     RTCP_RTPFB,// 205
  103.     RTCP_PSFB, // 206
  104.     RTCP_XR,   // 207
  105.     RTCP_AVB,  // 208
  106.     RTCP_RSI,  // 209
  107.     RTCP_TOKEN,// 210
  108. };
  109.  
  110. #define RTP_PT_IS_RTCP(x) (((x) >= RTCP_FIR && (x) <= RTCP_IJ) || \
  111.                            ((x) >= RTCP_SR  && (x) <= RTCP_TOKEN))
  112.  
  113. #define NTP_TO_RTP_FORMAT(x) av_rescale((x), INT64_C(1) << 32, 1000000)
  114.  
  115. #endif /* AVFORMAT_RTP_H */
  116.