rtpdec.h
Go to the documentation of this file.
1 /*
2  * RTP demuxer definitions
3  * Copyright (c) 2002 Fabrice Bellard
4  * Copyright (c) 2006 Ryan Martell <rdm4@martellventures.com>
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #ifndef AVFORMAT_RTPDEC_H
24 #define AVFORMAT_RTPDEC_H
25 
26 #include "libavcodec/avcodec.h"
27 #include "avformat.h"
28 #include "rtp.h"
29 #include "url.h"
30 #include "srtp.h"
31 
34 
35 #define RTP_MIN_PACKET_LENGTH 12
36 #define RTP_MAX_PACKET_LENGTH 8192
37 
38 #define RTP_REORDER_QUEUE_DEFAULT_SIZE 10
39 
40 #define RTP_NOTS_VALUE ((uint32_t)-1)
41 
44  int payload_type, int queue_size);
48  const char *params);
50  uint8_t **buf, int len);
56 
57 int ff_rtp_set_remote_url(URLContext *h, const char *uri);
58 
59 /**
60  * Send a dummy packet on both port pairs to set up the connection
61  * state in potential NAT routers, so that we're able to receive
62  * packets.
63  *
64  * Note, this only works if the NAT router doesn't remap ports. This
65  * isn't a standardized procedure, but it works in many cases in practice.
66  *
67  * The same routine is used with RDT too, even if RDT doesn't use normal
68  * RTP packets otherwise.
69  */
70 void ff_rtp_send_punch_packets(URLContext* rtp_handle);
71 
72 /**
73  * some rtp servers assume client is dead if they don't hear from them...
74  * so we send a Receiver Report to the provided URLContext or AVIOContext
75  * (we don't have access to the rtcp handle from here)
76  */
78  AVIOContext *avio, int count);
80  AVIOContext *avio);
81 
82 // these statistics are used for rtcp receiver reports...
83 typedef struct RTPStatistics {
84  uint16_t max_seq; ///< highest sequence number seen
85  uint32_t cycles; ///< shifted count of sequence number cycles
86  uint32_t base_seq; ///< base sequence number
87  uint32_t bad_seq; ///< last bad sequence number + 1
88  int probation; ///< sequence packets till source is valid
89  uint32_t received; ///< packets received
90  uint32_t expected_prior; ///< packets expected in last interval
91  uint32_t received_prior; ///< packets received in last interval
92  uint32_t transit; ///< relative transit time for previous packet
93  uint32_t jitter; ///< estimated jitter.
95 
96 #define RTP_FLAG_KEY 0x1 ///< RTP packet contains a keyframe
97 #define RTP_FLAG_MARKER 0x2 ///< RTP marker bit was set for this packet
98 /**
99  * Packet parsing for "private" payloads in the RTP specs.
100  *
101  * @param ctx RTSP demuxer context
102  * @param s stream context
103  * @param st stream that this packet belongs to
104  * @param pkt packet in which to write the parsed data
105  * @param timestamp pointer to the RTP timestamp of the input data, can be
106  * updated by the function if returning older, buffered data
107  * @param buf pointer to raw RTP packet data
108  * @param len length of buf
109  * @param seq RTP sequence number of the packet
110  * @param flags flags from the RTP packet header (RTP_FLAG_*)
111  */
113  PayloadContext *s,
114  AVStream *st, AVPacket *pkt,
115  uint32_t *timestamp,
116  const uint8_t * buf,
117  int len, uint16_t seq, int flags);
118 
120  const char enc_name[50];
123  int static_payload_id; /* 0 means no payload id is set. 0 is a valid
124  * payload ID (PCMU), too, but that format doesn't
125  * require any custom depacketization code. */
126 
127  /** Initialize dynamic protocol handler, called after the full rtpmap line is parsed, may be null */
128  int (*init)(AVFormatContext *s, int st_index, PayloadContext *priv_data);
129  /** Parse the a= line from the sdp field */
130  int (*parse_sdp_a_line)(AVFormatContext *s, int st_index,
131  PayloadContext *priv_data, const char *line);
132  /** Allocate any data needed by the rtp parsing for this dynamic data. */
133  PayloadContext *(*alloc)(void);
134  /** Free any data needed by the rtp parsing for this dynamic data. */
135  void (*free)(PayloadContext *protocol_data);
136  /** Parse handler for this dynamic packet */
138  int (*need_keyframe)(PayloadContext *context);
139 
141 };
142 
143 typedef struct RTPPacket {
144  uint16_t seq;
146  int len;
147  int64_t recvtime;
148  struct RTPPacket *next;
149 } RTPPacket;
150 
155  uint32_t ssrc;
156  uint16_t seq;
157  uint32_t timestamp;
158  uint32_t base_timestamp;
159  uint32_t cur_timestamp;
163  /* used to send back RTCP RR */
164  char hostname[256];
165 
167  struct SRTPContext srtp;
168 
169  /** Statistics for this stream (used by RTCP receiver reports) */
171 
172  /** Fields for packet reordering @{ */
173  int prev_ret; ///< The return value of the actual parsing of the previous packet
174  RTPPacket* queue; ///< A sorted queue of buffered packets not yet returned
175  int queue_len; ///< The number of packets in queue
176  int queue_size; ///< The size of queue, or 0 if reordering is disabled
177  /*@}*/
178 
179  /* rtcp sender statistics receive */
184  int64_t rtcp_ts_offset;
185 
186  /* rtcp sender statistics */
187  unsigned int packet_count;
188  unsigned int octet_count;
189  unsigned int last_octet_count;
191 
192  /* dynamic payload stuff */
195 };
196 
199  enum AVMediaType codec_type);
201  enum AVMediaType codec_type);
202 
203 /* from rtsp.c, but used by rtp dynamic protocol handlers. */
204 int ff_rtsp_next_attr_and_value(const char **p, char *attr, int attr_size,
205  char *value, int value_size);
206 
207 int ff_parse_fmtp(AVStream *stream, PayloadContext *data, const char *p,
208  int (*parse_fmtp)(AVStream *stream,
209  PayloadContext *data,
210  char *attr, char *value));
211 
213 
214 /**
215  * Close the dynamic buffer and make a packet from it.
216  */
217 int ff_rtp_finalize_packet(AVPacket *pkt, AVIOContext **dyn_buf, int stream_idx);
218 
219 #endif /* AVFORMAT_RTPDEC_H */
const char * name
Definition: avisynth_c.h:675
int queue_size
The size of queue, or 0 if reordering is disabled.
Definition: rtpdec.h:176
const char * s
Definition: avisynth_c.h:668
Bytestream IO Context.
Definition: avio.h:68
AVFormatContext * ic
Definition: rtpdec.h:152
uint16_t seq
Definition: rtpdec.h:156
RTPDynamicProtocolHandler * ff_rtp_handler_find_by_name(const char *name, enum AVMediaType codec_type)
Definition: rtpdec.c:98
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
int payload_type
Definition: rtpdec.h:154
int64_t range_start_offset
Definition: rtpdec.h:161
int prev_ret
Fields for packet reordering.
Definition: rtpdec.h:173
int64_t last_feedback_time
Definition: rtpdec.h:190
RTP/JPEG specific private data.
Definition: rdt.c:83
unsigned int last_octet_count
Definition: rtpdec.h:189
RTPPacket * queue
A sorted queue of buffered packets not yet returned.
Definition: rtpdec.h:174
const RTPDynamicProtocolHandler * handler
Definition: rtpdec.h:193
enum AVMediaType codec_type
Definition: rtp.c:36
int64_t ff_rtp_queued_packet_time(RTPDemuxContext *s)
Definition: rtpdec.c:699
uint32_t cycles
shifted count of sequence number cycles
Definition: rtpdec.h:85
int ff_rtp_send_rtcp_feedback(RTPDemuxContext *s, URLContext *fd, AVIOContext *avio)
Definition: rtpdec.c:420
PayloadContext * dynamic_protocol_context
Definition: rtpdec.h:194
Format I/O context.
Definition: avformat.h:944
uint32_t base_seq
base sequence number
Definition: rtpdec.h:86
uint8_t
static AVPacket pkt
Definition: demuxing.c:56
int ff_rtp_finalize_packet(AVPacket *pkt, AVIOContext **dyn_buf, int stream_idx)
Close the dynamic buffer and make a packet from it.
Definition: rtpdec.c:865
int len
Definition: rtpdec.h:146
int ff_rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size)
const char enc_name[6]
Definition: rtp.c:35
int ff_rtp_get_local_rtcp_port(URLContext *h)
Return the local rtcp port used by the RTP connection.
Definition: rtpproto.c:304
uint32_t expected_prior
packets expected in last interval
Definition: rtpdec.h:90
int ff_parse_fmtp(AVStream *stream, PayloadContext *data, const char *p, int(*parse_fmtp)(AVStream *stream, PayloadContext *data, char *attr, char *value))
Definition: rtpdec.c:829
int ff_rtp_get_local_rtp_port(URLContext *h)
Return the local rtp port used by the RTP connection.
Definition: rtpproto.c:292
int srtp_enabled
Definition: rtpdec.h:166
void ff_rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx, RTPDynamicProtocolHandler *handler)
Definition: rtpdec.c:520
AVCodecID
Identify the syntax and semantics of the bitstream.
uint16_t seq
Definition: rtpdec.h:144
int probation
sequence packets till source is valid
Definition: rtpdec.h:88
Spectrum Plot time data
FFmpeg currently uses a custom build this text attempts to document some of its obscure features and options Makefile the full command issued by make and its output will be shown on the screen DESTDIR Destination directory for the install useful to prepare packages or install FFmpeg in cross environments Makefile builds all the libraries and the executables fate Run the fate test suite
Definition: build_system.txt:1
void ff_register_dynamic_payload_handler(RTPDynamicProtocolHandler *handler)
Definition: rtpdec.c:55
enum AVCodecID codec_id
Definition: mov_chan.c:433
DynamicPayloadPacketHandlerProc parse_packet
Parse handler for this dynamic packet.
Definition: rtpdec.h:137
external API header
int64_t rtcp_ts_offset
Definition: rtpdec.h:184
uint32_t timestamp
Definition: rtpdec.h:157
uint32_t transit
relative transit time for previous packet
Definition: rtpdec.h:92
uint32_t jitter
estimated jitter.
Definition: rtpdec.h:93
int queue_len
The number of packets in queue.
Definition: rtpdec.h:175
void ff_rtp_reset_packet_queue(RTPDemuxContext *s)
Definition: rtpdec.c:656
int(* DynamicPayloadPacketHandlerProc)(AVFormatContext *ctx, PayloadContext *s, AVStream *st, AVPacket *pkt, uint32_t *timestamp, const uint8_t *buf, int len, uint16_t seq, int flags)
Packet parsing for "private" payloads in the RTP specs.
Definition: rtpdec.h:112
int64_t first_rtcp_ntp_time
Definition: rtpdec.h:182
void av_register_rtp_dynamic_payload_handlers(void)
Definition: rtpdec.c:61
int64_t last_rtcp_ntp_time
Definition: rtpdec.h:180
int max_payload_size
Definition: rtpdec.h:162
RTPDemuxContext * ff_rtp_parse_open(AVFormatContext *s1, AVStream *st, int payload_type, int queue_size)
open a new RTP parse context for stream &#39;st&#39;.
Definition: rtpdec.c:488
Stream structure.
Definition: avformat.h:643
uint32_t received
packets received
Definition: rtpdec.h:89
int64_t last_rtcp_reception_time
Definition: rtpdec.h:181
typedef void(RENAME(mix_any_func_type))
unsigned int packet_count
Definition: rtpdec.h:187
int64_t unwrapped_timestamp
Definition: rtpdec.h:160
uint32_t last_rtcp_timestamp
Definition: rtpdec.h:183
static int parse_fmtp(AVStream *stream, PayloadContext *data, char *attr, char *value)
Definition: rtpdec_latm.c:148
void ff_rtp_parse_close(RTPDemuxContext *s)
Definition: rtpdec.c:822
unsigned int octet_count
Definition: rtpdec.h:188
void * buf
Definition: avisynth_c.h:594
Definition: url.h:41
RTPDynamicProtocolHandler * ff_rtp_handler_find_by_id(int id, enum AVMediaType codec_type)
Definition: rtpdec.c:110
double value
Definition: eval.c:82
RTPStatistics statistics
Statistics for this stream (used by RTCP receiver reports)
Definition: rtpdec.h:170
uint32_t received_prior
packets received in last interval
Definition: rtpdec.h:91
uint32_t bad_seq
last bad sequence number + 1
Definition: rtpdec.h:87
AVMediaType
Definition: avutil.h:141
#define s1
Definition: regdef.h:38
uint16_t max_seq
highest sequence number seen
Definition: rtpdec.h:84
uint8_t * buf
Definition: rtpdec.h:145
static int flags
Definition: cpu.c:23
void ff_rtp_parse_set_crypto(RTPDemuxContext *s, const char *suite, const char *params)
Definition: rtpdec.c:527
const char const char * params
Definition: avisynth_c.h:675
Main libavformat public API header.
struct RTPPacket * next
Definition: rtpdec.h:148
uint32_t ssrc
Definition: rtpdec.h:155
int64_t recvtime
Definition: rtpdec.h:147
int ff_rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt, uint8_t **buf, int len)
Parse an RTP or RTCP packet directly sent as a buffer.
Definition: rtpdec.c:809
void ff_rtp_send_punch_packets(URLContext *rtp_handle)
Send a dummy packet on both port pairs to set up the connection state in potential NAT routers...
Definition: rtpdec.c:352
struct RTPPacket RTPPacket
uint32_t base_timestamp
Definition: rtpdec.h:158
int len
About Git write you should know how to use GIT properly Luckily Git comes with excellent documentation git help man git shows you the available git< command > help man git< command > shows information about the subcommand< command > The most comprehensive manual is the website Git Reference visit they are quite exhaustive You do not need a special username or password All you need is to provide a ssh public key to the Git server admin What follows now is a basic introduction to Git and some FFmpeg specific guidelines Read it at least if you are granted commit privileges to the FFmpeg project you are expected to be familiar with these rules I if not You can get git from etc no matter how small Every one of them has been saved from looking like a fool by this many times It s very easy for stray debug output or cosmetic modifications to slip please avoid problems through this extra level of scrutiny For cosmetics only commits you should e g by running git config global user name My Name git config global user email my email which is either set in your personal configuration file through git config core editor or set by one of the following environment VISUAL or EDITOR Log messages should be concise but descriptive Explain why you made a what you did will be obvious from the changes themselves most of the time Saying just bug fix or is bad Remember that people of varying skill levels look at and educate themselves while reading through your code Don t include filenames in log Git provides that information Possibly make the commit message have a descriptive first line
Definition: git-howto.txt:153
void INT64 INT64 count
Definition: avisynth_c.h:594
unbuffered private I/O API
struct RTPStatistics RTPStatistics
uint32_t cur_timestamp
Definition: rtpdec.h:159
int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, URLContext *fd, AVIOContext *avio, int count)
some rtp servers assume client is dead if they don&#39;t hear from them...
Definition: rtpdec.c:249
int ff_rtp_set_remote_url(URLContext *h, const char *uri)
If no filename is given to av_open_input_file because you want to get the local port first...
Definition: rtpproto.c:58
AVStream * st
Definition: rtpdec.h:153
This structure stores compressed data.
MUSIC TECHNOLOGY GROUP UNIVERSITAT POMPEU FABRA Free Non Commercial Binary License Agreement UNIVERSITAT POMPEU OR INDICATING ACCEPTANCE BY SELECTING THE ACCEPT BUTTON ON ANY DOWNLOAD OR INSTALL YOU ACCEPT THE TERMS OF THE LICENSE SUMMARY TABLE Software MELODIA Melody Extraction vamp plug in Licensor Music Technology Group Universitat Pompeu Plaça de la Spain Permitted purposes Non commercial internal research and validation and educational purposes only All commercial uses in a production either internal or are prohibited by this license and require an additional commercial exploitation license TERMS AND CONDITIONS SOFTWARE Software means the software programs identified herein in binary any other machine readable any updates or error corrections provided by and any user programming guides and other documentation provided to you by UPF under this Agreement LICENSE Subject to the terms and conditions of this UPF grants you a royalty free
struct RTPDynamicProtocolHandler * next
Definition: rtpdec.h:140