annotate rtpdec.h @ 5966:9a86b49201bb libavformat

Revert svn rev 21857, readd first_rtcp_ntp_time in RTPDemuxContext In order to sync RTP streams that get their initial RTCP timestamp at different times, propagate the NTP timestamp of the first RTCP packet to all other streams. This makes the timestamps of returned packets start at (near) zero instead of at any random offset.
author mstorsjo
date Tue, 20 Apr 2010 07:34:28 +0000
parents 2d2273c246ce
children c5a3e1951fc6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1 /*
4388
80f21f72d7d6 Split rtp.h in rtp.h, rtpdec.h, and rtpenc.h
lucabe
parents: 4387
diff changeset
2 * RTP demuxer definitions
4251
77e0c7511d41 cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 4101
diff changeset
3 * Copyright (c) 2002 Fabrice Bellard
4291
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
4 * Copyright (c) 2006 Ryan Martell <rdm4@martellventures.com>
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
5 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1167
diff changeset
6 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1167
diff changeset
7 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1167
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1167
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
12 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1167
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
16 * Lesser General Public License for more details.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
17 *
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1167
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
896
edbe5c3717f9 Update licensing information: The FSF changed postal address.
diego
parents: 885
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
21 */
4388
80f21f72d7d6 Split rtp.h in rtp.h, rtpdec.h, and rtpenc.h
lucabe
parents: 4387
diff changeset
22 #ifndef AVFORMAT_RTPDEC_H
80f21f72d7d6 Split rtp.h in rtp.h, rtpdec.h, and rtpenc.h
lucabe
parents: 4387
diff changeset
23 #define AVFORMAT_RTPDEC_H
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
24
3286
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 2901
diff changeset
25 #include "libavcodec/avcodec.h"
2171
a6d6b2b19341 include all prerequisites in header files
mru
parents: 1869
diff changeset
26 #include "avformat.h"
4388
80f21f72d7d6 Split rtp.h in rtp.h, rtpdec.h, and rtpenc.h
lucabe
parents: 4387
diff changeset
27 #include "rtp.h"
2171
a6d6b2b19341 include all prerequisites in header files
mru
parents: 1869
diff changeset
28
1868
b92a67b0b4bd Doxygenize the unaltered comments for the rtp_payload_data_s struct.
takis
parents: 1867
diff changeset
29 /** Structure listing useful vars to parse RTP packet payload*/
4101
af2c0aef892b Rename rtp_payload_data_t to avoid clashes with the POSIX namespace
lucabe
parents: 4100
diff changeset
30 typedef struct rtp_payload_data
774
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
31 {
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
32 int sizelength;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
33 int indexlength;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
34 int indexdeltalength;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
35 int profile_level_id;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
36 int streamtype;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
37 int objecttype;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
38 char *mode;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
39
1869
48b1d0b70e09 Doxygenize the unaltered comments for the AUHeaders structure.
takis
parents: 1868
diff changeset
40 /** mpeg 4 AU headers */
774
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
41 struct AUHeaders {
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
42 int size;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
43 int index;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
44 int cts_flag;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
45 int cts;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
46 int dts_flag;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
47 int dts;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
48 int rap_flag;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
49 int streamstate;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
50 } *au_headers;
5936
3671d661f4b5 Fix leaks in the AAC RTP depacketizer
mstorsjo
parents: 5935
diff changeset
51 int au_headers_allocated;
774
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
52 int nb_au_headers;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
53 int au_headers_length_bytes;
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
54 int cur_au_index;
4101
af2c0aef892b Rename rtp_payload_data_t to avoid clashes with the POSIX namespace
lucabe
parents: 4100
diff changeset
55 } RTPPayloadData;
774
820863425158 RTP/RTSP and MPEG4-AAC audio
michael
parents: 294
diff changeset
56
4100
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
57 typedef struct PayloadContext PayloadContext;
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
58 typedef struct RTPDynamicProtocolHandler_s RTPDynamicProtocolHandler;
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
59
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
60 #define RTP_MIN_PACKET_LENGTH 12
4392
ef5d6bb2c41b Move RTP_MAX_PACKET_LENGTH to rtpdec.h: it is not used in the muxer anymore
lucabe
parents: 4388
diff changeset
61 #define RTP_MAX_PACKET_LENGTH 1500 /* XXX: suppress this define */
4100
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
62
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
63 typedef struct RTPDemuxContext RTPDemuxContext;
4101
af2c0aef892b Rename rtp_payload_data_t to avoid clashes with the POSIX namespace
lucabe
parents: 4100
diff changeset
64 RTPDemuxContext *rtp_parse_open(AVFormatContext *s1, AVStream *st, URLContext *rtpc, int payload_type, RTPPayloadData *rtp_payload_data);
4100
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
65 void rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx,
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
66 RTPDynamicProtocolHandler *handler);
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
67 int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
68 const uint8_t *buf, int len);
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
69 void rtp_parse_close(RTPDemuxContext *s);
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5936
diff changeset
70 #if (LIBAVFORMAT_VERSION_MAJOR <= 53)
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5936
diff changeset
71 int rtp_get_local_port(URLContext *h);
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5936
diff changeset
72 #endif
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5936
diff changeset
73 int rtp_get_local_rtp_port(URLContext *h);
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5936
diff changeset
74 int rtp_get_local_rtcp_port(URLContext *h);
4100
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
75
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
76 int rtp_set_remote_url(URLContext *h, const char *uri);
4640
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4590
diff changeset
77 #if (LIBAVFORMAT_VERSION_MAJOR <= 52)
4100
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
78 void rtp_get_file_handles(URLContext *h, int *prtp_fd, int *prtcp_fd);
4640
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4590
diff changeset
79 #endif
4100
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
80
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
81 /**
5665
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
82 * Send a dummy packet on both port pairs to set up the connection
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
83 * state in potential NAT routers, so that we're able to receive
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
84 * packets.
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
85 *
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
86 * Note, this only works if the NAT router doesn't remap ports. This
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
87 * isn't a standardized procedure, but it works in many cases in practice.
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
88 *
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
89 * The same routine is used with RDT too, even if RDT doesn't use normal
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
90 * RTP packets otherwise.
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
91 */
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
92 void rtp_send_punch_packets(URLContext* rtp_handle);
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
93
93b0d64bf0c9 When using RTP-over-UDP, send dummy packets during stream setup, similar to
rbultje
parents: 4640
diff changeset
94 /**
4100
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
95 * some rtp servers assume client is dead if they don't hear from them...
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
96 * so we send a Receiver Report to the provided ByteIO context
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
97 * (we don't have access to the rtcp handle from here)
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
98 */
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
99 int rtp_check_and_send_back_rr(RTPDemuxContext *s, int count);
2e81931d3995 Remove useless typedef
lucabe
parents: 4099
diff changeset
100
4291
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
101 // these statistics are used for rtcp receiver reports...
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
102 typedef struct {
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
103 uint16_t max_seq; ///< highest sequence number seen
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
104 uint32_t cycles; ///< shifted count of sequence number cycles
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
105 uint32_t base_seq; ///< base sequence number
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
106 uint32_t bad_seq; ///< last bad sequence number + 1
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
107 int probation; ///< sequence packets till source is valid
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
108 int received; ///< packets received
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
109 int expected_prior; ///< packets expected in last interval
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
110 int received_prior; ///< packets received in last interval
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
111 uint32_t transit; ///< relative transit time for previous packet
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
112 uint32_t jitter; ///< estimated jitter.
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
113 } RTPStatistics;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
114
4589
df35708c640a Don't (ab)use PKT_FLAG_* in RTP code, since the two have virtually nothing
rbultje
parents: 4518
diff changeset
115 #define RTP_FLAG_KEY 0x1 ///< RTP packet contains a keyframe
4590
85c7d517d556 Implement marker bit, which is used for several RTP payloads currently
rbultje
parents: 4589
diff changeset
116 #define RTP_FLAG_MARKER 0x2 ///< RTP marker bit was set for this packet
4291
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
117 /**
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
118 * Packet parsing for "private" payloads in the RTP specs.
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
119 *
4387
5c42816e12c6 Add "AVFormatContext *ctx" (that being the RTSP demuxer's) as first argument
rbultje
parents: 4380
diff changeset
120 * @param ctx RTSP demuxer context
4291
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
121 * @param s stream context
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
122 * @param st stream that this packet belongs to
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
123 * @param pkt packet in which to write the parsed data
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
124 * @param timestamp pointer in which to write the timestamp of this RTP packet
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
125 * @param buf pointer to raw RTP packet data
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
126 * @param len length of buf
4589
df35708c640a Don't (ab)use PKT_FLAG_* in RTP code, since the two have virtually nothing
rbultje
parents: 4518
diff changeset
127 * @param flags flags from the RTP packet header (RTP_FLAG_*)
4291
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
128 */
4387
5c42816e12c6 Add "AVFormatContext *ctx" (that being the RTSP demuxer's) as first argument
rbultje
parents: 4380
diff changeset
129 typedef int (*DynamicPayloadPacketHandlerProc) (AVFormatContext *ctx,
5c42816e12c6 Add "AVFormatContext *ctx" (that being the RTSP demuxer's) as first argument
rbultje
parents: 4380
diff changeset
130 PayloadContext *s,
4291
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
131 AVStream *st,
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
132 AVPacket * pkt,
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
133 uint32_t *timestamp,
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
134 const uint8_t * buf,
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
135 int len, int flags);
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
136
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
137 struct RTPDynamicProtocolHandler_s {
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
138 // fields from AVRtpDynamicPayloadType_s
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
139 const char enc_name[50]; /* XXX: still why 50 ? ;-) */
5910
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 5697
diff changeset
140 enum AVMediaType codec_type;
4291
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
141 enum CodecID codec_id;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
142
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
143 // may be null
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
144 int (*parse_sdp_a_line) (AVFormatContext *s,
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
145 int st_index,
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
146 PayloadContext *priv_data,
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
147 const char *line); ///< Parse the a= line from the sdp field
5935
bd378c64a9f5 Add void to a function prototype that takes no arguments. Fixes a potential
rbultje
parents: 5910
diff changeset
148 PayloadContext *(*open) (void); ///< allocate any data needed by the rtp parsing for this dynamic data.
4291
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
149 void (*close)(PayloadContext *protocol_data); ///< free any data needed by the rtp parsing for this dynamic data.
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
150 DynamicPayloadPacketHandlerProc parse_packet; ///< parse handler for this dynamic packet.
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
151
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
152 struct RTPDynamicProtocolHandler_s *next;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
153 };
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
154
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
155 // moved out of rtp.c, because the h264 decoder needs to know about this structure..
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
156 struct RTPDemuxContext {
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
157 AVFormatContext *ic;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
158 AVStream *st;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
159 int payload_type;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
160 uint32_t ssrc;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
161 uint16_t seq;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
162 uint32_t timestamp;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
163 uint32_t base_timestamp;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
164 uint32_t cur_timestamp;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
165 int max_payload_size;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
166 struct MpegTSContext *ts; /* only used for MP2T payloads */
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
167 int read_buf_index;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
168 int read_buf_size;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
169 /* used to send back RTCP RR */
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
170 URLContext *rtp_ctx;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
171 char hostname[256];
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
172
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
173 RTPStatistics statistics; ///< Statistics for this stream (used by RTCP receiver reports)
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
174
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
175 /* rtcp sender statistics receive */
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
176 int64_t last_rtcp_ntp_time; // TODO: move into statistics
5966
9a86b49201bb Revert svn rev 21857, readd first_rtcp_ntp_time in RTPDemuxContext
mstorsjo
parents: 5964
diff changeset
177 int64_t first_rtcp_ntp_time; // TODO: move into statistics
4291
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
178 uint32_t last_rtcp_timestamp; // TODO: move into statistics
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
179
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
180 /* rtcp sender statistics */
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
181 unsigned int packet_count; // TODO: move into statistics (outgoing)
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
182 unsigned int octet_count; // TODO: move into statistics (outgoing)
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
183 unsigned int last_octet_count; // TODO: move into statistics (outgoing)
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
184 int first_packet;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
185 /* buffer for output */
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
186 uint8_t buf[RTP_MAX_PACKET_LENGTH];
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
187 uint8_t *buf_ptr;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
188
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
189 /* special infos for au headers parsing */
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
190 RTPPayloadData *rtp_payload_data; // TODO: Move into dynamic payload handlers
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
191
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
192 /* dynamic payload stuff */
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
193 DynamicPayloadPacketHandlerProc parse_packet; ///< This is also copied from the dynamic protocol handler structure
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
194 PayloadContext *dynamic_protocol_context; ///< This is a copy from the values setup from the sdp parsing, in rtsp.c don't free me.
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
195 int max_frames_per_packet;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
196 };
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
197
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
198 extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
199 void ff_register_dynamic_payload_handler(RTPDynamicProtocolHandler *handler);
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
200
5697
484fceabfad2 Prefix non-static RTSP functions with ff_.
rbultje
parents: 5666
diff changeset
201 int ff_rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size); ///< from rtsp.c, but used by rtp dynamic protocol handlers.
4291
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
202
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
203 void av_register_rtp_dynamic_payload_handlers(void);
f49e5d92ab26 Merge rtp_internal.h in rtp.h, and remove rtp_internal.h
lucabe
parents: 4251
diff changeset
204
4388
80f21f72d7d6 Split rtp.h in rtp.h, rtpdec.h, and rtpenc.h
lucabe
parents: 4387
diff changeset
205 #endif /* AVFORMAT_RTPDEC_H */