#include "libavcodec/get_bits.h"
#include "avformat.h"
#include "mpegts.h"
#include "url.h"
#include <unistd.h>
#include <strings.h>
#include "network.h"
#include "rtpdec.h"
#include "rtpdec_formats.h"
Go to the source code of this file.
Defines | |
#define | RTP_SEQ_MOD (1<<16) |
Functions | |
void | ff_register_dynamic_payload_handler (RTPDynamicProtocolHandler *handler) |
void | av_register_rtp_dynamic_payload_handlers (void) |
RTPDynamicProtocolHandler * | ff_rtp_handler_find_by_name (const char *name, enum AVMediaType codec_type) |
RTPDynamicProtocolHandler * | ff_rtp_handler_find_by_id (int id, enum AVMediaType codec_type) |
static int | rtcp_parse_packet (RTPDemuxContext *s, const unsigned char *buf, int len) |
static void | rtp_init_statistics (RTPStatistics *s, uint16_t base_sequence) |
called on parse open packet | |
static void | rtp_init_sequence (RTPStatistics *s, uint16_t seq) |
called whenever there is a large jump in sequence numbers, or when they get out of probation... | |
static int | rtp_valid_packet_in_sequence (RTPStatistics *s, uint16_t seq) |
returns 1 if we should handle this packet. | |
int | rtp_check_and_send_back_rr (RTPDemuxContext *s, int count) |
some rtp servers assume client is dead if they don't hear from them... | |
void | rtp_send_punch_packets (URLContext *rtp_handle) |
Send a dummy packet on both port pairs to set up the connection state in potential NAT routers, so that we're able to receive packets. | |
RTPDemuxContext * | rtp_parse_open (AVFormatContext *s1, AVStream *st, URLContext *rtpc, int payload_type, int queue_size) |
open a new RTP parse context for stream 'st'. | |
void | rtp_parse_set_dynamic_protocol (RTPDemuxContext *s, PayloadContext *ctx, RTPDynamicProtocolHandler *handler) |
static void | finalize_packet (RTPDemuxContext *s, AVPacket *pkt, uint32_t timestamp) |
This was the second switch in rtp_parse packet. | |
static int | rtp_parse_packet_internal (RTPDemuxContext *s, AVPacket *pkt, const uint8_t *buf, int len) |
void | ff_rtp_reset_packet_queue (RTPDemuxContext *s) |
static void | enqueue_packet (RTPDemuxContext *s, uint8_t *buf, int len) |
static int | has_next_packet (RTPDemuxContext *s) |
int64_t | ff_rtp_queued_packet_time (RTPDemuxContext *s) |
static int | rtp_parse_queued_packet (RTPDemuxContext *s, AVPacket *pkt) |
static int | rtp_parse_one_packet (RTPDemuxContext *s, AVPacket *pkt, uint8_t **bufptr, int len) |
int | rtp_parse_packet (RTPDemuxContext *s, AVPacket *pkt, uint8_t **bufptr, int len) |
Parse an RTP or RTCP packet directly sent as a buffer. | |
void | rtp_parse_close (RTPDemuxContext *s) |
int | ff_parse_fmtp (AVStream *stream, PayloadContext *data, const char *p, int(*parse_fmtp)(AVStream *stream, PayloadContext *data, char *attr, char *value)) |
Variables | |
static RTPDynamicProtocolHandler | ff_realmedia_mp3_dynamic_handler |
static RTPDynamicProtocolHandler * | RTPFirstDynamicPayloadHandler = NULL |
#define RTP_SEQ_MOD (1<<16) |
Definition at line 149 of file rtpdec.c.
Referenced by rtp_init_sequence(), and rtp_valid_packet_in_sequence().
void av_register_rtp_dynamic_payload_handlers | ( | void | ) |
Definition at line 60 of file rtpdec.c.
Referenced by av_register_all().
static void enqueue_packet | ( | RTPDemuxContext * | s, | |
uint8_t * | buf, | |||
int | len | |||
) | [static] |
Definition at line 599 of file rtpdec.c.
Referenced by rtp_parse_one_packet().
int ff_parse_fmtp | ( | AVStream * | stream, | |
PayloadContext * | data, | |||
const char * | p, | |||
int(*)(AVStream *stream, PayloadContext *data, char *attr, char *value) | parse_fmtp | |||
) |
Definition at line 764 of file rtpdec.c.
Referenced by amr_parse_sdp_line(), latm_parse_sdp_line(), parse_h264_sdp_line(), parse_sdp_line(), and xiph_parse_sdp_line().
void ff_register_dynamic_payload_handler | ( | RTPDynamicProtocolHandler * | handler | ) |
Definition at line 54 of file rtpdec.c.
Referenced by av_register_rdt_dynamic_payload_handlers(), and av_register_rtp_dynamic_payload_handlers().
RTPDynamicProtocolHandler* ff_rtp_handler_find_by_id | ( | int | id, | |
enum AVMediaType | codec_type | |||
) |
Definition at line 104 of file rtpdec.c.
Referenced by sdp_parse_line().
RTPDynamicProtocolHandler* ff_rtp_handler_find_by_name | ( | const char * | name, | |
enum AVMediaType | codec_type | |||
) |
Definition at line 92 of file rtpdec.c.
Referenced by sdp_parse_rtpmap().
int64_t ff_rtp_queued_packet_time | ( | RTPDemuxContext * | s | ) |
Definition at line 633 of file rtpdec.c.
Referenced by ff_rtsp_fetch_packet().
void ff_rtp_reset_packet_queue | ( | RTPDemuxContext * | s | ) |
Definition at line 586 of file rtpdec.c.
Referenced by rtp_parse_close(), and rtsp_read_play().
static void finalize_packet | ( | RTPDemuxContext * | s, | |
AVPacket * | pkt, | |||
uint32_t | timestamp | |||
) | [static] |
This was the second switch in rtp_parse packet.
Normalizes time, if required, sets stream_index, etc.
Definition at line 440 of file rtpdec.c.
Referenced by rtp_parse_one_packet(), and rtp_parse_packet_internal().
static int has_next_packet | ( | RTPDemuxContext * | s | ) | [static] |
Definition at line 628 of file rtpdec.c.
Referenced by rtp_parse_packet(), and rtp_parse_queued_packet().
static int rtcp_parse_packet | ( | RTPDemuxContext * | s, | |
const unsigned char * | buf, | |||
int | len | |||
) | [static] |
Definition at line 116 of file rtpdec.c.
Referenced by rtp_parse_one_packet().
int rtp_check_and_send_back_rr | ( | RTPDemuxContext * | s, | |
int | count | |||
) |
some rtp servers assume client is dead if they don't hear from them...
so we send a Receiver Report to the provided ByteIO context (we don't have access to the rtcp handle from here)
Definition at line 241 of file rtpdec.c.
Referenced by ff_rtsp_fetch_packet().
static void rtp_init_sequence | ( | RTPStatistics * | s, | |
uint16_t | seq | |||
) | [static] |
called whenever there is a large jump in sequence numbers, or when they get out of probation...
Definition at line 164 of file rtpdec.c.
Referenced by rtp_valid_packet_in_sequence().
static void rtp_init_statistics | ( | RTPStatistics * | s, | |
uint16_t | base_sequence | |||
) | [static] |
called on parse open packet
Definition at line 154 of file rtpdec.c.
Referenced by rtp_parse_open().
void rtp_parse_close | ( | RTPDemuxContext * | s | ) |
Definition at line 755 of file rtpdec.c.
Referenced by ff_rtsp_undo_setup().
static int rtp_parse_one_packet | ( | RTPDemuxContext * | s, | |
AVPacket * | pkt, | |||
uint8_t ** | bufptr, | |||
int | len | |||
) | [static] |
Definition at line 660 of file rtpdec.c.
Referenced by rtp_parse_packet().
RTPDemuxContext* rtp_parse_open | ( | AVFormatContext * | s1, | |
AVStream * | st, | |||
URLContext * | rtpc, | |||
int | payload_type, | |||
int | queue_size | |||
) |
open a new RTP parse context for stream 'st'.
'st' can be NULL for MPEG2TS streams to indicate that they should be demuxed inside the rtp demux (otherwise CODEC_ID_MPEG2TS packets are returned)
Definition at line 382 of file rtpdec.c.
Referenced by rtsp_open_transport_ctx().
int rtp_parse_packet | ( | RTPDemuxContext * | s, | |
AVPacket * | pkt, | |||
uint8_t ** | bufptr, | |||
int | len | |||
) |
Parse an RTP or RTCP packet directly sent as a buffer.
s | RTP parse context. | |
pkt | returned packet | |
bufptr | pointer to the input buffer or NULL to read the next packets | |
len | buffer len |
Definition at line 745 of file rtpdec.c.
Referenced by ff_rtsp_fetch_packet().
static int rtp_parse_packet_internal | ( | RTPDemuxContext * | s, | |
AVPacket * | pkt, | |||
const uint8_t * | buf, | |||
int | len | |||
) | [static] |
Definition at line 463 of file rtpdec.c.
Referenced by rtp_parse_one_packet(), and rtp_parse_queued_packet().
static int rtp_parse_queued_packet | ( | RTPDemuxContext * | s, | |
AVPacket * | pkt | |||
) | [static] |
Definition at line 638 of file rtpdec.c.
Referenced by rtp_parse_one_packet(), and rtp_parse_packet().
void rtp_parse_set_dynamic_protocol | ( | RTPDemuxContext * | s, | |
PayloadContext * | ctx, | |||
RTPDynamicProtocolHandler * | handler | |||
) |
Definition at line 430 of file rtpdec.c.
Referenced by rtsp_open_transport_ctx().
void rtp_send_punch_packets | ( | URLContext * | rtp_handle | ) |
Send a dummy packet on both port pairs to set up the connection state in potential NAT routers, so that we're able to receive packets.
Note, this only works if the NAT router doesn't remap ports. This isn't a standardized procedure, but it works in many cases in practice.
The same routine is used with RDT too, even if RDT doesn't use normal RTP packets otherwise.
Definition at line 338 of file rtpdec.c.
Referenced by ff_rtsp_make_setup_request().
static int rtp_valid_packet_in_sequence | ( | RTPStatistics * | s, | |
uint16_t | seq | |||
) | [static] |
returns 1 if we should handle this packet.
Definition at line 180 of file rtpdec.c.
Referenced by rtp_parse_packet_internal().