annotate rtp_internal.h @ 3539:4dee13c8073a libavformat

All id3 parsers are buggy, 0 termination fix 1 of n (issue created by andreas and found by reimar) fix is from reimar + cosmetics by me.
author michael
date Fri, 04 Jul 2008 22:00:35 +0000
parents 6f61c3b36632
children 1b6245500d8c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
1 /*
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
2 * RTP definitions
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
3 * Copyright (c) 2006 Ryan Martell <rdm4@martellventures.com>
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
4 *
1421
2a02386efc5a move licence header fixes
gpoirier
parents: 1420
diff changeset
5 * This file is part of FFmpeg.
2a02386efc5a move licence header fixes
gpoirier
parents: 1420
diff changeset
6 *
2a02386efc5a move licence header fixes
gpoirier
parents: 1420
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
1420
af616468863c Fix licence header (aka <pedantic mode='on' /> )
gpoirier
parents: 1419
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
11 *
1420
af616468863c Fix licence header (aka <pedantic mode='on' /> )
gpoirier
parents: 1419
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
15 * Lesser General Public License for more details.
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
16 *
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
1422
0c8c68a6b35f Last fix of licence header
gpoirier
parents: 1421
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
20 */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
21
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
22 // this is a bit of a misnomer, because rtp & rtsp internal structures and prototypes are in here.
2620
792383dd085e Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 2587
diff changeset
23 #ifndef FFMPEG_RTP_INTERNAL_H
792383dd085e Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 2587
diff changeset
24 #define FFMPEG_RTP_INTERNAL_H
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
25
2171
a6d6b2b19341 include all prerequisites in header files
mru
parents: 1445
diff changeset
26 #include <stdint.h>
3286
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 2941
diff changeset
27 #include "libavcodec/avcodec.h"
2171
a6d6b2b19341 include all prerequisites in header files
mru
parents: 1445
diff changeset
28 #include "rtp.h"
a6d6b2b19341 include all prerequisites in header files
mru
parents: 1445
diff changeset
29
1445
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
30 // these statistics are used for rtcp receiver reports...
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
31 typedef struct {
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
32 uint16_t max_seq; ///< highest sequence number seen
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
33 uint32_t cycles; ///< shifted count of sequence number cycles
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
34 uint32_t base_seq; ///< base sequence number
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
35 uint32_t bad_seq; ///< last bad sequence number + 1
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
36 int probation; ///< sequence packets till source is valid
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
37 int received; ///< packets received
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
38 int expected_prior; ///< packets expected in last interval
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
39 int received_prior; ///< packets received in last interval
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
40 uint32_t transit; ///< relative transit time for previous packet
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
41 uint32_t jitter; ///< estimated jitter.
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
42 } RTPStatistics;
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
43
2941
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
44 /**
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
45 * Packet parsing for "private" payloads in the RTP specs.
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
46 *
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
47 * @param s stream context
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
48 * @param pkt packet in which to write the parsed data
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
49 * @param timestamp pointer in which to write the timestamp of this RTP packet
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
50 * @param buf pointer to raw RTP packet data
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
51 * @param len length of buf
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
52 * @param flags flags from the RTP packet header (PKT_FLAG_*)
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
53 */
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
54 typedef int (*DynamicPayloadPacketHandlerProc) (struct RTPDemuxContext * s,
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
55 AVPacket * pkt,
1431
2d8a17631520 fix more dynamic protocol stuff, needed by the forthcoming h264
gpoirier
parents: 1425
diff changeset
56 uint32_t *timestamp,
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
57 const uint8_t * buf,
2941
6da0564c9d02 Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
rbultje
parents: 2759
diff changeset
58 int len, int flags);
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
59
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
60 typedef struct RTPDynamicProtocolHandler_s {
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
61 // fields from AVRtpDynamicPayloadType_s
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
62 const char enc_name[50]; /* XXX: still why 50 ? ;-) */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
63 enum CodecType codec_type;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
64 enum CodecID codec_id;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
65
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
66 // may be null
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
67 int (*parse_sdp_a_line) (AVStream * stream,
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
68 void *protocol_data,
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
69 const char *line); ///< Parse the a= line from the sdp field
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
70 void *(*open) (); ///< allocate any data needed by the rtp parsing for this dynamic data.
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
71 void (*close)(void *protocol_data); ///< free any data needed by the rtp parsing for this dynamic data.
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
72 DynamicPayloadPacketHandlerProc parse_packet; ///< parse handler for this dynamic packet.
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
73
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
74 struct RTPDynamicProtocolHandler_s *next;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
75 } RTPDynamicProtocolHandler;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
76
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
77 // moved out of rtp.c, because the h264 decoder needs to know about this structure..
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
78 struct RTPDemuxContext {
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
79 AVFormatContext *ic;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
80 AVStream *st;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
81 int payload_type;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
82 uint32_t ssrc;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
83 uint16_t seq;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
84 uint32_t timestamp;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
85 uint32_t base_timestamp;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
86 uint32_t cur_timestamp;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
87 int max_payload_size;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
88 struct MpegTSContext *ts; /* only used for MP2T payloads */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
89 int read_buf_index;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
90 int read_buf_size;
1425
00d9393a126f make ffmpeg able to send back a RTCP receiver report.
gpoirier
parents: 1422
diff changeset
91 /* used to send back RTCP RR */
00d9393a126f make ffmpeg able to send back a RTCP receiver report.
gpoirier
parents: 1422
diff changeset
92 URLContext *rtp_ctx;
00d9393a126f make ffmpeg able to send back a RTCP receiver report.
gpoirier
parents: 1422
diff changeset
93 char hostname[256];
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
94
1445
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
95 RTPStatistics statistics; ///< Statistics for this stream (used by RTCP receiver reports)
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
96
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
97 /* rtcp sender statistics receive */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
98 int64_t last_rtcp_ntp_time; // TODO: move into statistics
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
99 int64_t first_rtcp_ntp_time; // TODO: move into statistics
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
100 uint32_t last_rtcp_timestamp; // TODO: move into statistics
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
101
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
102 /* rtcp sender statistics */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
103 unsigned int packet_count; // TODO: move into statistics (outgoing)
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
104 unsigned int octet_count; // TODO: move into statistics (outgoing)
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
105 unsigned int last_octet_count; // TODO: move into statistics (outgoing)
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
106 int first_packet;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
107 /* buffer for output */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
108 uint8_t buf[RTP_MAX_PACKET_LENGTH];
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
109 uint8_t *buf_ptr;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
110
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
111 /* special infos for au headers parsing */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
112 rtp_payload_data_t *rtp_payload_data; // TODO: Move into dynamic payload handlers
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
113
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
114 /* dynamic payload stuff */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
115 DynamicPayloadPacketHandlerProc parse_packet; ///< This is also copied from the dynamic protocol handler structure
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
116 void *dynamic_protocol_context; ///< This is a copy from the values setup from the sdp parsing, in rtsp.c don't free me.
2587
d751acab2622 Allow to set the maximum number of frames per RTP packet (and add support for
lucabe
parents: 2545
diff changeset
117 int max_frames_per_packet;
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
118 };
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
119
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
120 extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;
1445
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
121
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
122 int 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.
2406
18e94e5989d8 Move the RTP packetization code for MPEG12 video in its own file (rtp_mpv.c)
lucabe
parents: 2171
diff changeset
123
18e94e5989d8 Move the RTP packetization code for MPEG12 video in its own file (rtp_mpv.c)
lucabe
parents: 2171
diff changeset
124 void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m);
2759
b252e318023a Remove the "AVRtpPayloadTypes[i].pt == i" assumption from RTP and RTSP
lucabe
parents: 2620
diff changeset
125 const char *ff_rtp_enc_name(int payload_type);
b252e318023a Remove the "AVRtpPayloadTypes[i].pt == i" assumption from RTP and RTSP
lucabe
parents: 2620
diff changeset
126 enum CodecID ff_rtp_codec_id(const char *buf, enum CodecType codec_type);
2545
213268d7594e move unrelated functions declarations out of allformats.h
aurel
parents: 2406
diff changeset
127
213268d7594e move unrelated functions declarations out of allformats.h
aurel
parents: 2406
diff changeset
128 void av_register_rtp_dynamic_payload_handlers(void);
213268d7594e move unrelated functions declarations out of allformats.h
aurel
parents: 2406
diff changeset
129
2620
792383dd085e Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 2587
diff changeset
130 #endif /* FFMPEG_RTP_INTERNAL_H */
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
131