annotate rtp_internal.h @ 2912:d309f070a747 libavformat

check av_new_stream return value
author bcoudurier
date Tue, 08 Jan 2008 13:48:52 +0000
parents b252e318023a
children 6da0564c9d02
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>
a6d6b2b19341 include all prerequisites in header files
mru
parents: 1445
diff changeset
27 #include "avcodec.h"
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
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
44
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
45 typedef int (*DynamicPayloadPacketHandlerProc) (struct RTPDemuxContext * s,
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
46 AVPacket * pkt,
1431
2d8a17631520 fix more dynamic protocol stuff, needed by the forthcoming h264
gpoirier
parents: 1425
diff changeset
47 uint32_t *timestamp,
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
48 const uint8_t * buf,
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
49 int len);
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
50
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
51 typedef struct RTPDynamicProtocolHandler_s {
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
52 // fields from AVRtpDynamicPayloadType_s
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
53 const char enc_name[50]; /* XXX: still why 50 ? ;-) */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
54 enum CodecType codec_type;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
55 enum CodecID codec_id;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
56
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
57 // may be null
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
58 int (*parse_sdp_a_line) (AVStream * stream,
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
59 void *protocol_data,
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
60 const char *line); ///< Parse the a= line from the sdp field
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
61 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
62 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
63 DynamicPayloadPacketHandlerProc parse_packet; ///< parse handler for this dynamic packet.
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
64
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
65 struct RTPDynamicProtocolHandler_s *next;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
66 } RTPDynamicProtocolHandler;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
67
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
68 // 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
69 struct RTPDemuxContext {
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
70 AVFormatContext *ic;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
71 AVStream *st;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
72 int payload_type;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
73 uint32_t ssrc;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
74 uint16_t seq;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
75 uint32_t timestamp;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
76 uint32_t base_timestamp;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
77 uint32_t cur_timestamp;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
78 int max_payload_size;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
79 struct MpegTSContext *ts; /* only used for MP2T payloads */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
80 int read_buf_index;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
81 int read_buf_size;
1425
00d9393a126f make ffmpeg able to send back a RTCP receiver report.
gpoirier
parents: 1422
diff changeset
82 /* used to send back RTCP RR */
00d9393a126f make ffmpeg able to send back a RTCP receiver report.
gpoirier
parents: 1422
diff changeset
83 URLContext *rtp_ctx;
00d9393a126f make ffmpeg able to send back a RTCP receiver report.
gpoirier
parents: 1422
diff changeset
84 char hostname[256];
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
85
1445
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
86 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
87
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
88 /* rtcp sender statistics receive */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
89 int64_t last_rtcp_ntp_time; // TODO: move into statistics
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
90 int64_t first_rtcp_ntp_time; // TODO: move into statistics
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
91 uint32_t last_rtcp_timestamp; // TODO: move into statistics
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
92
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
93 /* rtcp sender statistics */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
94 unsigned int packet_count; // TODO: move into statistics (outgoing)
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
95 unsigned int octet_count; // TODO: move into statistics (outgoing)
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
96 unsigned int last_octet_count; // TODO: move into statistics (outgoing)
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
97 int first_packet;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
98 /* buffer for output */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
99 uint8_t buf[RTP_MAX_PACKET_LENGTH];
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
100 uint8_t *buf_ptr;
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
101
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
102 /* special infos for au headers parsing */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
103 rtp_payload_data_t *rtp_payload_data; // TODO: Move into dynamic payload handlers
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
104
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
105 /* dynamic payload stuff */
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
106 DynamicPayloadPacketHandlerProc parse_packet; ///< This is also copied from the dynamic protocol handler structure
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
107 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
108 int max_frames_per_packet;
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
109 };
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
110
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
111 extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;
1445
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
112
db97355877b1 add valid statistics for the RTCP receiver report.
gpoirier
parents: 1431
diff changeset
113 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
114
18e94e5989d8 Move the RTP packetization code for MPEG12 video in its own file (rtp_mpv.c)
lucabe
parents: 2171
diff changeset
115 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
116 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
117 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
118
213268d7594e move unrelated functions declarations out of allformats.h
aurel
parents: 2406
diff changeset
119 void av_register_rtp_dynamic_payload_handlers(void);
213268d7594e move unrelated functions declarations out of allformats.h
aurel
parents: 2406
diff changeset
120
2620
792383dd085e Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 2587
diff changeset
121 #endif /* FFMPEG_RTP_INTERNAL_H */
1419
8fb4910bdcc0 Add support for H264 over RTP
gpoirier
parents:
diff changeset
122