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
00044
00045 typedef int (*DynamicPayloadPacketHandlerProc) (struct RTPDemuxContext * s,
00046 AVPacket * pkt,
00047 uint32_t *timestamp,
00048 const uint8_t * buf,
00049 int len);
00050
00051 typedef struct RTPDynamicProtocolHandler_s {
00052
00053 const char enc_name[50];
00054 enum CodecType codec_type;
00055 enum CodecID codec_id;
00056
00057
00058 int (*parse_sdp_a_line) (AVStream * stream,
00059 void *protocol_data,
00060 const char *line);
00061 void *(*open) ();
00062 void (*close)(void *protocol_data);
00063 DynamicPayloadPacketHandlerProc parse_packet;
00064
00065 struct RTPDynamicProtocolHandler_s *next;
00066 } RTPDynamicProtocolHandler;
00067
00068
00069 struct RTPDemuxContext {
00070 AVFormatContext *ic;
00071 AVStream *st;
00072 int payload_type;
00073 uint32_t ssrc;
00074 uint16_t seq;
00075 uint32_t timestamp;
00076 uint32_t base_timestamp;
00077 uint32_t cur_timestamp;
00078 int max_payload_size;
00079 struct MpegTSContext *ts;
00080 int read_buf_index;
00081 int read_buf_size;
00082
00083 URLContext *rtp_ctx;
00084 char hostname[256];
00085
00086 RTPStatistics statistics;
00087
00088
00089 int64_t last_rtcp_ntp_time;
00090 int64_t first_rtcp_ntp_time;
00091 uint32_t last_rtcp_timestamp;
00092
00093
00094 unsigned int packet_count;
00095 unsigned int octet_count;
00096 unsigned int last_octet_count;
00097 int first_packet;
00098
00099 uint8_t buf[RTP_MAX_PACKET_LENGTH];
00100 uint8_t *buf_ptr;
00101
00102
00103 rtp_payload_data_t *rtp_payload_data;
00104
00105
00106 DynamicPayloadPacketHandlerProc parse_packet;
00107 void *dynamic_protocol_context;
00108 int max_frames_per_packet;
00109 };
00110
00111 extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;
00112
00113 int rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size);
00114
00115 void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m);
00116 const char *ff_rtp_enc_name(int payload_type);
00117 enum CodecID ff_rtp_codec_id(const char *buf, enum CodecType codec_type);
00118
00119 void av_register_rtp_dynamic_payload_handlers(void);
00120
00121 #endif
00122