00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef FFMPEG_RTP_INTERNAL_H
00024 #define FFMPEG_RTP_INTERNAL_H
00025
00026 #include <stdint.h>
00027 #include "avcodec.h"
00028 #include "rtp.h"
00029
00030
00031 typedef struct {
00032 uint16_t max_seq;
00033 uint32_t cycles;
00034 uint32_t base_seq;
00035 uint32_t bad_seq;
00036 int probation;
00037 int received;
00038 int expected_prior;
00039 int received_prior;
00040 uint32_t transit;
00041 uint32_t jitter;
00042 } RTPStatistics;
00043
00054 typedef int (*DynamicPayloadPacketHandlerProc) (struct RTPDemuxContext * s,
00055 AVPacket * pkt,
00056 uint32_t *timestamp,
00057 const uint8_t * buf,
00058 int len, int flags);
00059
00060 typedef struct RTPDynamicProtocolHandler_s {
00061
00062 const char enc_name[50];
00063 enum CodecType codec_type;
00064 enum CodecID codec_id;
00065
00066
00067 int (*parse_sdp_a_line) (AVStream * stream,
00068 void *protocol_data,
00069 const char *line);
00070 void *(*open) ();
00071 void (*close)(void *protocol_data);
00072 DynamicPayloadPacketHandlerProc parse_packet;
00073
00074 struct RTPDynamicProtocolHandler_s *next;
00075 } RTPDynamicProtocolHandler;
00076
00077
00078 struct RTPDemuxContext {
00079 AVFormatContext *ic;
00080 AVStream *st;
00081 int payload_type;
00082 uint32_t ssrc;
00083 uint16_t seq;
00084 uint32_t timestamp;
00085 uint32_t base_timestamp;
00086 uint32_t cur_timestamp;
00087 int max_payload_size;
00088 struct MpegTSContext *ts;
00089 int read_buf_index;
00090 int read_buf_size;
00091
00092 URLContext *rtp_ctx;
00093 char hostname[256];
00094
00095 RTPStatistics statistics;
00096
00097
00098 int64_t last_rtcp_ntp_time;
00099 int64_t first_rtcp_ntp_time;
00100 uint32_t last_rtcp_timestamp;
00101
00102
00103 unsigned int packet_count;
00104 unsigned int octet_count;
00105 unsigned int last_octet_count;
00106 int first_packet;
00107
00108 uint8_t buf[RTP_MAX_PACKET_LENGTH];
00109 uint8_t *buf_ptr;
00110
00111
00112 rtp_payload_data_t *rtp_payload_data;
00113
00114
00115 DynamicPayloadPacketHandlerProc parse_packet;
00116 void *dynamic_protocol_context;
00117 int max_frames_per_packet;
00118 };
00119
00120 extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;
00121
00122 int rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size);
00123
00124 void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m);
00125 const char *ff_rtp_enc_name(int payload_type);
00126 enum CodecID ff_rtp_codec_id(const char *buf, enum CodecType codec_type);
00127
00128 void av_register_rtp_dynamic_payload_handlers(void);
00129
00130 #endif
00131