xref: /third_party/ffmpeg/libavformat/rtp.h (revision cabdff1a)
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