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