X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frtpdec.h;h=46b08ce925f0404f863258ad67c882e6e2b97bb0;hb=2bb2c2bd75e5f4b28a945511cda77e0a1a44c758;hp=2d962c82c79af5280259bd0b6387259be76b59f5;hpb=3f95f0dda55fca74b646937095a02a8fa9776622;p=ffmpeg diff --git a/libavformat/rtpdec.h b/libavformat/rtpdec.h index 2d962c82c79..46b08ce925f 100644 --- a/libavformat/rtpdec.h +++ b/libavformat/rtpdec.h @@ -27,12 +27,13 @@ #include "avformat.h" #include "rtp.h" #include "url.h" +#include "srtp.h" typedef struct PayloadContext PayloadContext; typedef struct RTPDynamicProtocolHandler RTPDynamicProtocolHandler; #define RTP_MIN_PACKET_LENGTH 12 -#define RTP_MAX_PACKET_LENGTH 1500 +#define RTP_MAX_PACKET_LENGTH 8192 #define RTP_REORDER_QUEUE_DEFAULT_SIZE 10 @@ -43,15 +44,13 @@ RTPDemuxContext *ff_rtp_parse_open(AVFormatContext *s1, AVStream *st, int payload_type, int queue_size); void ff_rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx, RTPDynamicProtocolHandler *handler); +void ff_rtp_parse_set_crypto(RTPDemuxContext *s, const char *suite, + const char *params); int ff_rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt, uint8_t **buf, int len); void ff_rtp_parse_close(RTPDemuxContext *s); int64_t ff_rtp_queued_packet_time(RTPDemuxContext *s); void ff_rtp_reset_packet_queue(RTPDemuxContext *s); -int ff_rtp_get_local_rtp_port(URLContext *h); -int ff_rtp_get_local_rtcp_port(URLContext *h); - -int ff_rtp_set_remote_url(URLContext *h, const char *uri); /** * Send a dummy packet on both port pairs to set up the connection @@ -68,10 +67,13 @@ void ff_rtp_send_punch_packets(URLContext* rtp_handle); /** * some rtp servers assume client is dead if they don't hear from them... - * so we send a Receiver Report to the provided URLContext + * so we send a Receiver Report to the provided URLContext or AVIOContext * (we don't have access to the rtcp handle from here) */ -int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, URLContext *fd, int count); +int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, URLContext *fd, + AVIOContext *avio, int count); +int ff_rtp_send_rtcp_feedback(RTPDemuxContext *s, URLContext *fd, + AVIOContext *avio); // these statistics are used for rtcp receiver reports... typedef struct RTPStatistics { @@ -80,9 +82,9 @@ typedef struct RTPStatistics { uint32_t base_seq; ///< base sequence number uint32_t bad_seq; ///< last bad sequence number + 1 int probation; ///< sequence packets till source is valid - int received; ///< packets received - int expected_prior; ///< packets expected in last interval - int received_prior; ///< packets received in last interval + uint32_t received; ///< packets received + uint32_t expected_prior; ///< packets expected in last interval + uint32_t received_prior; ///< packets received in last interval uint32_t transit; ///< relative transit time for previous packet uint32_t jitter; ///< estimated jitter. } RTPStatistics; @@ -129,6 +131,7 @@ struct RTPDynamicProtocolHandler { void (*free)(PayloadContext *protocol_data); /** Parse handler for this dynamic packet */ DynamicPayloadPacketHandlerProc parse_packet; + int (*need_keyframe)(PayloadContext *context); struct RTPDynamicProtocolHandler *next; }; @@ -153,12 +156,12 @@ struct RTPDemuxContext { int64_t unwrapped_timestamp; int64_t range_start_offset; int max_payload_size; - struct MpegTSContext *ts; /* only used for MP2T payloads */ - int read_buf_index; - int read_buf_size; /* used to send back RTCP RR */ char hostname[256]; + int srtp_enabled; + struct SRTPContext srtp; + /** Statistics for this stream (used by RTCP receiver reports) */ RTPStatistics statistics; @@ -171,6 +174,7 @@ struct RTPDemuxContext { /* rtcp sender statistics receive */ int64_t last_rtcp_ntp_time; + int64_t last_rtcp_reception_time; int64_t first_rtcp_ntp_time; uint32_t last_rtcp_timestamp; int64_t rtcp_ts_offset; @@ -179,11 +183,10 @@ struct RTPDemuxContext { unsigned int packet_count; unsigned int octet_count; unsigned int last_octet_count; - /* buffer for partially parsed packets */ - uint8_t buf[RTP_MAX_PACKET_LENGTH]; + int64_t last_feedback_time; /* dynamic payload stuff */ - DynamicPayloadPacketHandlerProc parse_packet; + const RTPDynamicProtocolHandler *handler; PayloadContext *dynamic_protocol_context; }; @@ -197,12 +200,14 @@ RTPDynamicProtocolHandler *ff_rtp_handler_find_by_id(int id, int ff_rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size); -int ff_parse_fmtp(AVStream *stream, PayloadContext *data, const char *p, - int (*parse_fmtp)(AVStream *stream, +int ff_parse_fmtp(AVFormatContext *s, + AVStream *stream, PayloadContext *data, const char *p, + int (*parse_fmtp)(AVFormatContext *s, + AVStream *stream, PayloadContext *data, char *attr, char *value)); -void av_register_rtp_dynamic_payload_handlers(void); +void ff_register_rtp_dynamic_payload_handlers(void); /** * Close the dynamic buffer and make a packet from it.